summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/behaviors/bind_in_out.js
diff options
context:
space:
mode:
authorZ.J. van de Weg <git@zjvandeweg.nl>2017-03-06 14:06:33 +0100
committerZ.J. van de Weg <git@zjvandeweg.nl>2017-03-06 14:58:53 +0100
commit597639c09662b5f43ff966938c5e55e485a1563c (patch)
treef15d938c29a782c1cd99a10555e32c9bc617e74a /app/assets/javascripts/behaviors/bind_in_out.js
parent449ecd6c68150a7d6d97c3070ffbc3f8b1e372dd (diff)
downloadgitlab-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.js44
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;