voterunner

quick and dirty votes and discussions
git clone https://git.ce9e.org/voterunner.git

commit
eb10a08b33f3b4fc4f9ab0f80dd5c7b3ce9f2ce3
parent
fc4ac1a7137b4dcdce486a76250b80955bfb5279
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2020-10-18 06:56
replace socket.io by via

Diffstat

M package.json 3 +--
M static/src/voterunner.js 83 +++++++++++++++++++++++++++++++++++++------------------------
M static/test/test.js 5 ++---

3 files changed, 54 insertions, 37 deletions


diff --git a/package.json b/package.json

@@ -3,8 +3,7 @@
    3     3 	"version": "0.0.1",
    4     4 	"devDependencies": {
    5     5 		"mfbs": "^3.1.1",
    6    -1 		"preact": "^8.2.6",
    7    -1 		"socket.io-client": "^1.7.4"
   -1     6 		"preact": "^8.2.6"
    8     7 	},
    9     8 	"author": "Tobias Bengfort",
   10     9 	"license": "AGPL-3+"

diff --git a/static/src/voterunner.js b/static/src/voterunner.js

@@ -1,4 +1,3 @@
    1    -1 var io = require('socket.io-client');
    2     1 var template = require('./template');
    3     2 var utils = require('./utils');
    4     3 
@@ -9,9 +8,7 @@ document.addEventListener('DOMContentLoaded', function() {
    9     8 	if (!ID) ID = utils.randomString();
   10     9 	utils.setCookie('id', ID, 100);
   11    10 
   12    -1 	var socket = io.connect('/');
   13    -1 	window.socket = socket;  // make available for tests
   14    -1 	socket.emit('register', TOPIC, ID);
   -1    11 	var url = 'https://via.ce9e.org/hmsg/voterunner/' + TOPIC;
   15    12 
   16    13 	var state = {
   17    14 		nodes: [],
@@ -76,12 +73,18 @@ document.addEventListener('DOMContentLoaded', function() {
   76    73 	utils.on(document, 'click', '.node__delegate', function() {
   77    74 		var nodeElement = this.parentElement.parentElement.parentElement;
   78    75 		var id = nodeElement.id.substr(5);
   79    -1 		socket.emit('setDelegate', id);
   -1    76 		fetch(url, {
   -1    77 			method: 'POST',
   -1    78 			body: JSON.stringify(['setDelegate', state.id, id]),
   -1    79 		});
   80    80 	});
   81    81 
   82    82 	utils.on(document, 'click', '.user__rm', function() {
   83    83 		if (confirm('Do you really want to delete this opinion?')) {
   84    -1 			socket.emit('rmNode');
   -1    84 			fetch(url, {
   -1    85 				method: 'POST',
   -1    86 				body: JSON.stringify(['rmNode', state.id]),
   -1    87 			});
   85    88 			document.querySelector('.user__comment textarea').value = '';
   86    89 		}
   87    90 	});
@@ -92,7 +95,10 @@ document.addEventListener('DOMContentLoaded', function() {
   92    95 	});
   93    96 
   94    97 	utils.on(document, 'click', '.user__undelegate', function() {
   95    -1 		socket.emit('rmDelegate');
   -1    98 		fetch(url, {
   -1    99 			method: 'POST',
   -1   100 			body: JSON.stringify(['rmDelegate', state.id]),
   -1   101 		});
   96   102 	});
   97   103 
   98   104 	utils.on(document, 'input', '.user__comment textarea', utils.throttle(function() {
@@ -101,33 +107,46 @@ document.addEventListener('DOMContentLoaded', function() {
  101   107 		// Do not create a new node if the comment is empty.
  102   108 		// This can happen e.g. on a keydown event from the ctrl or shift keys.
  103   109 		if (node || comment) {
  104    -1 			socket.emit('setNodeComment', comment);
   -1   110 			fetch(url, {
   -1   111 				method: 'POST',
   -1   112 				body: JSON.stringify(['setNodeComment', state.id, comment]),
   -1   113 			});
  105   114 		}
  106   115 	}, 1000));
  107   116 
  108    -1 	socket.on('rmNode', function(id) {
  109    -1 		state.nodes = state.nodes.filter(function(node) {
  110    -1 			if (node.delegate === id) {
  111    -1 				node.delegate = null;
  112    -1 			}
  113    -1 			return node.id !== id;
  114    -1 		});
  115    -1 		invalidateVotes();
  116    -1 		update(state);
  117    -1 	});
  118    -1 	socket.on('setNodeComment', function(id, comment) {
  119    -1 		getNode(id).comment = comment;
  120    -1 		update(state);
  121    -1 	});
  122    -1 	socket.on('setDelegate', function(id, delegate) {
  123    -1 		getNode(id).delegate = delegate;
  124    -1 		invalidateVotes();
  125    -1 		ensureVisible(user);
  126    -1 		update(state);
  127    -1 	});
  128    -1 	socket.on('rmDelegate', function(id) {
  129    -1 		getNode(id).delegate = null;
  130    -1 		invalidateVotes();
   -1   117 	var evtSource = new EventSource(url);
   -1   118 	evtSource.onmessage = function(event) {
   -1   119 		var data = JSON.parse(event.data);
   -1   120 		var name = data[0];
   -1   121 		var id = data[1];
   -1   122 
   -1   123 		if (!id) {
   -1   124 			return;
   -1   125 		} else if (name === 'rmNode') {
   -1   126 			state.nodes = state.nodes.filter(function(node) {
   -1   127 				if (node.delegate === id) {
   -1   128 					node.delegate = null;
   -1   129 				}
   -1   130 				return node.id !== id;
   -1   131 			});
   -1   132 			invalidateVotes();
   -1   133 		} else if (name === 'setNodeComment') {
   -1   134 			getNode(id).comment = data[2];
   -1   135 		} else if (name === 'setDelegate') {
   -1   136 			getNode(id).delegate = data[2];
   -1   137 			invalidateVotes();
   -1   138 			ensureVisible(state.nodes.find(n => n.id === state.id));
   -1   139 		} else if (name === 'rmDelegate') {
   -1   140 			getNode(id).delegate = null;
   -1   141 			invalidateVotes();
   -1   142 		}
  131   143 		update(state);
  132    -1 	});
   -1   144 	};
   -1   145 
   -1   146 	window.testClear = function(done) {
   -1   147 		fetch(url, {
   -1   148 			method: 'PUT',
   -1   149 			body: JSON.stringify(['setNodes', null, []]),
   -1   150 		}).then(done);
   -1   151 	};
  133   152 });

diff --git a/static/test/test.js b/static/test/test.js

@@ -24,9 +24,8 @@ var setUp = function(url, fn) {
   24    24 	};
   25    25 
   26    26 	iframe.tearDown = function(done) {
   27    -1 		var self = this;
   28    -1 		self.contentWindow.socket.emit('testClear', function() {
   29    -1 			self.parentNode.removeChild(self);
   -1    27 		this.contentWindow.testClear(() => {
   -1    28 			this.parentNode.removeChild(this);
   30    29 			done();
   31    30 		});
   32    31 	};