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

큰숲백과, 나무를 보지 말고 큰 숲을 보라.
편집 요약 없음
(완성)
 
(같은 사용자의 중간 판 36개는 보이지 않습니다)
1번째 줄: 1번째 줄:
console.time("arrow-test");
// [[틀:반응형 화살표]]
 
{
(function () {
    document.querySelectorAll('.arrow-dataset').forEach((element) => {
    var arrowArray = document.getElementsByClassName("arrow-dataset");
        const arrowBox = element.parentElement;
    for (var i = 0; i < arrowArray.length; i++) {
        const arrowPoint = element.nextElementSibling;
         (function () {
        const arrowShaft = arrowPoint.nextElementSibling;
             var arrowData = arrowArray[i];
         const errorMsg = (message) => {
             var data = Object.create(arrowData.dataset)
             arrowBox.outerHTML = `<span>${message}</span>`;
            data.thick = Number(data.thick)
             console.log(message, element);
            data.deg = Number(data.deg)
        };
 
        const dataSet = element.dataset;
             var arrow = arrowData.parentElement;
        const data = Object.create(dataSet);
 
        data.length = Number(dataSet.length);
            var arrowPoint = arrowData.nextElementSibling
        data.thick = Number(dataSet.thick);
 
        data.pointLength = Number(dataSet.pointLength);
             var arrowShaft = arrowPoint.nextElementSibling
        data.pointDeg = Number(dataSet.pointDeg);
 
        if (Number.isNaN(data.length)) {
             arrowPoint.style['width'] = data.pointLength + "px"
            errorMsg(`length is not a number`);
             arrowPoint.style['height'] = data.thick * 2 + "px";
             return;
             arrowPoint.style['borderRadius'] = "100px"
        }
            arrowPoint.style['position'] = "absolute"
        if (Number.isNaN(data.thick)) {
             arrowPoint.style['background'] = data.color
            errorMsg(`thick is not a number`);
             arrowShaft.style['background'] = data.color
            return;
            arrowShaft.style['position'] = "absolute"
        }
            arrowShaft.style['borderRadius'] = "100px"
        if (Number.isNaN(data.pointLength)) {
 
            errorMsg(`pointLength is not a number`);
            switch (data.direction) {
             return;
                case "left":
        }
                    arrow.style['align-items'] = data.pointDirection === "right" ? "flex-end" : "flex-start"
        if (Number.isNaN(data.pointDeg)) {
                    arrowPoint.style['transform-origin'] = data.thick + "px 50%";
            errorMsg(`pointDeg is not a number`);
                    arrowPoint.style['left'] = 0
             return;
                    break;
        }
 
        if (!['left', 'right', 'up', 'down'].includes(data.direction)) {
 
            errorMsg(`direction is invalid`);
                case "right":
             return;
                    arrow.style['align-items'] = data.pointDirection === "right" ? "flex-start" : "flex-end"
        }
                    arrowPoint.style['transform-origin'] = data.pointLength + "px 50%";
        if (!['left', 'right', 'both'].includes(data.pointDirection)) {
                    arrowPoint.style['right'] = 0
            errorMsg(`pointDirection is invalid`);
                    break;
             return;
                case "up":
        }
                    arrow.style['justify-content'] = data.pointDirection === "right" ? "flex-start" : "flex-end"
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';
                    arrowPoint.style['transform-origin'] = (data.pointDirection === "left" ?
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';
                        data.pointLength - data.thick : data.thick) + "px 50%";
        arrowPoint.style.transformBox = 'fill-box';
                    arrowPoint.style['top'] = 0
        arrowPoint.style.borderWidth =
                    break;
             arrowShaft.style.borderWidth = `${data.thick}px`;
 
        if (data.color)
                case "down":
             arrowPoint.style.background =
                    arrow.style['justify-content'] = data.pointDirection === "right" ? "flex-end" : "flex-start"
                arrowPoint.style.borderColor =
                     arrowPoint.style['transform-origin'] = (data.pointDirection === "right" ?
                    arrowShaft.style.background =
                        data.pointLength - data.thick : data.thick) + "px 50%";
                        arrowShaft.style.borderColor =
                    arrowPoint.style['bottom'] = 0
                            data.color;
                    break;
        switch (data.direction) {
                 default:
            case 'left':
                    break;
                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;
             }
             }
 
         }
            switch (data.direction) {
     });
                case "left":
}
                case "right":
                    arrow.style['min-height'] =
                        (data.pointLength * Math.sin(data.pointDeg * Math.PI / 180) + data.thick) + "px"
                    arrow.style['width'] = data.length ? data.length + "px" : null;
                    arrowShaft.style['width'] = "100%";
                    arrowShaft.style['height'] = data.thick * 2 + "px"
                    arrowPoint.style['rotate'] = (data.pointDirection === "left" ?
                        data.deg : - data.deg) + "deg"
                    break;
 
                case "up":
                case "down":
                    arrow.style['min-width'] =
                        (data.pointLength * Math.sin(data.pointDeg * Math.PI / 180) + data.thick) + "px"
                    arrow.style['height'] = (data.length || 100) + "px";
                    arrowShaft.style['width'] = data.thick * 2 + "px";
                    arrowShaft.style['height'] = "100%";
                    arrowPoint.style['rotate'] = (data.pointDirection === "left" ?
                        - 90 + data.deg : 90 - data.deg) + "deg"
 
                    break;
 
                default:
                    break;
            }
 
 
         })()
     }
})();
 
console.timeEnd("arrow-test")

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;
            }
        }
    });
}