getFormControl (label, input, description, infoText) {
    let ctrl
    const { type } = input

    /* Checkboxes get wrapped in p elements. */
    if (type && (type === 'checkbox' || type === 'radio')) {
      ctrl = document.createElement('p')
      if (label) {
        const span = document.createElement('span')
        span.innerHTML = label.innerHTML
        label.innerHTML = ''
        label.setAttribute('for', input.id)
        ctrl.appendChild(label)
        label.appendChild(input)
        label.appendChild(span)
      } else {
        ctrl.appendChild(input)
      }

      return ctrl
    }

    /* Anything else gets wrapped in divs. */
    ctrl = super.getFormControl(label, input, description, infoText)

    /* Color needs special attention. */
    if (type && type === 'color') {
      input.style.height = '3rem'
      input.style.width = '100%'
      input.style.margin = '5px 0 20px 0'
      input.style.padding = '3px'

      if (label) {
        label.style.transform = 'translateY(-14px) scale(0.8)'
        label.style['-webkit-transform'] = 'translateY(-14px) scale(0.8)'
        label.style['-webkit-transform-origin'] = '0 0'
        label.style['transform-origin'] = '0 0'
      }
    }

    return ctrl
  }
Gets a form control object consisiting of several sub objects.

@param {HTMLElement} label The label element.
@param {HTMLElement} input The input element.
@param {string} description The element description.
@param {string} infoText The element information text.
@returns {HTMLElement} The assembled DOM element.
@see http://materializecss.com/forms.html