Skip to content

Commit cb8459e

Browse files
committed
fix - magnify image with smooth scroll
1 parent 486f3c9 commit cb8459e

File tree

2 files changed

+60
-61
lines changed

2 files changed

+60
-61
lines changed

scripts/content-scripts/ufs_global.js

Lines changed: 48 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,9 @@ function enableDragAndZoom(element, container, callback) {
294294
`;
295295

296296
// Variables to track the current position
297-
var lastX = 0;
298-
var lastY = 0;
299-
var dragging = false;
297+
let lastX = 0;
298+
let lastY = 0;
299+
let dragging = false;
300300
let mouse = { x: 0, y: 0 };
301301

302302
// Mouse down event listener
@@ -339,30 +339,27 @@ function enableDragAndZoom(element, container, callback) {
339339
// Mouse wheel event listener for zooming
340340
(container || element).addEventListener("wheel", function (e) {
341341
e.preventDefault();
342-
var delta = Math.max(-1, Math.min(1, e.wheelDelta || -e.detail));
343-
var scaleFactor = 1.2;
344-
var scale = delta > 0 ? scaleFactor : 1 / scaleFactor;
345342

346-
// Calculate mouse position relative to the container
347-
// var rect = container.getBoundingClientRect();
348-
// var mouseX = e.clientX - rect.left;
349-
// var mouseY = e.clientY - rect.top;
343+
let curScale = parseFloat(element.style.width) / element.width;
344+
let delta = -e.wheelDeltaY || -e.wheelDelta;
345+
let factor = Math.abs((0.1 * delta) / 120);
346+
let scale = delta > 0 ? curScale * (1 - factor) : curScale * (1 + factor);
350347

351348
// Adjust scale at mouse position
352-
var offsetX = mouse.x - element.offsetLeft;
353-
var offsetY = mouse.y - element.offsetTop;
349+
let offsetX = mouse.x - element.offsetLeft;
350+
let offsetY = mouse.y - element.offsetTop;
354351

355-
var newWidth = element.width * scale;
356-
var newHeight = element.height * scale;
352+
let newWidth = element.width * scale;
353+
let newHeight = element.height * scale;
357354

358355
if (newWidth < 3 || newHeight < 3) {
359356
return;
360357
}
361358

362-
var newLeft =
359+
let newLeft =
363360
element.offsetLeft -
364361
(newWidth - element.width) * (offsetX / element.width);
365-
var newTop =
362+
let newTop =
366363
element.offsetTop -
367364
(newHeight - element.height) * (offsetY / element.height);
368365

@@ -376,13 +373,13 @@ function enableDragAndZoom(element, container, callback) {
376373
}
377374
// prettier-ignore
378375
function getContentClientRect(target) {
379-
var rect = target.getBoundingClientRect();
380-
var compStyle = window.getComputedStyle(target);
381-
var pFloat = parseFloat;
382-
var top = rect.top + pFloat(compStyle.paddingTop) + pFloat(compStyle.borderTopWidth);
383-
var right = rect.right - pFloat(compStyle.paddingRight) - pFloat(compStyle.borderRightWidth);
384-
var bottom = rect.bottom - pFloat(compStyle.paddingBottom) - pFloat(compStyle.borderBottomWidth);
385-
var left = rect.left + pFloat(compStyle.paddingLeft) + pFloat(compStyle.borderLeftWidth);
376+
let rect = target.getBoundingClientRect();
377+
let compStyle = window.getComputedStyle(target);
378+
let pFloat = parseFloat;
379+
let top = rect.top + pFloat(compStyle.paddingTop) + pFloat(compStyle.borderTopWidth);
380+
let right = rect.right - pFloat(compStyle.paddingRight) - pFloat(compStyle.borderRightWidth);
381+
let bottom = rect.bottom - pFloat(compStyle.paddingBottom) - pFloat(compStyle.borderBottomWidth);
382+
let left = rect.left + pFloat(compStyle.paddingLeft) + pFloat(compStyle.borderLeftWidth);
386383
return {
387384
top : top,
388385
right : right,
@@ -394,8 +391,8 @@ function getContentClientRect(target) {
394391
}
395392
function dataURLToCanvas(dataurl, cb) {
396393
if (!dataurl) return cb(null);
397-
var ctx = canvas.getContext("2d");
398-
var img = new Image();
394+
let ctx = canvas.getContext("2d");
395+
let img = new Image();
399396
img.setAttribute("crossOrigin", "anonymous");
400397
img.onload = function () {
401398
canvas.width = img.width;
@@ -558,8 +555,8 @@ function onDoublePress(key, callback, timeout = 500) {
558555
};
559556
} // https://stackoverflow.com/a/3381522
560557
function createFlashTitle(newMsg, howManyTimes) {
561-
var original = document.title;
562-
var timeout;
558+
let original = document.title;
559+
let timeout;
563560

564561
function step() {
565562
document.title = document.title == original ? newMsg : original;
@@ -751,13 +748,13 @@ function onElementTextContentChanged(element, callback, once) {
751748
return () => observer.disconnect();
752749
}
753750
function injectCssCode(code) {
754-
var css = document.createElement("style");
751+
let css = document.createElement("style");
755752
if ("textContent" in css) css.textContent = code;
756753
else css.innerText = code;
757754
(document.head || document.documentElement).appendChild(css);
758755
}
759756
function injectCssFile(filePath, id) {
760-
var css = document.createElement("link");
757+
let css = document.createElement("link");
761758
css.setAttribute("rel", "stylesheet");
762759
css.setAttribute("type", "text/css");
763760
css.setAttribute("href", filePath);
@@ -814,7 +811,7 @@ function isElementInViewport(el) {
814811
el = el[0];
815812
}
816813

817-
var rect = el.getBoundingClientRect();
814+
let rect = el.getBoundingClientRect();
818815

819816
return (
820817
rect.top >= 0 &&
@@ -828,7 +825,7 @@ function isElementInViewport(el) {
828825
);
829826
}
830827
function getOverlapScore(el) {
831-
var rect = el.getBoundingClientRect();
828+
let rect = el.getBoundingClientRect();
832829
return (
833830
Math.min(
834831
rect.bottom,
@@ -923,7 +920,7 @@ function getNumberFormatter(optionSelect, locale) {
923920
* @source - required (Object|Array) the object or array to be copied
924921
*/
925922
function deepClone(source) {
926-
var result = {};
923+
let result = {};
927924

928925
if (typeof source !== "object") {
929926
return source;
@@ -934,7 +931,7 @@ function deepClone(source) {
934931
if (Object.prototype.toString.call(source) === "[object Null]") {
935932
result = null;
936933
}
937-
for (var key in source) {
934+
for (let key in source) {
938935
result[key] =
939936
typeof source[key] === "object" ? deepClone(source[key]) : source[key];
940937
}
@@ -973,11 +970,11 @@ function domainCheck(domains) {
973970
}
974971
function setCookie(name, value, days) {
975972
if (days) {
976-
var date = new Date();
973+
let date = new Date();
977974
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
978975
let expires = "; expires=" + date.toGMTString();
979976
} else {
980-
var expires = "";
977+
let expires = "";
981978
document.cookie = name + "=" + value + expires + "; path=/";
982979
}
983980
}
@@ -1010,7 +1007,7 @@ async function xml2json(xml) {
10101007
return window.xml2json(xml);
10111008
}
10121009
function getLargestSrcset(srcset) {
1013-
var srcs = srcset.split(/[xw],/i),
1010+
let srcs = srcset.split(/[xw],/i),
10141011
largeSize = -1,
10151012
largeSrc = null;
10161013
if (!srcs.length) return null;
@@ -1124,7 +1121,7 @@ function uniqueArray(array) {
11241121
return Array.from(new Set(array));
11251122
}
11261123
function replaceUsingRegex(str, r, s) {
1127-
var results = [];
1124+
let results = [];
11281125

11291126
if (!Array.isArray(r) && !Array.isArray(s)) {
11301127
if (r && r.test && r.test(str)) {
@@ -1223,7 +1220,7 @@ async function getLargestImageSrc(imgSrc, webUrl) {
12231220
// https://greasyfork.org/en/scripts/2312-resize-image-on-open-image-in-new-tab
12241221
function try3() {
12251222
return new Promise((resolve) => {
1226-
var m = null;
1223+
let m = null;
12271224
//google
12281225
if (
12291226
(m = imgSrc.match(
@@ -1269,7 +1266,7 @@ async function getLargestImageSrc(imgSrc, webUrl) {
12691266
))
12701267
) {
12711268
if (m[2] < 1280) {
1272-
var ajax = new XMLHttpRequest();
1269+
let ajax = new XMLHttpRequest();
12731270
ajax.onreadystatechange = function () {
12741271
if (ajax.status == 200) {
12751272
resolve(m[1] + "1280" + m[3]);
@@ -1286,14 +1283,14 @@ async function getLargestImageSrc(imgSrc, webUrl) {
12861283
/^(https?:\/\/\w+\.twimg\.com\/media\/[^\/:]+)\.(jpg|jpeg|gif|png|bmp|webp)(:\w+)?$/i
12871284
))
12881285
) {
1289-
var format = m[2];
1286+
let format = m[2];
12901287
if (m[2] == "jpeg") format = "jpg";
12911288
resolve(m[1] + "?format=" + format + "&name=orig");
12921289
} else if (
12931290
(m = imgSrc.match(/^(https?:\/\/\w+\.twimg\.com\/.+)(\?.+)$/i))
12941291
) {
12951292
let url = new URL(webUrl);
1296-
var pars = url.searchParams;
1293+
let pars = url.searchParams;
12971294
if (!pars.format || !pars.name) return;
12981295
if (pars.name == "orig") return;
12991296
resolve(m[1] + "?format=" + pars.format + "&name=orig");
@@ -1505,7 +1502,7 @@ function canonicalUri(src, location = window.location) {
15051502
if (src.charAt(0) == "#") return location.href + src;
15061503
if (src.charAt(0) == "?")
15071504
return location.href.replace(/^([^\?#]+).*/, "$1" + src);
1508-
var root_page = /^[^?#]*\//.exec(location.href)[0],
1505+
let root_page = /^[^?#]*\//.exec(location.href)[0],
15091506
base_path = location.pathname.replace(/\/[^\/]+\.[^\/]+$/, "/"),
15101507
root_domain = /^\w+\:\/\/\/?[^\/]+/.exec(root_page)[0],
15111508
absolute_regex = /^\w+\:\/\//;
@@ -1581,9 +1578,9 @@ function hook(obj, name, callback) {
15811578
}
15821579
// https://stackoverflow.com/a/38552302/11898496
15831580
function parseJwt(token) {
1584-
var base64Url = token.split(".")[1];
1585-
var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
1586-
var jsonPayload = decodeURIComponent(
1581+
let base64Url = token.split(".")[1];
1582+
let base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
1583+
let jsonPayload = decodeURIComponent(
15871584
atob(base64)
15881585
.split("")
15891586
.map(function (c) {
@@ -1622,7 +1619,7 @@ function copyToClipboard(text) {
16221619
// https://stackoverflow.com/a/7960435
16231620
function isEmptyFunction(func) {
16241621
try {
1625-
var m = func.toString().match(/\{([\s\S]*)\}/m)[1];
1622+
let m = func.toString().match(/\{([\s\S]*)\}/m)[1];
16261623
return !m.replace(/^\s*\/\/.*$/gm, "");
16271624
} catch (e) {
16281625
console.log("Error isEmptyFunction", e);
@@ -1638,8 +1635,8 @@ function unescapeRegExp(text) {
16381635
return text.replace(/\\(.)/g, "$1");
16391636
}
16401637
function encodeQueryString(obj) {
1641-
var str = [];
1642-
for (var p in obj)
1638+
let str = [];
1639+
for (let p in obj)
16431640
if (obj.hasOwnProperty(p)) {
16441641
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
16451642
}
@@ -1753,7 +1750,7 @@ function downloadBlob(blob, filename) {
17531750
// https://stackoverflow.com/a/15832662/11898496
17541751
// TODO: chrome.downloads: https://developer.chrome.com/docs/extensions/reference/downloads/#method-download
17551752
function downloadURL(url, name) {
1756-
var link = document.createElement("a");
1753+
let link = document.createElement("a");
17571754
link.target = "_blank";
17581755
link.download = name;
17591756
link.href = url;
@@ -1762,11 +1759,11 @@ function downloadURL(url, name) {
17621759
document.body.removeChild(link);
17631760
}
17641761
function downloadData(data, filename, type = "text/plain") {
1765-
var file = new Blob([data], { type: type });
1762+
let file = new Blob([data], { type: type });
17661763
if (window.navigator.msSaveOrOpenBlob)
17671764
window.navigator.msSaveOrOpenBlob(file, filename);
17681765
else {
1769-
var a = document.createElement("a"),
1766+
let a = document.createElement("a"),
17701767
url = URL.createObjectURL(file);
17711768
a.href = url;
17721769
a.download = filename;

scripts/magnify_image.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -914,16 +914,18 @@ function createPreview(
914914
}
915915
};
916916

917-
toolbar.appendChild(sizeEle);
918-
toolbar.appendChild(zoomEle);
919-
toolbar.appendChild(toggleBg);
920-
toolbar.appendChild(flipH);
921-
toolbar.appendChild(flipV);
922-
toolbar.appendChild(rotateLeft);
923-
toolbar.appendChild(rotateRight);
924-
toolbar.appendChild(openNewTab);
925-
toolbar.appendChild(download);
926-
toolbar.appendChild(desc);
917+
toolbar.append(
918+
sizeEle,
919+
zoomEle,
920+
toggleBg,
921+
flipH,
922+
flipV,
923+
rotateLeft,
924+
rotateRight,
925+
openNewTab,
926+
download,
927+
desc
928+
);
927929

928930
UfsGlobal.DOM.enableDragAndZoom(img, overlay, (data) => {
929931
if (data?.type === "scale") {

0 commit comments

Comments
 (0)