aboutsummaryrefslogtreecommitdiff
path: root/client/js/views
diff options
context:
space:
mode:
Diffstat (limited to 'client/js/views')
-rw-r--r--client/js/views/pool_create_view.js36
-rw-r--r--client/js/views/pool_edit_view.js31
-rw-r--r--client/js/views/snapshots_page_view.js15
3 files changed, 75 insertions, 7 deletions
diff --git a/client/js/views/pool_create_view.js b/client/js/views/pool_create_view.js
index 20218e5..26fca59 100644
--- a/client/js/views/pool_create_view.js
+++ b/client/js/views/pool_create_view.js
@@ -22,8 +22,13 @@ class PoolCreateView extends events.EventTarget {
'input', e => this._evtNameInput(e));
}
+ if (this._postsFieldNode) {
+ this._postsFieldNode.addEventListener(
+ 'input', e => this._evtPostsInput(e));
+ }
+
for (let node of this._formNode.querySelectorAll(
- 'input, select, textarea')) {
+ 'input, select, textarea, posts')) {
node.addEventListener(
'change', e => {
this.dispatchEvent(new CustomEvent('change'));
@@ -74,16 +79,31 @@ class PoolCreateView extends events.EventTarget {
this._namesFieldNode.setCustomValidity('');
}
+ _evtPostsInput(e) {
+ const regex = /^\d+$/;
+ const list = misc.splitByWhitespace(this._postsFieldNode.value);
+
+ for (let item of list) {
+ if (!regex.test(item)) {
+ this._postsFieldNode.setCustomValidity(
+ `Pool ID "${item}" is not an integer.`);
+ return;
+ }
+ }
+
+ this._postsFieldNode.setCustomValidity('');
+ }
+
_evtSubmit(e) {
e.preventDefault();
- let pool = new Pool()
- pool.names = misc.splitByWhitespace(this._namesFieldNode.value);
- pool.category = this._categoryFieldNode.value;
- pool.description = this._descriptionFieldNode.value;
this.dispatchEvent(new CustomEvent('submit', {
detail: {
- pool: pool,
+ names: misc.splitByWhitespace(this._namesFieldNode.value),
+ category: this._categoryFieldNode.value,
+ description: this._descriptionFieldNode.value,
+ posts: misc.splitByWhitespace(this._postsFieldNode.value)
+ .map(i => parseInt(i, 10))
},
}));
}
@@ -103,6 +123,10 @@ class PoolCreateView extends events.EventTarget {
get _descriptionFieldNode() {
return this._formNode.querySelector('.description textarea');
}
+
+ get _postsFieldNode() {
+ return this._formNode.querySelector('.posts input');
+ }
}
module.exports = PoolCreateView;
diff --git a/client/js/views/pool_edit_view.js b/client/js/views/pool_edit_view.js
index fac8430..7cd8bc9 100644
--- a/client/js/views/pool_edit_view.js
+++ b/client/js/views/pool_edit_view.js
@@ -4,6 +4,7 @@ const events = require('../events.js');
const api = require('../api.js');
const misc = require('../util/misc.js');
const views = require('../util/views.js');
+const Post = require('../models/post.js');
const template = views.getTemplate('pool-edit');
@@ -22,8 +23,13 @@ class PoolEditView extends events.EventTarget {
'input', e => this._evtNameInput(e));
}
+ if (this._postsFieldNode) {
+ this._postsFieldNode.addEventListener(
+ 'input', e => this._evtPostsInput(e));
+ }
+
for (let node of this._formNode.querySelectorAll(
- 'input, select, textarea')) {
+ 'input, select, textarea, posts')) {
node.addEventListener(
'change', e => {
this.dispatchEvent(new CustomEvent('change'));
@@ -74,6 +80,21 @@ class PoolEditView extends events.EventTarget {
this._namesFieldNode.setCustomValidity('');
}
+ _evtPostsInput(e) {
+ const regex = /^\d+$/;
+ const list = misc.splitByWhitespace(this._postsFieldNode.value);
+
+ for (let item of list) {
+ if (!regex.test(item)) {
+ this._postsFieldNode.setCustomValidity(
+ `Pool ID "${item}" is not an integer.`);
+ return;
+ }
+ }
+
+ this._postsFieldNode.setCustomValidity('');
+ }
+
_evtSubmit(e) {
e.preventDefault();
this.dispatchEvent(new CustomEvent('submit', {
@@ -91,6 +112,10 @@ class PoolEditView extends events.EventTarget {
description: this._descriptionFieldNode ?
this._descriptionFieldNode.value :
undefined,
+
+ posts: this._postsFieldNode ?
+ misc.splitByWhitespace(this._postsFieldNode.value) :
+ undefined,
},
}));
}
@@ -110,6 +135,10 @@ class PoolEditView extends events.EventTarget {
get _descriptionFieldNode() {
return this._formNode.querySelector('.description textarea');
}
+
+ get _postsFieldNode() {
+ return this._formNode.querySelector('.posts input');
+ }
}
module.exports = PoolEditView;
diff --git a/client/js/views/snapshots_page_view.js b/client/js/views/snapshots_page_view.js
index 77fbe13..e7ea264 100644
--- a/client/js/views/snapshots_page_view.js
+++ b/client/js/views/snapshots_page_view.js
@@ -36,6 +36,8 @@ function _makeResourceLink(type, id) {
return views.makeTagLink(id, true);
} else if (type === 'tag_category') {
return 'category "' + id + '"';
+ } else if (type === 'pool') {
+ return views.makePoolLink(id, true);
}
}
@@ -113,6 +115,19 @@ function _makeItemModification(type, data) {
if (diff.flags) {
_extend(lines, ['Changed flags']);
}
+
+ } else if (type === 'pool') {
+ if (diff.names) {
+ _extend(lines, _formatBasicChange(diff.names, 'names'));
+ }
+ if (diff.category) {
+ _extend(
+ lines, _formatBasicChange(diff.category, 'category'));
+ }
+ if (diff.posts) {
+ _extend(
+ lines, _formatBasicChange(diff.posts, 'posts'));
+ }
}
return lines.join('<br/>');

© 2015 - 2026 Jakob L. Kreuze