aboutsummaryrefslogtreecommitdiff
path: root/client/js/views/base_view.js
diff options
context:
space:
mode:
authorrr-2016-04-01 18:45:25 +0200
committerrr-2016-04-01 18:48:16 +0200
commite487adcc97b8d2bd111a34b7d3c72d66001deb8b (patch)
treed684abf99bf176ead0a785bc237ae3b6a81417c1 /client/js/views/base_view.js
parent1ad71585c4e95555566e8af068d5addf75b33274 (diff)
split files into client/ and server/
Diffstat (limited to 'client/js/views/base_view.js')
-rw-r--r--client/js/views/base_view.js66
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;

© 2015 - 2026 Jakob L. Kreuze