
<script src="https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element/dist/index.min.js"> </script>
OR
<script src="https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element@latest/dist/index.min.js"> </script>
OR
<script src="https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element@<specific-version>/dist/index.min.js"> </script>
npm i @nuka9510/simple-custom-element
<script type="importmap">
{
"imports": {
"@nuka9510/js-util": "<path>/node_modules/@nuka9510/js-util/dist/index.mjs",
"@nuka9510/simple-custom-element": "<path>/node_modules/@nuka9510/simple-custom-element/dist/index.mjs"
OR
"@nuka9510/js-util": "https://cdn.jsdelivr.net/npm/@nuka9510/js-util/dist/index.mjs",
"@nuka9510/simple-custom-element": "https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element/dist/index.mjs"
OR
"@nuka9510/js-util": "https://cdn.jsdelivr.net/npm/@nuka9510/js-util@latest/dist/index.mjs",
"@nuka9510/simple-custom-element": "https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element@latest/dist/index.mjs"
OR
"@nuka9510/js-util": "https://cdn.jsdelivr.net/npm/@nuka9510/js-util@<specific-version>/dist/index.mjs",
"@nuka9510/simple-custom-element": "https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element@<specific-version>/dist/index.mjs"
}
}
</script>
example
├── js
│ ├── component
│ │ └── test-component.mjs
│ ├── register
│ │ └── test-register.mjs
│ └── index.mjs
└── view
└── index.html
js/component/test-component.mjs
import { JUtil } from "@nuka9510/js-util";
import { SCEComponent } from "@nuka9510/simple-custom-element";
export default class TestComponent extends SCEComponent {
get action() {
return {
'set-state': [
{ event: 'click', callback: this.onSetStateClick }
]
};
}
async init() {
this.state = this.setState({ arg: 'arg1' });
}
onSetStateClick(ev) {
const node = ev.currentTarget;
this.state.set('arg', node.dataset.sceValue);
}
render() {
const state = this.state.get();
return `
<table style="border-collapse: collapse;">
<colgroup>
<col style="width: 80px;">
<col style="width: 80px;">
<col style="width: 80px;">
<col style="width: 250px;">
<col style="width: 250px;">
<col style="width: 250px;">
</colgroup>
<thead>
<tr>
<th style="border: 1px solid #000000"> num </th>
<th style="border: 1px solid #000000"> num * 2 </th>
<th style="border: 1px solid #000000"> num ** 2 </th>
<th style="border: 1px solid #000000"> (num / (num * 2)) * 100 </th>
<th style="border: 1px solid #000000"> (num / (num ** 2)) * 100 </th>
<th style="border: 1px solid #000000"> ((num * 2) / (num ** 2)) * 100 </th>
</tr>
</thead>
<tbody>
${
this[state.arg].list.reduce(
(...arg) => `
${ arg[0] }
<tr>
<td style="text-align: center; border: 1px solid #000000;"> ${ arg[1].num } </td>
<td style="text-align: center; border: 1px solid #000000;"> ${ arg[1].num * 2 } </td>
<td style="text-align: center; border: 1px solid #000000;"> ${ arg[1].num ** 2 } </td>
<td style="text-align: center; border: 1px solid #000000;"> ${ JUtil.numberFormat((arg[1].num / (arg[1].num * 2)) * 100, 3) } </td>
<td style="text-align: center; border: 1px solid #000000;"> ${ JUtil.numberFormat((arg[1].num / (arg[1].num ** 2)) * 100, 3) } </td>
<td style="text-align: center; border: 1px solid #000000;"> ${ JUtil.numberFormat(((arg[1].num * 2) / (arg[1].num ** 2)) * 100, 3) } </td>
</tr>
`, ''
)
}
</tbody>
</table>
<button type="button" data-sce-action="set-state" data-sce-value="arg1"> setState(arg1) </button>
<button type="button" data-sce-action="set-state" data-sce-value="arg2"> setState(arg2) </button>
<button type="button" data-sce-action="set-state" data-sce-value="arg3"> setState(arg3) </button>
`;
}
}
js/register/test-register.mjs
import { SCERegister } from "@nuka9510/simple-custom-element";
import TestComponent from "../component/test-component.mjs";
export default class TestResister extends SCERegister {
get element() {
return [
{ tagName: 'test-component', element: TestComponent }
];
}
}
import TestResister from "./register/test-register.mjs";
new TestResister();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<test-component>
<script type="application/json" data-sce-arg="arg1">
{
"list": [
{ "num": 1 },
{ "num": 2 },
{ "num": 3 },
{ "num": 4 },
{ "num": 5 },
{ "num": 6 }
]
}
</script>
<script type="application/json" data-sce-arg="arg2">
{
"list": [
{ "num": 7 },
{ "num": 8 },
{ "num": 9 },
{ "num": 10 },
{ "num": 11 },
{ "num": 12 }
]
}
</script>
<script type="application/json" data-sce-arg="arg3">
{
"list": [
{ "num": 13 },
{ "num": 14 },
{ "num": 15 },
{ "num": 16 },
{ "num": 17 },
{ "num": 18 }
]
}
</script>
</test-component>
</body>
<script type="importmap">
{
"imports": {
"@nuka9510/js-util": "https://cdn.jsdelivr.net/npm/@nuka9510/js-util/dist/index.mjs",
"@nuka9510/simple-custom-element": "https://cdn.jsdelivr.net/npm/@nuka9510/simple-custom-element/dist/index.mjs"
}
}
</script>
<script src="../js/index.mjs" type="module"></script>
</html>