parent
73cb0a4b2b
commit
3fba2d88c4
@ -0,0 +1,59 @@ |
|||||||
|
const { qs } = require('../utils') |
||||||
|
|
||||||
|
module.exports = function initButtons (input) { |
||||||
|
let container = qs('#action-buttons') |
||||||
|
|
||||||
|
// button labels
|
||||||
|
let labels = [] |
||||||
|
|
||||||
|
// button elements
|
||||||
|
let buttons = [] |
||||||
|
|
||||||
|
// add a button element
|
||||||
|
let pushButton = function pushButton () { |
||||||
|
let button = document.createElement('button') |
||||||
|
button.classList.add('action-button') |
||||||
|
button.setAttribute('data-n', buttons.length) |
||||||
|
buttons.push(button) |
||||||
|
container.appendChild(button) |
||||||
|
|
||||||
|
button.addEventListener('click', e => { |
||||||
|
// might as well use the attribute ¯\_(ツ)_/¯
|
||||||
|
let index = +button.getAttribute('data-n') |
||||||
|
input.sendButton(index) |
||||||
|
}) |
||||||
|
|
||||||
|
return button |
||||||
|
} |
||||||
|
|
||||||
|
// remove a button element
|
||||||
|
let popButton = function popButton () { |
||||||
|
let button = buttons.pop() |
||||||
|
button.parentNode.removeChild(button) |
||||||
|
} |
||||||
|
|
||||||
|
// sync with DOM
|
||||||
|
let update = function updateButtons () { |
||||||
|
console.log(labels) |
||||||
|
if (labels.length > buttons.length) { |
||||||
|
for (let i = buttons.length; i < labels.length; i++) { |
||||||
|
pushButton() |
||||||
|
} |
||||||
|
} else if (buttons.length > labels.length) { |
||||||
|
for (let i = labels.length; i < buttons.length; i++) { |
||||||
|
popButton() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
for (let i = 0; i < labels.length; i++) { |
||||||
|
let label = labels[i].trim() |
||||||
|
let button = buttons[i] |
||||||
|
button.textContent = label || '\u00a0' // label or nbsp
|
||||||
|
if (!label) { |
||||||
|
button.classList.add('inactive') |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return { update, labels } |
||||||
|
} |
Loading…
Reference in new issue