Compare commits
10
Commits
68d4baee61
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ba179a62b | ||
|
|
d2b0955303 | ||
|
|
1426164dc4 | ||
|
|
16cf675e87 | ||
|
|
8685cb4e6f | ||
|
|
0b47af3b4f | ||
|
|
38e8ebf362 | ||
|
|
1aaf6825bd | ||
|
|
438c1ce9ef | ||
|
|
04b01dbf27 |
+76
-17
@@ -91,18 +91,48 @@
|
|||||||
<button id="final_change_password_button">Change Password</button>
|
<button id="final_change_password_button">Change Password</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="resize_photo_dialouge" class="card static_center hidden">
|
<div
|
||||||
<div id="image_container">
|
id="resize_photo_dialouge"
|
||||||
<img id="new_profile_image" alt="new-profile-image" />
|
class="card static_center hidden"
|
||||||
<div id="darken_part"></div>
|
draggable="false"
|
||||||
|
>
|
||||||
|
<div id="image_container" draggable="false">
|
||||||
|
<img
|
||||||
|
id="new_profile_image"
|
||||||
|
alt="new-profile-image"
|
||||||
|
class="noselect"
|
||||||
|
draggable="false"
|
||||||
|
/>
|
||||||
|
<div id="image_dark_overlay" draggable="false"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="resize_photo_box">
|
<div id="grab-area" draggable="false">
|
||||||
<div id="top_left_resize" class="resize_anchor"></div>
|
<div id="box-scale-holder">
|
||||||
<div id="top_right_resize" class="resize_anchor"></div>
|
<div
|
||||||
<div id="bottom_left_resize" class="resize_anchor"></div>
|
draggable="false"
|
||||||
<div id="bottom_right_resize" class="resize_anchor"></div>
|
id="top_left_resize"
|
||||||
|
class="resize_anchor"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
draggable="false"
|
||||||
|
id="top_right_resize"
|
||||||
|
class="resize_anchor"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
draggable="false"
|
||||||
|
id="bottom_left_resize"
|
||||||
|
class="resize_anchor"
|
||||||
|
></div>
|
||||||
|
<div
|
||||||
|
draggable="false"
|
||||||
|
id="bottom_right_resize"
|
||||||
|
class="resize_anchor"
|
||||||
|
></div>
|
||||||
|
</div>
|
||||||
|
<div id="resize_photo_box" draggable="false">
|
||||||
|
<div id="circle-display"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button id="confirm_change">Confirm Change</button>
|
<button id="confirm_change" draggable="false">Confirm Change</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img id="logo_image" alt="logo" src="/logo" />
|
<img id="logo_image" alt="logo" src="/logo" />
|
||||||
@@ -172,6 +202,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script src="/static/javascript/helpers.js" type="text/javascript"></script>
|
||||||
<script src="/static/javascript/cursor.js" type="text/javascript"></script>
|
<script src="/static/javascript/cursor.js" type="text/javascript"></script>
|
||||||
<script
|
<script
|
||||||
src="/static/javascript/resize_photo_dialouge.js"
|
src="/static/javascript/resize_photo_dialouge.js"
|
||||||
@@ -197,7 +228,8 @@
|
|||||||
var x_start = 0,
|
var x_start = 0,
|
||||||
y_start = 0;
|
y_start = 0;
|
||||||
|
|
||||||
var bitmap;
|
var image_width = 0,
|
||||||
|
image_height = 0;
|
||||||
|
|
||||||
fileInput.addEventListener("change", async () => {
|
fileInput.addEventListener("change", async () => {
|
||||||
document.getElementById("popup_background").classList.remove("hidden");
|
document.getElementById("popup_background").classList.remove("hidden");
|
||||||
@@ -216,17 +248,44 @@
|
|||||||
.classList.remove("hidden");
|
.classList.remove("hidden");
|
||||||
|
|
||||||
image = URL.createObjectURL(file);
|
image = URL.createObjectURL(file);
|
||||||
bitmap = await createImageBitmap(file);
|
var bitmap = await createImageBitmap(file);
|
||||||
|
|
||||||
new_profile_image.src = image;
|
new_profile_image.src = image;
|
||||||
|
|
||||||
resize_photo_box.style.setProperty(
|
|
||||||
"--image-width",
|
|
||||||
bitmap.width + "px",
|
|
||||||
);
|
|
||||||
|
|
||||||
new_profile_image.style.setProperty("--x-offset", "0px");
|
new_profile_image.style.setProperty("--x-offset", "0px");
|
||||||
new_profile_image.style.setProperty("--y-offset", "0px");
|
new_profile_image.style.setProperty("--y-offset", "0px");
|
||||||
|
|
||||||
|
smaller_dimension = min(bitmap.width, bitmap.height);
|
||||||
|
diff_to_350 = 360 / smaller_dimension;
|
||||||
|
|
||||||
|
image_width = bitmap.width * diff_to_350;
|
||||||
|
image_height = bitmap.height * diff_to_350;
|
||||||
|
|
||||||
|
new_profile_image.style.setProperty("--x-size", image_width + "px");
|
||||||
|
new_profile_image.style.setProperty("--y-size", image_height + "px");
|
||||||
|
|
||||||
|
image_dark_overlay.style.setProperty("--x-size", image_width + "px");
|
||||||
|
image_dark_overlay.style.setProperty("--y-size", image_height + "px");
|
||||||
|
|
||||||
|
image_dark_overlay.style.setProperty("--x-offset", "0px");
|
||||||
|
image_dark_overlay.style.setProperty("--y-offset", "0px");
|
||||||
|
|
||||||
|
bounds = calculateBoxBoundsOnImage({
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
});
|
||||||
|
image_dark_overlay.style.setProperty("--left-edge", bounds.left + "px");
|
||||||
|
image_dark_overlay.style.setProperty(
|
||||||
|
"--right-edge",
|
||||||
|
bounds.right + "px",
|
||||||
|
);
|
||||||
|
|
||||||
|
image_dark_overlay.style.setProperty("--top-edge", bounds.top + "px");
|
||||||
|
image_dark_overlay.style.setProperty(
|
||||||
|
"--bottom-edge",
|
||||||
|
bounds.bottom + "px",
|
||||||
|
);
|
||||||
|
|
||||||
resize_photo_box.style.setProperty("--size", "350px");
|
resize_photo_box.style.setProperty("--size", "350px");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
function min(a, b) {
|
||||||
|
if (a < b) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
function max(a, b) {
|
||||||
|
if (a > b) {
|
||||||
|
return a;
|
||||||
|
}
|
||||||
|
return b;
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
const resize_photo_box = document.getElementById("resize_photo_box");
|
const resize_photo_box = document.getElementById("resize_photo_box");
|
||||||
|
const image_dark_overlay = document.getElementById("image_dark_overlay");
|
||||||
|
|
||||||
// Drag handling
|
// Drag handling
|
||||||
var startXOffset = 0,
|
var startXOffset = 0,
|
||||||
@@ -8,28 +9,53 @@ function calculateOffsets() {
|
|||||||
const yOffset = startYOffset + (currentY - y_start);
|
const yOffset = startYOffset + (currentY - y_start);
|
||||||
const xOffset = startXOffset + (currentX - x_start);
|
const xOffset = startXOffset + (currentX - x_start);
|
||||||
|
|
||||||
var top = bitmap.height / 2 - yOffset - 175;
|
var top = image_height / 2 - yOffset - 175 - 5;
|
||||||
if (top > 0) top = 0;
|
if (top > 0) top = 0;
|
||||||
|
|
||||||
var bottom = -(bitmap.height / 2) - yOffset + 10 + 175;
|
var bottom = -(image_height / 2) - yOffset + 5 + 175;
|
||||||
if (bottom < 0) bottom = 0;
|
if (bottom < 0) bottom = 0;
|
||||||
|
|
||||||
var left = bitmap.width / 2 - xOffset - 175;
|
var left = image_width / 2 - xOffset - 175 - 5;
|
||||||
if (left > 0) left = 0;
|
if (left > 0) left = 0;
|
||||||
|
|
||||||
var right = -(bitmap.width / 2) - xOffset + 10 + 175;
|
var right = -(image_width / 2) - xOffset + 5 + 175;
|
||||||
if (right < 0) right = 0;
|
if (right < 0) right = 0;
|
||||||
return { x: xOffset + left + right, y: yOffset + top + bottom };
|
return { x: xOffset + left + right, y: yOffset + top + bottom };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function calculateBoxBoundsOnImage(offsets) {
|
||||||
|
const x_overspill = image_width - 360;
|
||||||
|
const left_overspill = x_overspill / 2 - offsets.x;
|
||||||
|
|
||||||
|
const y_overspill = image_height - 360;
|
||||||
|
const top_overspill = y_overspill / 2 - offsets.y;
|
||||||
|
|
||||||
|
return {
|
||||||
|
left: left_overspill,
|
||||||
|
right: left_overspill + 360,
|
||||||
|
top: top_overspill,
|
||||||
|
bottom: top_overspill + 360,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
var mouseClicked = false;
|
var mouseClicked = false;
|
||||||
resize_photo_box.addEventListener("mousemove", () => {
|
resize_photo_box.addEventListener("mousemove", () => {
|
||||||
if (!mouseClicked) return;
|
if (!mouseClicked) return;
|
||||||
|
|
||||||
offsets = calculateOffsets();
|
offsets = calculateOffsets();
|
||||||
|
|
||||||
y_top = new_profile_image.style.setProperty("--x-offset", offsets.x + "px");
|
new_profile_image.style.setProperty("--x-offset", offsets.x + "px");
|
||||||
new_profile_image.style.setProperty("--y-offset", offsets.y + "px");
|
new_profile_image.style.setProperty("--y-offset", offsets.y + "px");
|
||||||
|
|
||||||
|
image_dark_overlay.style.setProperty("--x-offset", offsets.x + "px");
|
||||||
|
image_dark_overlay.style.setProperty("--y-offset", offsets.y + "px");
|
||||||
|
|
||||||
|
bounds = calculateBoxBoundsOnImage(offsets);
|
||||||
|
image_dark_overlay.style.setProperty("--left-edge", bounds.left + "px");
|
||||||
|
image_dark_overlay.style.setProperty("--right-edge", bounds.right + "px");
|
||||||
|
|
||||||
|
image_dark_overlay.style.setProperty("--top-edge", bounds.top + "px");
|
||||||
|
image_dark_overlay.style.setProperty("--bottom-edge", bounds.bottom + "px");
|
||||||
});
|
});
|
||||||
|
|
||||||
resize_photo_box.addEventListener("mousedown", () => {
|
resize_photo_box.addEventListener("mousedown", () => {
|
||||||
@@ -58,15 +84,23 @@ document.body.addEventListener("mouseup", () => {
|
|||||||
// handle anchors
|
// handle anchors
|
||||||
resize_anchors = document.getElementsByClassName("resize_anchor");
|
resize_anchors = document.getElementsByClassName("resize_anchor");
|
||||||
var handleBeingHeld = [false, false, false, false];
|
var handleBeingHeld = [false, false, false, false];
|
||||||
|
var startX, startY;
|
||||||
for (var i = 0; i < resize_anchors.length; i++) {
|
for (var i = 0; i < resize_anchors.length; i++) {
|
||||||
const index = i;
|
const index = i;
|
||||||
resize_anchors[index].addEventListener("mousedown", (e) => {
|
resize_anchors[index].addEventListener("mousedown", (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
handleBeingHeld[index] = true;
|
handleBeingHeld[index] = true;
|
||||||
|
startX = currentX;
|
||||||
|
startY = currentY;
|
||||||
});
|
});
|
||||||
|
|
||||||
document.body.addEventListener("mouseup", () => {
|
document.body.addEventListener("mouseup", () => {
|
||||||
handleBeingHeld[index] = false;
|
handleBeingHeld[index] = false;
|
||||||
|
resize_anchors[index].style.setProperty("--x-offset", "0px");
|
||||||
|
resize_anchors[index].style.setProperty("--y-offset", "0px");
|
||||||
|
resize_photo_box.style.setProperty("--size", "350px");
|
||||||
|
resize_photo_box.style.setProperty("--box-x-offset", "0px");
|
||||||
|
resize_photo_box.style.setProperty("--box-y-offset", "0px");
|
||||||
});
|
});
|
||||||
|
|
||||||
resize_anchors[i].style.setProperty("--x-offset", "0px");
|
resize_anchors[i].style.setProperty("--x-offset", "0px");
|
||||||
@@ -77,7 +111,24 @@ document.body.addEventListener("mousemove", () => {
|
|||||||
for (var i = 0; i < handleBeingHeld.length; i++) {
|
for (var i = 0; i < handleBeingHeld.length; i++) {
|
||||||
if (!handleBeingHeld[i]) continue;
|
if (!handleBeingHeld[i]) continue;
|
||||||
|
|
||||||
resize_anchors[i].style.setProperty("--x-offset", "100px");
|
newX = Math.abs(startX - currentX);
|
||||||
resize_anchors[i].style.setProperty("--y-offset", "100px");
|
newY = Math.abs(currentY - startY);
|
||||||
|
|
||||||
|
moveAmount = max(min(newX, newY), 0);
|
||||||
|
|
||||||
|
resize_anchors[i].style.setProperty("--x-offset", moveAmount + "px");
|
||||||
|
resize_anchors[i].style.setProperty("--y-offset", moveAmount + "px");
|
||||||
|
resize_photo_box.style.setProperty("--size", 350 - moveAmount + "px");
|
||||||
|
|
||||||
|
if (i == 0) {
|
||||||
|
resize_photo_box.style.setProperty("--box-x-offset", moveAmount + "px");
|
||||||
|
resize_photo_box.style.setProperty("--box-y-offset", moveAmount + "px");
|
||||||
|
}
|
||||||
|
if (i == 1) {
|
||||||
|
resize_photo_box.style.setProperty("--box-y-offset", moveAmount + "px");
|
||||||
|
}
|
||||||
|
if (i == 2) {
|
||||||
|
resize_photo_box.style.setProperty("--box-x-offset", moveAmount + "px");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
+71
-7
@@ -156,6 +156,7 @@
|
|||||||
|
|
||||||
#image_container {
|
#image_container {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
#darken_part {
|
#darken_part {
|
||||||
@@ -171,11 +172,23 @@
|
|||||||
|
|
||||||
#new_profile_image {
|
#new_profile_image {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
transform: translateX(calc(-50% + var(--x-offset)))
|
transform: translateX(calc(-50% + var(--x-offset) + 5px))
|
||||||
translateY(calc(-50% + var(--y-offset)));
|
translateY(calc(-50% + var(--y-offset) + 5px));
|
||||||
position: absolute;
|
position: absolute;
|
||||||
left: calc(350px / 2);
|
left: calc(350px / 2);
|
||||||
top: calc(350px / 2);
|
top: calc(350px / 2);
|
||||||
|
width: var(--x-size);
|
||||||
|
height: var(--y-size);
|
||||||
|
image-rendering: pixelated;
|
||||||
|
}
|
||||||
|
|
||||||
|
#grab-area {
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#grab-area > * {
|
||||||
|
grid-column-start: 1;
|
||||||
|
grid-row-start: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#resize_photo_box {
|
#resize_photo_box {
|
||||||
@@ -187,6 +200,8 @@
|
|||||||
border-color: black;
|
border-color: black;
|
||||||
border-width: 5px;
|
border-width: 5px;
|
||||||
z-index: 4;
|
z-index: 4;
|
||||||
|
|
||||||
|
transform: translateX(var(--box-x-offset)) translateY(var(--box-y-offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
.resize_anchor {
|
.resize_anchor {
|
||||||
@@ -194,11 +209,12 @@
|
|||||||
width: 20px;
|
width: 20px;
|
||||||
height: 20px;
|
height: 20px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
z-index: 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
#top_left_resize {
|
#top_left_resize {
|
||||||
transform: translateX(calc(-50% + var(--x-offset)))
|
transform: translateX(calc(-50% + var(--x-offset) + 10px))
|
||||||
translateY(calc(-50% + var(--y-offset)));
|
translateY(calc(-50% + var(--y-offset) + 10px));
|
||||||
}
|
}
|
||||||
|
|
||||||
#top_left_resize:hover {
|
#top_left_resize:hover {
|
||||||
@@ -206,8 +222,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#top_right_resize {
|
#top_right_resize {
|
||||||
transform: translateX(calc(340px - var(--x-offset)))
|
transform: translateX(calc(350px - var(--x-offset) - 10px))
|
||||||
translateY(calc(-50% + var(--y-offset)));
|
translateY(calc(-50% + var(--y-offset) + 10px));
|
||||||
}
|
}
|
||||||
|
|
||||||
#top_right_resize:hover {
|
#top_right_resize:hover {
|
||||||
@@ -215,7 +231,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#bottom_left_resize {
|
#bottom_left_resize {
|
||||||
transform: translateX(calc(-50% + var(--x-offset)))
|
transform: translateX(calc(-50% + var(--x-offset) + 10px))
|
||||||
translateY(calc(340px - var(--x-offset)));
|
translateY(calc(340px - var(--x-offset)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,3 +247,51 @@
|
|||||||
#bottom_right_resize:hover {
|
#bottom_right_resize:hover {
|
||||||
cursor: se-resize !important;
|
cursor: se-resize !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#box-scale-holder {
|
||||||
|
position: relative;
|
||||||
|
width: 360px;
|
||||||
|
height: 360px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#circle-display {
|
||||||
|
position: absolute;
|
||||||
|
width: calc(100% + 10px);
|
||||||
|
height: calc(100% + 10px);
|
||||||
|
transform: translateX(-5px) translateY(-5px);
|
||||||
|
transform: scale(10px);
|
||||||
|
background: radial-gradient(
|
||||||
|
circle closest-side,
|
||||||
|
transparent 99%,
|
||||||
|
rgba(0, 0, 0, 0.5) 100%
|
||||||
|
);
|
||||||
|
/*dispalt*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#image_dark_overlay {
|
||||||
|
background-color: rgba(0, 0, 0, 0.5);
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
transform: translateX(calc(-50% + var(--x-offset) + 5px))
|
||||||
|
translateY(calc(-50% + var(--y-offset) + 5px));
|
||||||
|
position: absolute;
|
||||||
|
left: calc(350px / 2);
|
||||||
|
top: calc(350px / 2);
|
||||||
|
width: var(--x-size);
|
||||||
|
height: var(--y-size);
|
||||||
|
|
||||||
|
clip-path: polygon(
|
||||||
|
0% 0%,
|
||||||
|
0% 100%,
|
||||||
|
var(--left-edge) 100%,
|
||||||
|
var(--left-edge) var(--top-edge),
|
||||||
|
var(--right-edge) var(--top-edge),
|
||||||
|
var(--right-edge) var(--bottom-edge),
|
||||||
|
var(--left-edge) var(--bottom-edge),
|
||||||
|
var(--left-edge) 100%,
|
||||||
|
100% 100%,
|
||||||
|
100% 0%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -140,3 +140,12 @@ input::placeholder {
|
|||||||
.subtext {
|
.subtext {
|
||||||
color: var(--text-muted);
|
color: var(--text-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.noselect {
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user