DMLによるコンポーネントスイッチング



DMLで、スイッチングコンポーネントは非常に簡単です、ベースポイントを選択し、'コンポーネントを呼び出します.
    function Home () {
      let home = div("HOME", cssComp);
      selectBase(div('', 'margin-left:20px'));
        print(`
        <br >
              DML doesn't interrupt your coding flow.... 
        `)
      unselectBase();
    }

    let Todo = () => {
      let todo = selectBase(div("TODOS...", cssComp));
      ul(["Task One", "Task Two"])
      unselectBase();
    }

    function Counter () {
      let counter = div("COUNTER", cssComp);
      selectBase(counter);
        let value = div("0");
        button("inc").onclick = () => 
          value.innerText = Number(value.innerText) + 1;
        button("dec").onclick = () => 
          value.innerText = Number(value.innerText) - 1;
      unselectBase()
    }


    function cleanElt (elt) {
       while(elt.firstChild) {
        elt.removeChild(elt.firstChild);
       }
    }

    function router(component) {
      selectBase(main)
        cleanElt(main);
        component();
      unselectBase();
    }

    function Navbar () {
      selectBase(div('', cssNavbar))
        button("Home",cssButton ).onclick = () => router(Home);
        button("Todo", cssButton).onclick = () => router(Todo);
        button("Counter", cssButton).onclick = () => router(Counter);
      unselectBase();
    }

    Navbar();

    let main = div('', cssContainer);

    router(Home); 

ここでテストできます.
<html lang="de">
  <head>
  <meta charset="utf-8">
    <title>title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://efpage.de/DML/DML_homepage/lib/DML-min.js"></script>
  </head>
  <body> 
  <script> 
    const cssComp = `
      text-align:center;
      font-size:32px;
      color:white;
    `;

    const cssContainer =  `
      background:#344053;
      height: calc(100vh - 70px);
      color:white;
      padding-top: 30px;
    `;

    const  cssButton = `
      color:black;
      line-height: 2rem;
      border: 1px solid transparent
      margin-right: 5px;
      cursor: pointer;
    `

    const cssNavbar = `
      background: rgba(0,0,12,0.4);
      border-bottom: 2px solid white;
    `

    function Home () {
      let home = div("HOME", cssComp);
      selectBase(div('', 'margin-left:20px'));
        print(`
        <br >
              DML doesn't interrupt your coding flow.... 
        `)
      unselectBase();
    }

    let Todo = () => {
      let todo = selectBase(div("TODOS...", cssComp));
      ul(["Task One", "Task Two"])
      unselectBase();
    }

    function Counter () {
      let counter = div("COUNTER", cssComp);
      selectBase(counter);
        let value = div("0");
        button("inc").onclick = () => 
          value.innerText = Number(value.innerText) + 1;
        bdec = button("dec").onclick = () => 
          value.innerText = Number(value.innerText) - 1;
      unselectBase()
    }



   function Tree () {
    print("From the offical site : ")
    br()
    let base = selectBase(div("", "width:350px;margin:0 auto"))
    let canvas = canvas2D()
    let cx = canvas.ctx

    // recursion
    function branch(length, angle, scale, level) {
      cx.fillRect(0, 0, .1 * length, length);
      let r=constrain(level*25,0,255)
      cx.fillStyle = "rgb("+r+ "," + (255-r)+ ",0)";
      if (level > 10) {  // -> exit
        return;
      }
      cx.save();  
      cx.translate(0, length);  // Draw
      cx.rotate(-angle); branch(length * scale, angle, scale, level + 1);
      cx.rotate(2 * angle); branch(length * scale, angle, scale, level + 1);
      cx.restore();
    }

    // draw graphics
    let w = canvas.width = base.clientWidth 
    canvas.height = w;
    canvas.clear(); cx.translate(w / 2, w); 
    cx.rotate(-3.14152)
    let t;
    branch(base.clientWidth / 7, 0.33, 0.82, 0 , 0.01+0.1*Math.sin(0.1*t++))
    unselectBase()     
   }

    function cleanElt (elt) {
       while(elt.firstChild) {
        elt.removeChild(elt.firstChild);
       }
    }

    function router(component) {
      selectBase(main)
        cleanElt(main);
        component();
      unselectBase();
    }

    function Navbar () {
      selectBase(div('', cssNavbar))
        button("Home",cssButton ).onclick = () => router(Home);
        button("Canvas", cssButton).onclick = () => router(Tree);
        button("Counter", cssButton).onclick = () => router(Counter);
      unselectBase();
    }

    Navbar();

    let main = div('', cssContainer);

    router(Tree); 

 </script>
  </body>
</html>