미디어위키:Responsive-arrow.js: 두 판 사이의 차이
편집 요약 없음 |
(테스트 (빌드 시스템)) |
||
| 1번째 줄: | 1번째 줄: | ||
"use strict"; | |||
{ | |||
const arrowArray = document.getElementsByClassName('arrow-dataset'); | |||
for (const arrowElement of arrowArray) { | |||
for ( | const data = Object.create(arrowElement.dataset); | ||
data.thick = Number(data.thick); | |||
data.pointLength = Number(data.pointLength); | |||
data.pointDeg = Number(data.pointDeg); | |||
const arrowBox = arrowElement.parentElement; | |||
const arrowPoint = arrowElement.nextElementSibling; | |||
const arrowShaft = arrowPoint.nextElementSibling; | |||
arrowPoint.style.borderWidth = | |||
arrowShaft.style.borderWidth = `${data.thick}px`; | |||
arrowPoint.style.position = arrowShaft.style.position = 'absolute'; | |||
arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px'; | |||
arrowPoint.style.background = | |||
arrowPoint.style.borderColor = | |||
arrowShaft.style.background = | |||
arrowShaft.style.borderColor = | |||
data.color; | |||
arrowPoint.style.transformBox = 'fill-box'; | |||
switch (data.direction) { | |||
case 'left': | |||
if (data.pointDirection === 'right') { | |||
arrowBox.style.alignItems = 'flex-end'; | |||
} | |||
else { | |||
arrowBox.style.alignItems = 'flex-start'; | |||
} | |||
arrowPoint.style.transformOrigin = 'left'; | |||
arrowPoint.style.left = "0px"; | |||
break; | |||
case 'right': | |||
if (data.pointDirection === 'right') { | |||
arrowBox.style.alignItems = 'flex-start'; | |||
} | |||
else { | |||
arrowBox.style.alignItems = 'flex-end'; | |||
} | |||
arrowPoint.style.transformOrigin = 'right'; | |||
arrowPoint.style.right = "0px"; | |||
break; | |||
case 'up': | |||
if (data.pointDirection === 'right') { | |||
arrowBox.style.justifyContent = 'flex-start'; | |||
} | |||
else { | |||
arrowBox.style.justifyContent = 'flex-end'; | |||
} | |||
arrowPoint.style.transformOrigin = 'top'; | |||
arrowPoint.style.top = "0px"; | |||
break; | |||
case 'down': | |||
if (data.pointDirection === 'right') { | |||
arrowBox.style.justifyContent = 'flex-end'; | |||
} | |||
else { | |||
arrowBox.style.justifyContent = 'flex-start'; | |||
} | |||
arrowPoint.style.transformOrigin = 'bottom'; | |||
arrowPoint.style.bottom = "0px"; | |||
break; | |||
default: | |||
break; | |||
} | |||
switch (data.direction) { | |||
case 'left': | |||
case 'right': | |||
} | arrowPoint.style.height = "0px"; | ||
arrowPoint.style.width = `${data.pointLength}px`; | |||
arrowBox.style.minHeight = `${data.pointLength * | |||
Math.sin((data.pointDeg * Math.PI) / 180) * | |||
(data.pointDirection === 'both' ? 2 : 1) + | |||
data.thick + | |||
1}px`; | |||
arrowBox.style.width = data.length ? `${data.length}px` : ""; | |||
arrowShaft.style.left = arrowShaft.style.right = "0px"; | |||
break; | |||
case 'up': | |||
case 'down': | |||
arrowPoint.style.width = "0px"; | |||
arrowPoint.style.height = `${data.pointLength}px`; | |||
arrowBox.style.minWidth = `${data.pointLength * | |||
Math.sin((data.pointDeg * Math.PI) / 180) * | |||
(data.pointDirection === 'both' ? 2 : 1) + | |||
data.thick + | |||
1}px`; | |||
arrowBox.style.height = `${data.length || 100}px`; | |||
arrowShaft.style.top = arrowShaft.style.bottom = "0px"; | |||
break; | |||
} | |||
switch (data.pointDirection) { | |||
case 'left': | |||
arrowPoint.style.rotate = `${data.pointDeg}deg`; | |||
break; | |||
case 'right': | |||
arrowPoint.style.rotate = `${-data.pointDeg}deg`; | |||
break; | |||
case 'both': { | |||
arrowPoint.style.rotate = `${data.pointDeg}deg`; | |||
const arrowPoint2 = arrowPoint.cloneNode(true); | |||
arrowPoint2.style.rotate = `${-data.pointDeg}deg`; | |||
arrowBox.style.alignItems = 'center'; | |||
arrowBox.style.justifyContent = 'center'; | |||
arrowBox.appendChild(arrowPoint2); | |||
break; | |||
} | } | ||
} | |||
} | |||
} | } | ||
} | } | ||
2025년 8월 7일 (목) 13:31 판
"use strict";
{
const arrowArray = document.getElementsByClassName('arrow-dataset');
for (const arrowElement of arrowArray) {
const data = Object.create(arrowElement.dataset);
data.thick = Number(data.thick);
data.pointLength = Number(data.pointLength);
data.pointDeg = Number(data.pointDeg);
const arrowBox = arrowElement.parentElement;
const arrowPoint = arrowElement.nextElementSibling;
const arrowShaft = arrowPoint.nextElementSibling;
arrowPoint.style.borderWidth =
arrowShaft.style.borderWidth = `${data.thick}px`;
arrowPoint.style.position = arrowShaft.style.position = 'absolute';
arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';
arrowPoint.style.background =
arrowPoint.style.borderColor =
arrowShaft.style.background =
arrowShaft.style.borderColor =
data.color;
arrowPoint.style.transformBox = 'fill-box';
switch (data.direction) {
case 'left':
if (data.pointDirection === 'right') {
arrowBox.style.alignItems = 'flex-end';
}
else {
arrowBox.style.alignItems = 'flex-start';
}
arrowPoint.style.transformOrigin = 'left';
arrowPoint.style.left = "0px";
break;
case 'right':
if (data.pointDirection === 'right') {
arrowBox.style.alignItems = 'flex-start';
}
else {
arrowBox.style.alignItems = 'flex-end';
}
arrowPoint.style.transformOrigin = 'right';
arrowPoint.style.right = "0px";
break;
case 'up':
if (data.pointDirection === 'right') {
arrowBox.style.justifyContent = 'flex-start';
}
else {
arrowBox.style.justifyContent = 'flex-end';
}
arrowPoint.style.transformOrigin = 'top';
arrowPoint.style.top = "0px";
break;
case 'down':
if (data.pointDirection === 'right') {
arrowBox.style.justifyContent = 'flex-end';
}
else {
arrowBox.style.justifyContent = 'flex-start';
}
arrowPoint.style.transformOrigin = 'bottom';
arrowPoint.style.bottom = "0px";
break;
default:
break;
}
switch (data.direction) {
case 'left':
case 'right':
arrowPoint.style.height = "0px";
arrowPoint.style.width = `${data.pointLength}px`;
arrowBox.style.minHeight = `${data.pointLength *
Math.sin((data.pointDeg * Math.PI) / 180) *
(data.pointDirection === 'both' ? 2 : 1) +
data.thick +
1}px`;
arrowBox.style.width = data.length ? `${data.length}px` : "";
arrowShaft.style.left = arrowShaft.style.right = "0px";
break;
case 'up':
case 'down':
arrowPoint.style.width = "0px";
arrowPoint.style.height = `${data.pointLength}px`;
arrowBox.style.minWidth = `${data.pointLength *
Math.sin((data.pointDeg * Math.PI) / 180) *
(data.pointDirection === 'both' ? 2 : 1) +
data.thick +
1}px`;
arrowBox.style.height = `${data.length || 100}px`;
arrowShaft.style.top = arrowShaft.style.bottom = "0px";
break;
}
switch (data.pointDirection) {
case 'left':
arrowPoint.style.rotate = `${data.pointDeg}deg`;
break;
case 'right':
arrowPoint.style.rotate = `${-data.pointDeg}deg`;
break;
case 'both': {
arrowPoint.style.rotate = `${data.pointDeg}deg`;
const arrowPoint2 = arrowPoint.cloneNode(true);
arrowPoint2.style.rotate = `${-data.pointDeg}deg`;
arrowBox.style.alignItems = 'center';
arrowBox.style.justifyContent = 'center';
arrowBox.appendChild(arrowPoint2);
break;
}
}
}
}