Javascript anatomy: Difference between revisions

From wikinotes
Line 4: Line 4:
= NodeJS CLI =
= NodeJS CLI =
<blockquote>
<blockquote>
{{ expand
| ${PROJECT}/main.mjs
|


<syntaxhighlight lang="javascript">
#!/usr/bin/env node
import * as Process from 'node:process'
import * as Path from 'node:path'
const EXECUTABLE = Path.basename(Process.argv[1]);
class CliCommand {
  help = false;
  verbose = false;
  static fromArgs() {
    var cmd = new CliCommand();
    var argv = Process.argv.slice(2);
    while (argv.length) {
      var item = argv.shift();
      switch (item) {
        case "-h": case "--help":
          cmd.help = true;
          break;
        case "-v": case "--verbose":
          cmd.verbose = true;
          break;
        default:
          console.error(`Invalid Param: '${item}'. See --help`);
          Process.exit(1);
      }
    }
    return cmd;
  }
  exec() {
    if (this.help) {
      showHelp();
      Process.exit(0);
    }
    if (this.verbose) {
      console.debug("loggers set to stun");
    }
    console.log(".. your program starts here");
  }
}
function showHelp() {
  var msg = `${EXECUTABLE} [-h] [-v]
  ARGS:
    -h --help
      show this help message.
  EXAMPLE:
    ${EXECUTABLE} -h  # show help
  `.trim()
  console.log(msg);
}
function main() {
  var cmd = CliCommand.fromArgs();
  cmd.exec();
}
main();
</syntaxhighlight>
}}
<syntaxhighlight lang="bash">
./main.mjs -h  # run
</syntaxhighlight>
</blockquote><!-- NodeJS Cli -->
</blockquote><!-- NodeJS Cli -->



Revision as of 22:10, 18 December 2022

NodeJS CLI

${PROJECT}/main.mjs


#!/usr/bin/env node
import * as Process from 'node:process'
import * as Path from 'node:path'


const EXECUTABLE = Path.basename(Process.argv[1]);


class CliCommand {
  help = false;
  verbose = false;

  static fromArgs() {
    var cmd = new CliCommand();
    var argv = Process.argv.slice(2);
    while (argv.length) {
      var item = argv.shift();
      switch (item) {
        case "-h": case "--help":
          cmd.help = true;
          break;
        case "-v": case "--verbose":
          cmd.verbose = true;
          break;
        default:
          console.error(`Invalid Param: '${item}'. See --help`);
          Process.exit(1);
      }
    }

    return cmd;
  }

  exec() {
    if (this.help) {
      showHelp();
      Process.exit(0);
    }

    if (this.verbose) {
      console.debug("loggers set to stun");
    }

    console.log(".. your program starts here");
  }
}


function showHelp() {
  var msg = `${EXECUTABLE} [-h] [-v]

  ARGS:
    -h --help
      show this help message.

  EXAMPLE:
    ${EXECUTABLE} -h  # show help
  `.trim()
  console.log(msg);
}



function main() {
  var cmd = CliCommand.fromArgs();
  cmd.exec();
}


main();
./main.mjs -h  # run

Web Browser

Some features of javascript (ex. ES6 modules) do not work when loading webpages directly from the filesystem.
You can use a tiny toy web-server like python http or golang simple-go-web-server to load your javascript instead.

${PROJECT}/index.html

<!doctype html public "-//W3C//DTD HTML 4.01 Frameset//EN"
  "http://www.w3.org/TR/html4/frameset.dtd">
<html lang="en">
  <head>
    <title>My Website</title>
    <script type="module" src="main.js"></script>
  <!--   <link rel="stylesheet" href="stylesheet.css" /> -->
  </head>
  <body>
    <h1>My Title</h1>
    <p>Some paragraph</p>

    <div id="sum-div">
      <button id="sum-btn">Add</button>
      <input class="addend" type="text" placeholder="1">
      <input class="addend" type="text" placeholder="2">
      <span>=</span>
      <input class="result" type="text" readonly="1">
    </div>
  </body>
</html>

${PROJECT}/main.js


import * as Math from './modules/math.js'


function sumClicked() {
  var sum_btn = document.getElementById("sum-div");
  var addend_inputs = Array.from(sum_btn.querySelectorAll(".addend"));
  var addend_values = addend_inputs.map((input) => { return Number(input.value) });
  var sum = Math.sum(...addend_values);

  var result_input = sum_btn.querySelector(".result");
  result_input.setAttribute("value", String(sum));
}


document.getElementById("sum-btn").addEventListener("click", sumClicked);

${PROJECT}/modules/math.js


export function sum(a, b) {
  return a + b;
}

export function multiply(a, b) {
  return a * b;
}


open 'http://localhost:3000'
simple-go-web-server --hot
# reload to get changes

Web Browser, Bundled javascript