미디어위키:Responsive-arrow.js: 두 판 사이의 차이

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
편집 요약 없음
태그: 수동 되돌리기
(완성)
 
1번째 줄: 1번째 줄:
"use strict";
// [[틀:반응형 화살표]]
{
{
     const arrowArray = document.getElementsByClassName('arrow-dataset');
     document.querySelectorAll('.arrow-dataset').forEach((element) => {
    for (const arrowElement of arrowArray) {
         const arrowBox = element.parentElement;
        const data = Object.create(arrowElement.dataset);
         const arrowPoint = element.nextElementSibling;
        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;
         const arrowShaft = arrowPoint.nextElementSibling;
         arrowPoint.style.borderWidth =
         const errorMsg = (message) => {
             arrowShaft.style.borderWidth = `${data.thick}px`;
            arrowBox.outerHTML = `<span>${message}</span>`;
            console.log(message, element);
        };
        const dataSet = element.dataset;
        const data = Object.create(dataSet);
        data.length = Number(dataSet.length);
        data.thick = Number(dataSet.thick);
        data.pointLength = Number(dataSet.pointLength);
        data.pointDeg = Number(dataSet.pointDeg);
        if (Number.isNaN(data.length)) {
            errorMsg(`length is not a number`);
            return;
        }
        if (Number.isNaN(data.thick)) {
             errorMsg(`thick is not a number`);
            return;
        }
        if (Number.isNaN(data.pointLength)) {
            errorMsg(`pointLength is not a number`);
            return;
        }
        if (Number.isNaN(data.pointDeg)) {
            errorMsg(`pointDeg is not a number`);
            return;
        }
        if (!['left', 'right', 'up', 'down'].includes(data.direction)) {
            errorMsg(`direction is invalid`);
            return;
        }
        if (!['left', 'right', 'both'].includes(data.pointDirection)) {
            errorMsg(`pointDirection is invalid`);
            return;
        }
         arrowPoint.style.position = arrowShaft.style.position = 'absolute';
         arrowPoint.style.position = arrowShaft.style.position = 'absolute';
         arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';
         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';
         arrowPoint.style.transformBox = 'fill-box';
        arrowPoint.style.borderWidth =
            arrowShaft.style.borderWidth = `${data.thick}px`;
        if (data.color)
            arrowPoint.style.background =
                arrowPoint.style.borderColor =
                    arrowShaft.style.background =
                        arrowShaft.style.borderColor =
                            data.color;
         switch (data.direction) {
         switch (data.direction) {
             case 'left':
             case 'left':
                 if (data.pointDirection === 'right') {
                 arrowBox.style.alignItems =
                    arrowBox.style.alignItems = 'flex-end';
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';
                }
                else {
                    arrowBox.style.alignItems = 'flex-start';
                }
                 arrowPoint.style.transformOrigin = 'left';
                 arrowPoint.style.transformOrigin = 'left';
                 arrowPoint.style.left = "0px";
                 arrowPoint.style.left = '0px';
                 break;
                 break;
             case 'right':
             case 'right':
                 if (data.pointDirection === 'right') {
                 arrowBox.style.alignItems =
                    arrowBox.style.alignItems = 'flex-start';
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';
                }
                else {
                    arrowBox.style.alignItems = 'flex-end';
                }
                 arrowPoint.style.transformOrigin = 'right';
                 arrowPoint.style.transformOrigin = 'right';
                 arrowPoint.style.right = "0px";
                 arrowPoint.style.right = '0px';
                 break;
                 break;
             case 'up':
             case 'up':
                 if (data.pointDirection === 'right') {
                 arrowBox.style.justifyContent =
                    arrowBox.style.justifyContent = 'flex-start';
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';
                }
                else {
                    arrowBox.style.justifyContent = 'flex-end';
                }
                 arrowPoint.style.transformOrigin = 'top';
                 arrowPoint.style.transformOrigin = 'top';
                 arrowPoint.style.top = "0px";
                 arrowPoint.style.top = '0px';
                 break;
                 break;
             case 'down':
             case 'down':
                 if (data.pointDirection === 'right') {
                 arrowBox.style.justifyContent =
                    arrowBox.style.justifyContent = 'flex-end';
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';
                }
                else {
                    arrowBox.style.justifyContent = 'flex-start';
                }
                 arrowPoint.style.transformOrigin = 'bottom';
                 arrowPoint.style.transformOrigin = 'bottom';
                 arrowPoint.style.bottom = "0px";
                 arrowPoint.style.bottom = '0px';
                 break;
                 break;
             default:
             default:
67번째 줄: 81번째 줄:
             case 'left':
             case 'left':
             case 'right':
             case 'right':
                arrowPoint.style.height = "0px";
                 arrowPoint.style.width = `${data.pointLength}px`;
                 arrowPoint.style.width = `${data.pointLength}px`;
                arrowPoint.style.height = '0px';
                arrowShaft.style.left = arrowShaft.style.right = '0px';
                 arrowBox.style.minHeight = `${data.pointLength *
                 arrowBox.style.minHeight = `${data.pointLength *
                     Math.sin((data.pointDeg * Math.PI) / 180) *
                     Math.sin((data.pointDeg * Math.PI) / 180) *
74번째 줄: 89번째 줄:
                     data.thick +
                     data.thick +
                     1}px`;
                     1}px`;
                 arrowBox.style.width = data.length ? `${data.length}px` : "";
                 arrowBox.style.width = data.length ? `${data.length}px` : '';
                arrowShaft.style.left = arrowShaft.style.right = "0px";
                 break;
                 break;
             case 'up':
             case 'up':
             case 'down':
             case 'down':
                 arrowPoint.style.width = "0px";
                 arrowPoint.style.width = '0px';
                 arrowPoint.style.height = `${data.pointLength}px`;
                 arrowPoint.style.height = `${data.pointLength}px`;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';
                 arrowBox.style.minWidth = `${data.pointLength *
                 arrowBox.style.minWidth = `${data.pointLength *
                     Math.sin((data.pointDeg * Math.PI) / 180) *
                     Math.sin((data.pointDeg * Math.PI) / 180) *
87번째 줄: 102번째 줄:
                     1}px`;
                     1}px`;
                 arrowBox.style.height = `${data.length || 100}px`;
                 arrowBox.style.height = `${data.length || 100}px`;
                arrowShaft.style.top = arrowShaft.style.bottom = "0px";
                 break;
                 break;
         }
         }
101번째 줄: 115번째 줄:
                 const arrowPoint2 = arrowPoint.cloneNode(true);
                 const arrowPoint2 = arrowPoint.cloneNode(true);
                 arrowPoint2.style.rotate = `${-data.pointDeg}deg`;
                 arrowPoint2.style.rotate = `${-data.pointDeg}deg`;
                arrowBox.appendChild(arrowPoint2);
                 arrowBox.style.alignItems = 'center';
                 arrowBox.style.alignItems = 'center';
                 arrowBox.style.justifyContent = 'center';
                 arrowBox.style.justifyContent = 'center';
                arrowBox.appendChild(arrowPoint2);
                 break;
                 break;
             }
             }
         }
         }
     }
     });
}
}

