mirror of
https://hk.gh-proxy.com/https://github.com/NodeBB/nodebb-plugin-poll.git
synced 2025-10-03 04:31:04 +08:00
update ACP page for 3.2.x and up
This commit is contained in:
parent
8b1a0a2ad0
commit
d66b629765
3 changed files with 87 additions and 84 deletions
95
library.js
95
library.js
|
@ -6,60 +6,63 @@ const Sockets = require('./lib/sockets');
|
|||
const Hooks = require('./lib/hooks');
|
||||
const Scheduler = require('./lib/scheduler');
|
||||
|
||||
(function (Plugin) {
|
||||
Plugin.hooks = Hooks;
|
||||
const Plugin = module.exports;
|
||||
|
||||
Plugin.load = function (params, callback) {
|
||||
function renderAdmin(req, res) {
|
||||
res.render(`admin/plugins/${Config.plugin.id}`, {});
|
||||
}
|
||||
|
||||
params.router.get(`/admin/plugins/${Config.plugin.id}`, params.middleware.admin.buildHeader, renderAdmin);
|
||||
params.router.get(`/api/admin/plugins/${Config.plugin.id}`, renderAdmin);
|
||||
Plugin.hooks = Hooks;
|
||||
|
||||
NodeBB.PluginSockets[Config.plugin.id] = Sockets;
|
||||
NodeBB.AdminSockets[Config.plugin.id] = Config.adminSockets;
|
||||
Plugin.load = function (params, callback) {
|
||||
const routeHelpers = require.main.require('./src/routes/helpers');
|
||||
const { router } = params;
|
||||
|
||||
NodeBB.app = params.app;
|
||||
Scheduler.start();
|
||||
|
||||
Config.init(callback);
|
||||
};
|
||||
|
||||
Plugin.addAdminNavigation = function (adminHeader, callback) {
|
||||
adminHeader.plugins.push({
|
||||
route: `/plugins/${Config.plugin.id}`,
|
||||
icon: Config.plugin.icon,
|
||||
name: Config.plugin.name,
|
||||
routeHelpers.setupAdminPageRoute(router, `/admin/plugins/${Config.plugin.id}`, (req, res) => {
|
||||
res.render(`admin/plugins/${Config.plugin.id}`, {
|
||||
title: 'Poll',
|
||||
});
|
||||
});
|
||||
|
||||
callback(null, adminHeader);
|
||||
};
|
||||
NodeBB.PluginSockets[Config.plugin.id] = Sockets;
|
||||
NodeBB.AdminSockets[Config.plugin.id] = Config.adminSockets;
|
||||
|
||||
Plugin.registerFormatting = function (payload, callback) {
|
||||
payload.options.push({
|
||||
name: 'poll',
|
||||
className: `fa ${Config.plugin.icon}`,
|
||||
title: '[[poll:creator_title]]',
|
||||
});
|
||||
NodeBB.app = params.app;
|
||||
Scheduler.start();
|
||||
|
||||
callback(null, payload);
|
||||
};
|
||||
Config.init(callback);
|
||||
};
|
||||
|
||||
Plugin.addPrivilege = function (hookData) {
|
||||
hookData.privileges.set(
|
||||
'poll:create', { label: '[[poll:admin.create-poll]]' },
|
||||
);
|
||||
};
|
||||
Plugin.addAdminNavigation = function (adminHeader, callback) {
|
||||
adminHeader.plugins.push({
|
||||
route: `/plugins/${Config.plugin.id}`,
|
||||
icon: Config.plugin.icon,
|
||||
name: Config.plugin.name,
|
||||
});
|
||||
|
||||
Plugin.copyPrivilegesFrom = function (data, callback) {
|
||||
if (data.privileges.indexOf('poll:create') === -1) {
|
||||
data.privileges.push('poll:create');
|
||||
}
|
||||
callback(null, adminHeader);
|
||||
};
|
||||
|
||||
if (data.privileges.indexOf('groups:poll:create') === -1) {
|
||||
data.privileges.push('groups:poll:create');
|
||||
}
|
||||
callback(null, data);
|
||||
};
|
||||
}(exports));
|
||||
Plugin.registerFormatting = function (payload, callback) {
|
||||
payload.options.push({
|
||||
name: 'poll',
|
||||
className: `fa ${Config.plugin.icon}`,
|
||||
title: '[[poll:creator_title]]',
|
||||
});
|
||||
|
||||
callback(null, payload);
|
||||
};
|
||||
|
||||
Plugin.addPrivilege = function (hookData) {
|
||||
hookData.privileges.set(
|
||||
'poll:create', { label: '[[poll:admin.create-poll]]' },
|
||||
);
|
||||
};
|
||||
|
||||
Plugin.copyPrivilegesFrom = function (data, callback) {
|
||||
if (data.privileges.indexOf('poll:create') === -1) {
|
||||
data.privileges.push('poll:create');
|
||||
}
|
||||
|
||||
if (data.privileges.indexOf('groups:poll:create') === -1) {
|
||||
data.privileges.push('groups:poll:create');
|
||||
}
|
||||
callback(null, data);
|
||||
};
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
"cron": "^1.8.2"
|
||||
},
|
||||
"nbbpm": {
|
||||
"compatibility": "^3.0.0"
|
||||
"compatibility": "^3.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^7.31.0",
|
||||
|
|
|
@ -1,11 +1,21 @@
|
|||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<form class="form poll-settings">
|
||||
<div class="card">
|
||||
<div class="card-header">[[poll:poll]]</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="acp-page-container">
|
||||
<div component="settings/main/header" class="row border-bottom py-2 m-0 sticky-top acp-page-main-header align-items-center">
|
||||
<div class="col-12 col-md-8 px-0 mb-1 mb-md-0">
|
||||
<h4 class="fw-bold tracking-tight mb-0">{title}</h4>
|
||||
</div>
|
||||
<div class="col-12 col-md-4 px-0 px-md-3 text-end">
|
||||
<button id="reset" class="btn btn-warning btn-sm fw-semibold ff-secondary text-center text-nowrap">[[poll:reset]]</button>
|
||||
<button id="save" class="btn btn-primary btn-sm fw-semibold ff-secondary text-center text-nowrap">[[admin/admin:save-changes]]</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m-0">
|
||||
<div id="spy-container" class="col-12 px-0 mb-4" tabindex="0">
|
||||
<form class="form poll-settings">
|
||||
<div class="card">
|
||||
<div class="card-header">[[poll:poll]]</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<h6>[[poll:toggles]]</h6>
|
||||
<div class="mb-3">
|
||||
<div class="form-check">
|
||||
|
@ -14,7 +24,7 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="mb-3">
|
||||
<h6>[[poll:limits]]</h6>
|
||||
<div>
|
||||
<label class="form-label" for="maxPollOptions">[[poll:max_options]]</label>
|
||||
|
@ -23,36 +33,26 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card">
|
||||
<div class="card-header">[[poll:defaults]]</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="defaultsTitle">[[poll:default_title]]</label>
|
||||
<input type="text" class="form-control" id="defaultsTitle" placeholder="Poll" data-key="defaults.title">
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="defaultsMaxVotes">[[poll:max_votes]]</label>
|
||||
<input type="number" class="form-control" id="defaultsMaxVotes" placeholder="1" min="1" max="100" data-key="defaults.maxvotes">
|
||||
<p class="form-text">[[poll:info_choices]]</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-header">[[poll:defaults]]</div>
|
||||
<div class="card-body">
|
||||
<div class="mb-3">
|
||||
<label class="form-label" for="defaultsTitle">[[poll:default_title]]</label>
|
||||
<input type="text" class="form-control" id="defaultsTitle" placeholder="Poll" data-key="defaults.title">
|
||||
</div>
|
||||
<div>
|
||||
<label class="form-label" for="defaultsMaxVotes">[[poll:max_votes]]</label>
|
||||
<input type="number" class="form-control" id="defaultsMaxVotes" placeholder="1" min="1" max="100" data-key="defaults.maxvotes">
|
||||
<p class="form-text">[[poll:info_choices]]</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- IMPORT admin/partials/settings/toc.tpl -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col-lg-3">
|
||||
<div class="card">
|
||||
<div class="card-header">[[poll:settings]]</div>
|
||||
<div class="card-body">
|
||||
<button id="save" class="btn btn-primary btn-block">[[poll:save]]</button>
|
||||
<button id="reset" class="btn btn-warning btn-block">[[poll:reset]]</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
Loading…
Add table
Add a link
Reference in a new issue