diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-03-06 14:06:33 +0100 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2017-03-06 14:58:53 +0100 |
commit | 597639c09662b5f43ff966938c5e55e485a1563c (patch) | |
tree | f15d938c29a782c1cd99a10555e32c9bc617e74a /app/assets/javascripts/behaviors/bind_in_out.js | |
parent | 449ecd6c68150a7d6d97c3070ffbc3f8b1e372dd (diff) | |
download | gitlab-ce-597639c09662b5f43ff966938c5e55e485a1563c.tar.gz |
Fix eslint
Diffstat (limited to 'app/assets/javascripts/behaviors/bind_in_out.js')
-rw-r--r-- | app/assets/javascripts/behaviors/bind_in_out.js | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/app/assets/javascripts/behaviors/bind_in_out.js b/app/assets/javascripts/behaviors/bind_in_out.js new file mode 100644 index 00000000000..1cc0fc750b5 --- /dev/null +++ b/app/assets/javascripts/behaviors/bind_in_out.js @@ -0,0 +1,44 @@ +class BindInOut { + constructor(bindIn, bindOut) { + this.in = bindIn; + this.out = bindOut; + + this.eventWrapper = {}; + this.eventType = /(INPUT|TEXTAREA)/.test(bindIn.tagName) ? 'keyup' : 'change'; + } + + addEvents() { + this.eventWrapper.updateOut = this.updateOut.bind(this); + + this.in.addEventListener(this.eventType, this.eventWrapper.updateOut); + + return this; + } + + updateOut() { + this.out.textContent = this.in.value; + + return this; + } + + removeEvents() { + this.in.removeEventListener(this.eventType, this.eventWrapper.updateOut); + + return this; + } + + static initAll() { + const ins = document.querySelectorAll('*[data-bind-in]'); + + return [].map.call(ins, anIn => BindInOut.init(anIn)); + } + + static init(anIn, anOut) { + const out = anOut || document.querySelector(`*[data-bind-out="${anIn.dataset.bindIn}"]`); + const bindInOut = new BindInOut(anIn, out); + + return bindInOut.addEvents().updateOut(); + } +} + +export default BindInOut; |