2025년 8월 7일 (목) 15:11 기준 최신판

// [[틀:반응형 화살표]]
{
    document.querySelectorAll('.arrow-dataset').forEach((element) => {
        const arrowBox = element.parentElement;
        const arrowPoint = element.nextElementSibling;
        const arrowShaft = arrowPoint.nextElementSibling;
        const errorMsg = (message) => {
            arrowBox.outerHTML = `<span>${message}</span>`;
            console.log(message, element);
        };
        const dataSet = element.dataset;
        const data = Object.create(dataSet);
        data.length = Number(dataSet.length);
        data.thick = Number(dataSet.thick);
        data.pointLength = Number(dataSet.pointLength);
        data.pointDeg = Number(dataSet.pointDeg);
        if (Number.isNaN(data.length)) {
            errorMsg(`length is not a number`);
            return;
        }
        if (Number.isNaN(data.thick)) {
            errorMsg(`thick is not a number`);
            return;
        }
        if (Number.isNaN(data.pointLength)) {
            errorMsg(`pointLength is not a number`);
            return;
        }
        if (Number.isNaN(data.pointDeg)) {
            errorMsg(`pointDeg is not a number`);
            return;
        }
        if (!['left', 'right', 'up', 'down'].includes(data.direction)) {
            errorMsg(`direction is invalid`);
            return;
        }
        if (!['left', 'right', 'both'].includes(data.pointDirection)) {
            errorMsg(`pointDirection is invalid`);
            return;
        }
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';
        arrowPoint.style.transformBox = 'fill-box';
        arrowPoint.style.borderWidth =
            arrowShaft.style.borderWidth = `${data.thick}px`;
        if (data.color)
            arrowPoint.style.background =
                arrowPoint.style.borderColor =
                    arrowShaft.style.background =
                        arrowShaft.style.borderColor =
                            data.color;
        switch (data.direction) {
            case 'left':
                arrowBox.style.alignItems =
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';
                arrowPoint.style.transformOrigin = 'left';
                arrowPoint.style.left = '0px';
                break;
            case 'right':
                arrowBox.style.alignItems =
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';
                arrowPoint.style.transformOrigin = 'right';
                arrowPoint.style.right = '0px';
                break;
            case 'up':
                arrowBox.style.justifyContent =
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';
                arrowPoint.style.transformOrigin = 'top';
                arrowPoint.style.top = '0px';
                break;
            case 'down':
                arrowBox.style.justifyContent =
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';
                arrowPoint.style.transformOrigin = 'bottom';
                arrowPoint.style.bottom = '0px';
                break;
            default:
                break;
        }
        switch (data.direction) {
            case 'left':
            case 'right':
                arrowPoint.style.width = `${data.pointLength}px`;
                arrowPoint.style.height = '0px';
                arrowShaft.style.left = arrowShaft.style.right = '0px';
                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` : '';
                break;
            case 'up':
            case 'down':
                arrowPoint.style.width = '0px';
                arrowPoint.style.height = `${data.pointLength}px`;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';
                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`;
                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.appendChild(arrowPoint2);
                arrowBox.style.alignItems = 'center';
                arrowBox.style.justifyContent = 'center';
                break;
            }
        }
    });
}