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