UNPKG

coffeescript-ui

Version:
90 lines (74 loc) 2.45 kB
### * coffeescript-ui - Coffeescript User Interface System (CUI) * Copyright (c) 2013 - 2016 Programmfabrik GmbH * MIT Licence * https://github.com/programmfabrik/coffeescript-ui, http://www.coffeescript-ui.org ### class CUI.DigiDisplay extends CUI.DOMElement constructor: (opts) -> super(opts) @__digitsMap = [] @createMarkup() @registerDOMElement(@__displayDiv) initOpts: -> super() @addOpts digits: mandatory: true check: Array display: (str) -> for c, idx in str.split("") if idx == @_digits.length break info = @__digitsMap[idx] if not info continue if info.map.hasOwnProperty(c) _idx = info.map[c] else _idx = 0 fc = info.first_div if not info.height info.height = CUI.dom.getDimensions(fc).borderBoxHeight CUI.dom.setStyleOne(fc, "marginTop", "-"+(_idx*info.height)+"px") fc.setAttribute("c", c) fc.setAttribute("idx", _idx) @ createMarkup: -> @__displayDiv = CUI.dom.div("cui-digi-display") for digit, digit_idx in @_digits if digit.static CUI.dom.append(@__displayDiv, container = CUI.dom.div("cui-digi-display-static cui-digi-display-#{digit_idx}")) CUI.dom.addClass(CUI.dom.append(container, CUI.dom.text(digit.static)), digit.class) if digit.attr container.getAttribute(digit.attr) continue digit.__regexp = new RegExp(digit.mask) CUI.dom.append(@__displayDiv, container = CUI.dom.div("cui-digi-display-container cui-digi-display-#{digit_idx}")) CUI.dom.addClass(container, digit.class) if digit.attr container.getAttribute(digit.attr) @__digitsMap[digit_idx] = map: (map = {}) # for the "unknown character fc = CUI.dom.div("cui-digi-display-digit") fc.innerHTML = " " CUI.dom.append(container, fc) @__digitsMap[digit_idx].first_div = fc idx = 1 matched = false for i in [32..128] if digit.__regexp.exec(c = String.fromCharCode(i)) if i == 32 div = CUI.dom.div("cui-digi-display-digit") div.innerHTML = " " CUI.dom.append(container, div) else div = CUI.dom.div("cui-digi-display-digit") div.textContent = c CUI.dom.append(container, div) map[c] = idx idx++ matched = true CUI.util.assert(matched, "DigiDisplay.createMarkup", "Digit #{digit_idx} not matched against the regexp. ASCII range 32-128 is allowed.", digit: digit) # console.debug "created markup with map", map @__displayDiv