app/assets/javascripts/pwn-fx.js.coffee in pwnstyles_rails-0.1.10 vs app/assets/javascripts/pwn-fx.js.coffee in pwnstyles_rails-0.1.11

- old
+ new

@@ -395,33 +395,47 @@ # Shows / hides elements in a DOM depending on an input's value. # # Attributes: # data-pwnfx-showif: an identifier that connects the source <input> +# data-pwnfx-showif-replace: the name of a tag that will be used to replace +# the hidden element (default: don't replace the hidden element) # data-pwnfx-showif-class: the CSS class that is added to hidden elements; # (default: hidden) # data-pwnfx-showif-is: the value that the <input> has to match for this # element to be shown # data-pwnfx-showif-source: set to the identifier in data-pwnfx-showif # on the <input> whose value determines if this element is shown or not class PwnFxShowIf constructor: (element, identifier, scopeId) -> hiddenClass = element.getAttribute('data-pwnfx-showif-class') || 'hidden' showValue = element.getAttribute 'data-pwnfx-showif-is' - sourceSelector = "[data-pwnfx-showif-source=\"#{identifier}\"]" + sourceSelector = "[data-pwnfx-showif-source=\"#{identifier}\"]" - oldValue = null + replacementTag = element.getAttribute 'data-pwnfx-showif-replace' + if replacementTag + replacement = document.createElement replacementTag + replacement.setAttribute 'class', hiddenClass + else + replacement = null + + isHidden = false onChange = (event) -> - console.log ['change', event.target] value = event.target.value - return true if value == oldValue - oldValue = value + willHide = value != showValue + return if isHidden == willHide + isHidden = willHide - console.log [value, showValue] - if value == showValue - element.classList.remove hiddenClass + if replacement + if willHide + element.parentElement.replaceChild replacement, element + else + replacement.parentElement.replaceChild element, replacement else - element.classList.add hiddenClass + if willHide + element.classList.add hiddenClass + else + element.classList.remove hiddenClass true scope = PwnFx.resolveScope scopeId, element for sourceElement in PwnFx.queryScope(scope, sourceSelector) sourceElement.addEventListener 'change', onChange, false