mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-06-23 23:21:14 +02:00
fix: add missing files
This commit is contained in:
79
public/src/admin/settings/activitypub.js
Normal file
79
public/src/admin/settings/activitypub.js
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
define('admin/settings/activitypub', [
|
||||||
|
'benchpress',
|
||||||
|
'bootbox',
|
||||||
|
'categorySelector',
|
||||||
|
'api',
|
||||||
|
], function (Benchpress, bootbox, categorySelector, api) {
|
||||||
|
const Module = {};
|
||||||
|
|
||||||
|
Module.init = function () {
|
||||||
|
const rulesEl = document.getElementById('rules');
|
||||||
|
if (rulesEl) {
|
||||||
|
rulesEl.addEventListener('click', (e) => {
|
||||||
|
const subselector = e.target.closest('[data-action]');
|
||||||
|
if (subselector) {
|
||||||
|
const action = subselector.getAttribute('data-action');
|
||||||
|
switch (action) {
|
||||||
|
case 'rules.add': {
|
||||||
|
Module.throwRulesModal();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'rules.delete': {
|
||||||
|
const rid = subselector.closest('tr').getAttribute('data-rid');
|
||||||
|
api.del(`/admin/activitypub/rules/${rid}`, {}).then(async (data) => {
|
||||||
|
const html = await Benchpress.render('admin/settings/activitypub', { rules: data }, 'rules');
|
||||||
|
const tbodyEl = document.querySelector('#rules tbody');
|
||||||
|
if (tbodyEl) {
|
||||||
|
tbodyEl.innerHTML = html;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Module.throwRulesModal = function () {
|
||||||
|
Benchpress.render('admin/partials/activitypub/rules', {}).then(function (html) {
|
||||||
|
const submit = function () {
|
||||||
|
const formEl = modal.find('form').get(0);
|
||||||
|
const payload = Object.fromEntries(new FormData(formEl));
|
||||||
|
|
||||||
|
api.post('/admin/activitypub/rules', payload).then(async (data) => {
|
||||||
|
const html = await Benchpress.render('admin/settings/activitypub', { rules: data }, 'rules');
|
||||||
|
const tbodyEl = document.querySelector('#rules tbody');
|
||||||
|
if (tbodyEl) {
|
||||||
|
tbodyEl.innerHTML = html;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const modal = bootbox.dialog({
|
||||||
|
title: '[[admin/settings/activitypub:rules.add]]',
|
||||||
|
message: html,
|
||||||
|
buttons: {
|
||||||
|
save: {
|
||||||
|
label: '[[global:save]]',
|
||||||
|
className: 'btn-primary',
|
||||||
|
callback: submit,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// category switcher
|
||||||
|
categorySelector.init(modal.find('[component="category-selector"]'), {
|
||||||
|
onSelect: function (selectedCategory) {
|
||||||
|
modal.find('[name="cid"]').val(selectedCategory.cid);
|
||||||
|
},
|
||||||
|
cacheList: false,
|
||||||
|
showLinks: true,
|
||||||
|
template: 'admin/partials/category/selector-dropdown-right',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return Module;
|
||||||
|
});
|
||||||
33
src/activitypub/rules.js
Normal file
33
src/activitypub/rules.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const db = require('../database');
|
||||||
|
const utils = require('../utils');
|
||||||
|
|
||||||
|
const Rules = module.exports;
|
||||||
|
|
||||||
|
Rules.list = async () => {
|
||||||
|
const rids = await db.getSortedSetMembers('categorization:rid');
|
||||||
|
let rules = await db.getObjects(rids.map(rid => `rid:${rid}`));
|
||||||
|
rules = rules.map((rule, idx) => {
|
||||||
|
rule.rid = rids[idx];
|
||||||
|
return rule;
|
||||||
|
});
|
||||||
|
|
||||||
|
return rules;
|
||||||
|
};
|
||||||
|
|
||||||
|
Rules.add = async (type, value, cid) => {
|
||||||
|
const uuid = utils.generateUUID();
|
||||||
|
|
||||||
|
await Promise.all([
|
||||||
|
db.setObject(`rid:${uuid}`, { type, value, cid }),
|
||||||
|
db.sortedSetAdd('categorization:rid', Date.now(), uuid),
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
Rules.delete = async (rid) => {
|
||||||
|
await Promise.all([
|
||||||
|
db.sortedSetRemove('categorization:rid', rid),
|
||||||
|
db.delete(`rid:${rid}`),
|
||||||
|
]);
|
||||||
|
};
|
||||||
26
src/views/admin/partials/activitypub/rules.tpl
Normal file
26
src/views/admin/partials/activitypub/rules.tpl
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<p class="lead">[[admin/settings/activitypub:rules.modal.title]]</p>
|
||||||
|
<p>[[admin/settings/activitypub:rules.modal.instructions]]</p>
|
||||||
|
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<form role="form">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label" for="type">Type</label>
|
||||||
|
<select class="form-control" name="type" id="type">
|
||||||
|
<option value="hashtag">Hashtag</option>
|
||||||
|
<!--<option value="content">Content contains...</option>-->
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label" for="value">Value</label>
|
||||||
|
<input type="text" id="value" name="value" title="Value" class="form-control" placeholder="forum">
|
||||||
|
<p class="form-text">[[admin/settings/activitypub:rules.modal.values-multiple]]</p>
|
||||||
|
</div>
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">Category</label>
|
||||||
|
<div class="d-block">
|
||||||
|
<!-- IMPORT admin/partials/category/selector-dropdown-left.tpl -->
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="cid" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
Reference in New Issue
Block a user