Как добавить отступы в линейной строке DOM через NodeJS? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть строка svg в fomat, например:

    <g id="icons"><g class="cls-1"><path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"/></g><path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"/></g>

Мне нужно как-то преобразовать ее с помощью отступов красоты, вставленных между каждым тегом (как в оригинальном дереве DOM).

Итак,в конце процесса я ожидаю получить следующее:

<g id="icons">
<g class="cls-1">
    <path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"
    />
</g>
<path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"
/>

Любые идеи о том, как сделать это реальностью, или, может быть, кто-то знает npm lib для такой задачи?

Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2019

Использовать ниже фрагмент:

Это объясняется в следующем SO вопрос: SO

var str = ' <g id="icons"><g class="cls-1"><path class="cls-2" d="M12,11.43c-2-.45-3.83-.85-2.94-2.54C11.79,3.75,9.79,1,6.92,1S2,3.85,4.77,8.89c.92,1.69-1,2.1-2.94,2.54C.11,11.83,0,12.67,0,14.12v.72H13.83v-.72C13.84,12.67,13.72,11.83,12,11.43Zm2.26-3.94V5.76H12.54V7.49H10.81V9.22h1.73V11h1.73V9.22H16V7.49Z"/></g><path class="cls-3" d="M12,10.43C10,10,8.18,9.58,9.07,7.89,11.79,2.75,9.79,0,6.92,0S2,2.85,4.77,7.89c.92,1.69-1,2.1-2.94,2.54C.11,10.83,0,11.67,0,13.12v.72H13.83v-.72C13.84,11.67,13.72,10.83,12,10.43Zm2.26-3.94V4.76H12.54V6.49H10.81V8.22h1.73V10h1.73V8.22H16V6.49Z"/></g>';

$('#out').text(process(str));

function process(str) {
    
    var div = document.createElement('div');
    div.innerHTML = str.trim();
    
    return format(div, 0).innerHTML;
}

function format(node, level) {
    
    var indentBefore = new Array(level++ + 1).join('  '),
        indentAfter  = new Array(level - 1).join('  '),
        textNode;
    
    for (var i = 0; i < node.children.length; i++) {
        
        textNode = document.createTextNode('\n' + indentBefore);
        node.insertBefore(textNode, node.children[i]);
        
        format(node.children[i], level);
        
        if (node.lastElementChild == node.children[i]) {
            textNode = document.createTextNode('\n' + indentAfter);
            node.appendChild(textNode);
        }
    }
    
    return node;
}

...