mourningdove/htdocs/js/userpicfactory.js
2026-05-24 01:03:05 +00:00

110 lines
2.5 KiB
JavaScript

var regsel;
var borderOn = false;
function onRegionChange (c) {
updatePreview(c);
}
function onRegionChanged (c) {
if (!c.x2 && !c.y2) return;
updatePreview(c);
$("x1").value = c.x1;
$("y1").value = c.y1;
$("x2").value = c.x2;
$("y2").value = c.y2;
}
function updatePreview (c) {
var w = c.x2 - c.x1, h = c.y2 - c.y1;
var upp = $("userpicpreview");
var newsizes = getSizedCoords(100, w, h);
var zoomw = 1/(w/origW);
var zoomh = 1/(h/origH);
var nw = Math.floor(newsizes[0] * zoomw);
var nh = Math.floor(newsizes[1] * zoomh);
upp.width = nw;
upp.height = nh;
var zoomx = nw/origW;
var zoomy = nh/origH;
$("prevcon").style.width = Math.floor(newsizes[0]) + "px";
$("prevcon").style.height = Math.floor(newsizes[1]) + "px";
var nl = zoomx * c.x1;
var nt = zoomy * c.y1;
upp.style.marginLeft = "-" + Math.floor(nl) + "px";
upp.style.marginTop = "-" + Math.floor(nt) + "px";
}
function setConstrain () {
if(!regsel) return;
var checked = $('constrain').checked;
regsel.keepSquare(checked);
regsel.setBottomRight(regsel.brx, regsel.bry, checked);
regsel.fireOnRegionChanged();
}
function getSizedCoords (newsize, w, h) {
var nw, nh;
if (h > w) {
nh = newsize;
nw = newsize * w/h;
} else {
nw = newsize;
nh = newsize * h/w;
}
return [nw, nh];
}
function toggleBorder (evt) {
if (borderOn) {
$("prevcon").style.border = "1px solid transparent";
borderOn = false;
} else {
$("prevcon").style.border = "1px solid #000000";
borderOn = true;
}
}
// This setup actually does need to be on the load event.
DOM.addEventListener(window, "load", function () {
if (!origW || !origH)
return;
$("userpic").style.display = "";
regsel = new ImageRegionSelect({src: $("userpic"),
onRegionChange: onRegionChange,
onRegionChanged: onRegionChanged
});
var imageDimensions = getSizedCoords(scaledSizeMax, origW, origH);
origW = imageDimensions[0];
origH = imageDimensions[1];
var w = origW;
var h = origH;
$("picContainer").style.width = w + "px";
$("picContainer").style.height = h + "px";
var x1 = 20, y1 = 20, x2 = w - 20, y2 = h - 20;
regsel.setTopLeft(x1, y1);
regsel.setBottomRight(x2, y2);
regsel.fireOnRegionChanged();
regsel.keepSquare(false);
$("createbtn").disabled = false;
DOM.addEventListener($("borderToggle"), "change", toggleBorder.bindEventListener());
});