diff options
| author | rr- | 2016-04-01 18:45:25 +0200 |
|---|---|---|
| committer | rr- | 2016-04-01 18:48:16 +0200 |
| commit | e487adcc97b8d2bd111a34b7d3c72d66001deb8b (patch) | |
| tree | d684abf99bf176ead0a785bc237ae3b6a81417c1 /client/js/views/base_view.js | |
| parent | 1ad71585c4e95555566e8af068d5addf75b33274 (diff) | |
split files into client/ and server/
Diffstat (limited to 'client/js/views/base_view.js')
| -rw-r--r-- | client/js/views/base_view.js | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/client/js/views/base_view.js b/client/js/views/base_view.js new file mode 100644 index 0000000..1a0f7d0 --- /dev/null +++ b/client/js/views/base_view.js @@ -0,0 +1,66 @@ +'use strict'; + +const handlebars = require('handlebars'); + +// fix iterating over NodeList in Chrome and Opera +NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator]; + +class BaseView { + constructor() { + this.contentHolder = document.getElementById('content-holder'); + } + + getTemplate(templatePath) { + const templateElement = document.getElementById(templatePath); + if (!templateElement) { + console.log('Missing template: ' + templatePath); + return null; + } + const templateText = templateElement.innerHTML; + return handlebars.compile(templateText); + } + + notifyError(message) { + this.notify(message, 'error'); + } + + notifySuccess(message) { + this.notify(message, 'success'); + } + + notify(message, className) { + const messagesHolder = this.contentHolder.querySelector('.messages'); + /* TODO: animate this */ + const node = document.createElement('div'); + node.innerHTML = message; + node.classList.add('message'); + node.classList.add(className); + messagesHolder.appendChild(node); + } + + clearMessages() { + const messagesHolder = this.contentHolder.querySelector('.messages'); + /* TODO: animate that */ + while (messagesHolder.lastChild) { + messagesHolder.removeChild(messagesHolder.lastChild); + } + } + + decorateValidator(form) { + // postpone showing form fields validity until user actually tries + // to submit it (seeing red/green form w/o doing anything breaks POLA) + const submitButton = form.querySelector('.buttons input'); + submitButton.addEventListener('click', e => { + form.classList.add('show-validation'); + }); + form.addEventListener('submit', e => { + form.classList.remove('show-validation'); + }); + } + + showView(html) { + this.contentHolder.innerHTML = html; + } +} + +module.exports = BaseView; |