@leanup/cli-vanilla
Version:
This package contains the VanillaJS extension for the @leanup/cli.
75 lines (69 loc) • 2.07 kB
text/typescript
import { MeasuredSerieModel } from '../../../models/measured-series.model';
import { VanillaComponent } from '../../component.vanilla';
import { ListSerieController } from './controller';
function render($ctrl: ListSerieController): string {
let html = `<div>
<h2>List</h2>
<div>
<button class="primary" id="add" type="button">
Add
</button>`;
if ($ctrl.showPerformanceButton) {
html += `<button class="secondary" id="start" type="button" ng-if="$ctrl.showPerformanceButton">
Performance
</button>`;
}
html += `</div>`;
for (let i = 0; i < $ctrl.elements.length; i++) {
html += `<table key="${i}">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">ID</th>
<th scope="col">Title</th>
<th scope="col">Unit</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>`;
$ctrl.measuredSeries.forEach((serie: MeasuredSerieModel, index2: number) => {
html += `<tr key="${index2}">
<td>${index2 + 1}</td>
<td>${serie.getId()}</td>
<td>${serie.getTitle()}</td>
<td>${serie.getUnit()}</td>
<td>
<button id="edit-{{$index}}" type="button">
Edit
</button>
</td>
</tr>`;
});
html += `
</tbody>
</table>`;
}
html += `<small>Duration: ${$ctrl.duration} ms</small>
</div>`;
return html;
}
class ListSerieComponent extends VanillaComponent {
private readonly $ctrl: ListSerieController;
public constructor() {
super();
this.$ctrl = new ListSerieController({
hooks: {
doRender: this.render.bind(this),
},
});
}
public hackMe(component: ListSerieComponent): void {
console.log(component);
}
protected render() {
this.dom.innerHTML = render(this.$ctrl);
this.dom.querySelector('#add').addEventListener('click', this.$ctrl.add.bind(this.$ctrl));
this.dom.querySelector('#start').addEventListener('click', this.$ctrl.onStart.bind(this.$ctrl));
}
}
customElements.define('wc-list-serie', ListSerieComponent);