mirror of
https://hk.gh-proxy.com/https://github.com/NodeBB/nodebb-plugin-poll.git
synced 2025-10-03 04:31:04 +08:00
feat(eslint): manually fix eslint errors (not auto-fixable)
This commit is contained in:
parent
4fe1031712
commit
7e0ee094c0
14 changed files with 225 additions and 175 deletions
16
lib/hooks.js
16
lib/hooks.js
|
@ -1,3 +1,5 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
const NodeBB = require('./nodebb');
|
const NodeBB = require('./nodebb');
|
||||||
|
|
||||||
|
@ -54,7 +56,7 @@ const Serializer = require('./serializer');
|
||||||
return obj;
|
return obj;
|
||||||
};
|
};
|
||||||
|
|
||||||
Hooks.filter.topicPost = async function (data, callback) {
|
Hooks.filter.topicPost = async function (data) {
|
||||||
if (Serializer.hasMarkup(data.content)) {
|
if (Serializer.hasMarkup(data.content)) {
|
||||||
await canCreate(data.cid, data.uid);
|
await canCreate(data.cid, data.uid);
|
||||||
return data;
|
return data;
|
||||||
|
@ -64,6 +66,9 @@ const Serializer = require('./serializer');
|
||||||
|
|
||||||
Hooks.action.postDelete = function (data) {
|
Hooks.action.postDelete = function (data) {
|
||||||
Poll.getPollIdByPid(data.post.pid, (err, pollId) => {
|
Poll.getPollIdByPid(data.post.pid, (err, pollId) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
if (pollId) {
|
if (pollId) {
|
||||||
Poll.delete(pollId);
|
Poll.delete(pollId);
|
||||||
}
|
}
|
||||||
|
@ -72,6 +77,9 @@ const Serializer = require('./serializer');
|
||||||
|
|
||||||
Hooks.action.postRestore = function (data) {
|
Hooks.action.postRestore = function (data) {
|
||||||
Poll.getPollIdByPid(data.post.pid, (err, pollId) => {
|
Poll.getPollIdByPid(data.post.pid, (err, pollId) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
if (pollId) {
|
if (pollId) {
|
||||||
Poll.restore(pollId);
|
Poll.restore(pollId);
|
||||||
}
|
}
|
||||||
|
@ -80,6 +88,9 @@ const Serializer = require('./serializer');
|
||||||
|
|
||||||
Hooks.action.topicDelete = function (data) {
|
Hooks.action.topicDelete = function (data) {
|
||||||
Poll.getPollIdByTid(data.topic.tid, (err, pollId) => {
|
Poll.getPollIdByTid(data.topic.tid, (err, pollId) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
if (pollId) {
|
if (pollId) {
|
||||||
Poll.delete(pollId);
|
Poll.delete(pollId);
|
||||||
}
|
}
|
||||||
|
@ -88,6 +99,9 @@ const Serializer = require('./serializer');
|
||||||
|
|
||||||
Hooks.action.topicRestore = function (data) {
|
Hooks.action.topicRestore = function (data) {
|
||||||
Poll.getPollIdByTid(data.topic.tid, (err, pollId) => {
|
Poll.getPollIdByTid(data.topic.tid, (err, pollId) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
if (pollId) {
|
if (pollId) {
|
||||||
Poll.restore(pollId);
|
Poll.restore(pollId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
db: require.main.require('./src/database'),
|
db: require.main.require('./src/database'),
|
||||||
|
|
|
@ -172,6 +172,10 @@ const Scheduler = require('./scheduler');
|
||||||
|
|
||||||
Poll.getVoteCount = function (pollId, callback) {
|
Poll.getVoteCount = function (pollId, callback) {
|
||||||
NodeBB.db.getSetMembers(`poll:${pollId}:options`, (err, options) => {
|
NodeBB.db.getSetMembers(`poll:${pollId}:options`, (err, options) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
async.map(options, (option, next) => {
|
async.map(options, (option, next) => {
|
||||||
Poll.getOptionVoteCount(pollId, option, next);
|
Poll.getOptionVoteCount(pollId, option, next);
|
||||||
}, (err, results) => {
|
}, (err, results) => {
|
||||||
|
|
|
@ -1,15 +1,18 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
const cron = require('cron').CronJob;
|
||||||
const NodeBB = require('./nodebb');
|
const NodeBB = require('./nodebb');
|
||||||
|
|
||||||
const Poll = require('./poll');
|
const Poll = require('./poll');
|
||||||
const cron = require('cron').CronJob;
|
|
||||||
|
|
||||||
(function (Scheduler) {
|
(function (Scheduler) {
|
||||||
const jobs = {};
|
const jobs = {};
|
||||||
|
|
||||||
Scheduler.start = function () {
|
Scheduler.start = function () {
|
||||||
Poll.getScheduled((err, pollIds) => {
|
Poll.getScheduled((err, pollIds) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
pollIds.forEach((pollId) => {
|
pollIds.forEach((pollId) => {
|
||||||
Scheduler.add(pollId);
|
Scheduler.add(pollId);
|
||||||
});
|
});
|
||||||
|
|
|
@ -28,6 +28,9 @@ const Vote = require('./vote');
|
||||||
|
|
||||||
const pollId = parseInt(data.pollId, 10);
|
const pollId = parseInt(data.pollId, 10);
|
||||||
Poll.get(pollId, socket.uid, !!socket.uid, (err, pollData) => {
|
Poll.get(pollId, socket.uid, !!socket.uid, (err, pollData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
if (!pollData.info.version) {
|
if (!pollData.info.version) {
|
||||||
return callback(new Error('Legacy polls are not supported'));
|
return callback(new Error('Legacy polls are not supported'));
|
||||||
}
|
}
|
||||||
|
@ -77,6 +80,10 @@ const Vote = require('./vote');
|
||||||
}
|
}
|
||||||
|
|
||||||
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
|
@ -116,7 +123,9 @@ const Vote = require('./vote');
|
||||||
return callback(new Error('Can\'t update vote'));
|
return callback(new Error('Can\'t update vote'));
|
||||||
}
|
}
|
||||||
if (err || !data.options.length) {
|
if (err || !data.options.length) {
|
||||||
err && console.error(err);
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
return callback(new Error('Invalid option'));
|
return callback(new Error('Invalid option'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,6 +135,10 @@ const Vote = require('./vote');
|
||||||
}
|
}
|
||||||
|
|
||||||
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
|
@ -160,6 +173,10 @@ const Vote = require('./vote');
|
||||||
return callback(new Error('Error during removing vote'));
|
return callback(new Error('Error during removing vote'));
|
||||||
}
|
}
|
||||||
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
Poll.get(data.pollId, socket.uid, false, (err, pollData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
NodeBB.SocketIndex.server.sockets.emit('event:poll.voteChange', pollData);
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
|
@ -182,6 +199,9 @@ const Vote = require('./vote');
|
||||||
}
|
}
|
||||||
|
|
||||||
NodeBB.User.getUsersFields(result.votes, ['uid', 'username', 'userslug', 'picture'], (err, userData) => {
|
NodeBB.User.getUsersFields(result.votes, ['uid', 'username', 'userslug', 'picture'], (err, userData) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
result.votes = userData;
|
result.votes = userData;
|
||||||
callback(null, result);
|
callback(null, result);
|
||||||
});
|
});
|
||||||
|
@ -207,7 +227,7 @@ const Vote = require('./vote');
|
||||||
next(null, cid);
|
next(null, cid);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
function (cid, next) {
|
function (cid) {
|
||||||
checkPrivs(cid, socket.uid, callback);
|
checkPrivs(cid, socket.uid, callback);
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -40,6 +40,10 @@ const Poll = require('./poll');
|
||||||
|
|
||||||
Vote.removeUidVote = function (uid, pollId, callback) {
|
Vote.removeUidVote = function (uid, pollId, callback) {
|
||||||
Vote.getUidVote(uid, pollId, (err, vote) => {
|
Vote.getUidVote(uid, pollId, (err, vote) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
async.parallel([
|
async.parallel([
|
||||||
function (next) {
|
function (next) {
|
||||||
async.each(vote.options || [], (option, next) => {
|
async.each(vote.options || [], (option, next) => {
|
||||||
|
@ -65,7 +69,7 @@ const Poll = require('./poll');
|
||||||
pollId: pollId,
|
pollId: pollId,
|
||||||
uid: uid,
|
uid: uid,
|
||||||
options: options
|
options: options
|
||||||
.filter(option => option.votes.some(_uid => _uid == uid))
|
.filter(option => option.votes.some(_uid => _uid === uid))
|
||||||
.map(option => option.id),
|
.map(option => option.id),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,7 +10,7 @@ const Scheduler = require('./lib/scheduler');
|
||||||
Plugin.hooks = Hooks;
|
Plugin.hooks = Hooks;
|
||||||
|
|
||||||
Plugin.load = function (params, callback) {
|
Plugin.load = function (params, callback) {
|
||||||
function renderAdmin(req, res, next) {
|
function renderAdmin(req, res) {
|
||||||
res.render(`admin/plugins/${Config.plugin.id}`, {});
|
res.render(`admin/plugins/${Config.plugin.id}`, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,11 +62,11 @@ const Scheduler = require('./lib/scheduler');
|
||||||
};
|
};
|
||||||
|
|
||||||
Plugin.copyPrivilegesFrom = function (data, callback) {
|
Plugin.copyPrivilegesFrom = function (data, callback) {
|
||||||
if (data.privileges.indexOf('poll:create') == -1) {
|
if (data.privileges.indexOf('poll:create') === -1) {
|
||||||
data.privileges.push('poll:create');
|
data.privileges.push('poll:create');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.privileges.indexOf('groups:poll:create') == -1) {
|
if (data.privileges.indexOf('groups:poll:create') === -1) {
|
||||||
data.privileges.push('groups:poll:create');
|
data.privileges.push('groups:poll:create');
|
||||||
}
|
}
|
||||||
callback(null, data);
|
callback(null, data);
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* globals $, app, socket, define, bootbox */
|
|
||||||
|
|
||||||
define('admin/plugins/poll', ['settings'], function (Settings) {
|
define('admin/plugins/poll', ['settings'], function (Settings) {
|
||||||
var wrapper;
|
var wrapper;
|
||||||
|
|
||||||
|
@ -31,6 +29,9 @@ define('admin/plugins/poll', ['settings'], function (Settings) {
|
||||||
bootbox.confirm('Are you sure you wish to reset the settings?', function (sure) {
|
bootbox.confirm('Are you sure you wish to reset the settings?', function (sure) {
|
||||||
if (sure) {
|
if (sure) {
|
||||||
socket.emit('admin.plugins.poll.getDefaults', null, function (err, data) {
|
socket.emit('admin.plugins.poll.getDefaults', null, function (err, data) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
Settings.set('poll', data, wrapper, function () {
|
Settings.set('poll', data, wrapper, function () {
|
||||||
socket.emit('admin.plugins.poll.sync');
|
socket.emit('admin.plugins.poll.sync');
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* globals $, app, templates, define */
|
|
||||||
|
|
||||||
(function (Poll) {
|
(function (Poll) {
|
||||||
var Creator = {};
|
var Creator = {};
|
||||||
|
|
||||||
|
@ -78,6 +76,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
Poll.sockets.getConfig(null, function (err, config) {
|
Poll.sockets.getConfig(null, function (err, config) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
var poll = {};
|
var poll = {};
|
||||||
|
|
||||||
// If there's already a poll in the post, serialize it for editing
|
// If there's already a poll in the post, serialize it for editing
|
||||||
|
@ -147,7 +149,7 @@
|
||||||
return obj.length;
|
return obj.length;
|
||||||
});
|
});
|
||||||
|
|
||||||
if (obj.options.length == 0) {
|
if (obj.options.length === 0) {
|
||||||
return error('[[poll:error.no_options]]');
|
return error('[[poll:error.no_options]]');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,13 +175,15 @@
|
||||||
|
|
||||||
if (config.limits.maxOptions <= el.prevAll('input').length) {
|
if (config.limits.maxOptions <= el.prevAll('input').length) {
|
||||||
clearErrors();
|
clearErrors();
|
||||||
translator.translate('[[poll:error.max_options]]', function (text) {
|
require(['translator'], function (translator) {
|
||||||
error(text.replace('%d', config.limits.maxOptions));
|
translator.translate('[[poll:error.max_options]]', function (text) {
|
||||||
|
error(text.replace('%d', config.limits.maxOptions));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (prevOption.val().length != 0) {
|
if (prevOption.val().length !== 0) {
|
||||||
prevOption.clone().val('').insertBefore(el).focus();
|
prevOption.clone().val('').insertBefore(el).focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -220,16 +224,15 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
function serializeObjectFromForm(form) {
|
function serializeObjectFromForm(form) {
|
||||||
|
|
||||||
var obj = form.serializeObject();
|
var obj = form.serializeObject();
|
||||||
var result = {
|
var result = {
|
||||||
options: obj.options,
|
options: obj.options,
|
||||||
settings: {
|
settings: {
|
||||||
title: obj['settings.title'],
|
title: obj['settings.title'],
|
||||||
maxvotes: obj['settings.maxvotes'],
|
maxvotes: obj['settings.maxvotes'],
|
||||||
disallowVoteUpdate: obj['settings.disallowVoteUpdate'] === "on" ? "true" : "false",
|
disallowVoteUpdate: obj['settings.disallowVoteUpdate'] === 'on' ? 'true' : 'false',
|
||||||
end: obj['settings.end'],
|
end: obj['settings.end'],
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* globals require, utils */
|
|
||||||
|
|
||||||
(function (module) {
|
(function (module) {
|
||||||
var utils;
|
var utils;
|
||||||
var Serializer = {};
|
var Serializer = {};
|
||||||
|
@ -134,7 +132,7 @@
|
||||||
|
|
||||||
const stripped = utils.stripHTMLTags(raw).replace(/\\/g, '\');
|
const stripped = utils.stripHTMLTags(raw).replace(/\\/g, '\');
|
||||||
let match;
|
let match;
|
||||||
while ((match = settingsRegex.exec(stripped)) !== null) {
|
while ((match = settingsRegex.exec(stripped)) !== null) { // eslint-disable-line no-cond-assign
|
||||||
var key = match.groups.key.trim();
|
var key = match.groups.key.trim();
|
||||||
var value = match.groups.value.trim();
|
var value = match.groups.value.trim();
|
||||||
|
|
||||||
|
@ -170,7 +168,7 @@
|
||||||
module.exports = Serializer;
|
module.exports = Serializer;
|
||||||
|
|
||||||
if (typeof window !== 'undefined') {
|
if (typeof window !== 'undefined') {
|
||||||
Poll.serializer = module.exports;
|
window.Poll.serializer = module.exports;
|
||||||
}
|
}
|
||||||
}(typeof module === 'undefined' ? {
|
}(typeof module === 'undefined' ? {
|
||||||
module: {
|
module: {
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* globals socket */
|
|
||||||
|
|
||||||
(function (Poll) {
|
(function (Poll) {
|
||||||
var messages = [
|
var messages = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,8 +1,155 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
/* globals $, app,config */
|
|
||||||
|
|
||||||
(function (Poll) {
|
(function (Poll) {
|
||||||
|
var Actions = [
|
||||||
|
{
|
||||||
|
// Voting
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.voteButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
var form = view.dom.votingPanel.find('form');
|
||||||
|
var votes = form.serializeArray().map(function (option) {
|
||||||
|
return parseInt(option.value, 10);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (votes.length > 0) {
|
||||||
|
var voteData = {
|
||||||
|
pollId: view.pollData.info.pollId,
|
||||||
|
options: votes,
|
||||||
|
};
|
||||||
|
|
||||||
|
Poll.sockets.vote(voteData, function (err) {
|
||||||
|
if (!config.loggedIn) {
|
||||||
|
$(window).trigger('action:poll.vote.notloggedin');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
view.showResultsPanel();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Voting
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.updateVoteButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
var form = view.dom.votingPanel.find('form');
|
||||||
|
var votes = form.serializeArray().map(function (option) {
|
||||||
|
return parseInt(option.value, 10);
|
||||||
|
});
|
||||||
|
|
||||||
|
if (votes.length > 0) {
|
||||||
|
var voteData = {
|
||||||
|
pollId: view.pollData.info.pollId,
|
||||||
|
options: votes,
|
||||||
|
};
|
||||||
|
|
||||||
|
Poll.sockets.updateVote(voteData, function (err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
view.showResultsPanel();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Remove vote
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.removeVoteButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
var voteData = { pollId: view.pollData.info.pollId };
|
||||||
|
|
||||||
|
Poll.sockets.removeVote(voteData, function (err) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
view.showResultsPanel();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Results button
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.resultsPanelButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
view.showResultsPanel();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// To Voting button
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.votingPanelButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
view.showVotingPanel();
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Option details
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.resultsPanel.off('click').on('click', '.poll-result-votecount', function (e) {
|
||||||
|
self.handle(view, e);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view, e) {
|
||||||
|
var optionId = $(e.currentTarget).parents('[data-poll-option-id]').data('poll-option-id');
|
||||||
|
|
||||||
|
Poll.sockets.getOptionDetails({
|
||||||
|
pollId: view.pollData.info.pollId,
|
||||||
|
optionId: optionId,
|
||||||
|
}, function (err, details) {
|
||||||
|
if (err) {
|
||||||
|
return app.alertError(err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
view.showOptionDetails(details);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// Editing
|
||||||
|
register: function (view) {
|
||||||
|
var self = this;
|
||||||
|
view.dom.editButton.off('click').on('click', function () {
|
||||||
|
self.handle(view);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handle: function (view) {
|
||||||
|
Poll.sockets.getConfig(null, function (err, config) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
Poll.creator.show(view.pollData, config, function () {});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
var View = function (pollData) {
|
var View = function (pollData) {
|
||||||
this.pollData = pollData;
|
this.pollData = pollData;
|
||||||
};
|
};
|
||||||
|
@ -206,153 +353,6 @@
|
||||||
this.dom.resultsPanelButton.addClass('hidden');
|
this.dom.resultsPanelButton.addClass('hidden');
|
||||||
};
|
};
|
||||||
|
|
||||||
var Actions = [
|
|
||||||
{
|
|
||||||
// Voting
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.voteButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
var form = view.dom.votingPanel.find('form');
|
|
||||||
var votes = form.serializeArray().map(function (option) {
|
|
||||||
return parseInt(option.value, 10);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (votes.length > 0) {
|
|
||||||
var voteData = {
|
|
||||||
pollId: view.pollData.info.pollId,
|
|
||||||
options: votes,
|
|
||||||
};
|
|
||||||
|
|
||||||
Poll.sockets.vote(voteData, function (err, result) {
|
|
||||||
if (!config.loggedIn) {
|
|
||||||
$(window).trigger('action:poll.vote.notloggedin');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
view.showResultsPanel();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Voting
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.updateVoteButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
var form = view.dom.votingPanel.find('form');
|
|
||||||
var votes = form.serializeArray().map(function (option) {
|
|
||||||
return parseInt(option.value, 10);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (votes.length > 0) {
|
|
||||||
var voteData = {
|
|
||||||
pollId: view.pollData.info.pollId,
|
|
||||||
options: votes,
|
|
||||||
};
|
|
||||||
|
|
||||||
Poll.sockets.updateVote(voteData, function (err, result) {
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
view.showResultsPanel();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Remove vote
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.removeVoteButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
var voteData = { pollId: view.pollData.info.pollId };
|
|
||||||
|
|
||||||
Poll.sockets.removeVote(voteData, function (err, result) {
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
view.showResultsPanel();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Results button
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.resultsPanelButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
view.showResultsPanel();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// To Voting button
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.votingPanelButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
view.showVotingPanel();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Option details
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.resultsPanel.off('click').on('click', '.poll-result-votecount', function (e) {
|
|
||||||
self.handle(view, e);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view, e) {
|
|
||||||
var optionId = $(e.currentTarget).parents('[data-poll-option-id]').data('poll-option-id');
|
|
||||||
|
|
||||||
Poll.sockets.getOptionDetails({
|
|
||||||
pollId: view.pollData.info.pollId,
|
|
||||||
optionId: optionId,
|
|
||||||
}, function (err, details) {
|
|
||||||
if (err) {
|
|
||||||
return app.alertError(err.message);
|
|
||||||
}
|
|
||||||
|
|
||||||
view.showOptionDetails(details);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
// Editing
|
|
||||||
register: function (view) {
|
|
||||||
var self = this;
|
|
||||||
view.dom.editButton.off('click').on('click', function () {
|
|
||||||
self.handle(view);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
handle: function (view) {
|
|
||||||
Poll.sockets.getConfig(null, function (err, config) {
|
|
||||||
Poll.creator.show(view.pollData, config, function (data) {
|
|
||||||
});
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
Poll.view = {
|
Poll.view = {
|
||||||
polls: {},
|
polls: {},
|
||||||
load: function (pollData) {
|
load: function (pollData) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
const async = require.main.require('async');
|
const async = require.main.require('async');
|
||||||
const NodeBB = require('../lib/nodebb');
|
const NodeBB = require('../lib/nodebb');
|
||||||
const Poll = require('../lib/poll');
|
|
||||||
|
|
||||||
const timestamp = Date.UTC(2019, 3, 1);
|
const timestamp = Date.UTC(2019, 3, 1);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
const async = require.main.require('async');
|
const async = require.main.require('async');
|
||||||
const NodeBB = require('../lib/nodebb');
|
const NodeBB = require('../lib/nodebb');
|
||||||
|
@ -7,6 +8,9 @@ module.exports = {
|
||||||
timestamp: Date.UTC(2019, 2, 8),
|
timestamp: Date.UTC(2019, 2, 8),
|
||||||
method: function (callback) {
|
method: function (callback) {
|
||||||
NodeBB.db.getSortedSetRange('categories:cid', 0, -1, (err, cids) => {
|
NodeBB.db.getSortedSetRange('categories:cid', 0, -1, (err, cids) => {
|
||||||
|
if (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
async.some(cids, (cid, next) => {
|
async.some(cids, (cid, next) => {
|
||||||
// if any category already had a poll:create privilege, then this has ran before
|
// if any category already had a poll:create privilege, then this has ran before
|
||||||
// todo: weak check?
|
// todo: weak check?
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue