mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-01-28 02:09:52 +01:00
Merge branch 'master' into webpack5
This commit is contained in:
@@ -47,18 +47,18 @@ define('api', ['hooks'], (hooks) => {
|
||||
}
|
||||
|
||||
api.get = (route, payload, onSuccess) => call({
|
||||
url: route + (Object.keys(payload).length ? ('?' + $.param(payload)) : ''),
|
||||
url: route + (payload && Object.keys(payload).length ? ('?' + $.param(payload)) : ''),
|
||||
}, onSuccess);
|
||||
|
||||
api.head = (route, payload, onSuccess) => call({
|
||||
url: route + (Object.keys(payload).length ? ('?' + $.param(payload)) : ''),
|
||||
url: route + (payload && Object.keys(payload).length ? ('?' + $.param(payload)) : ''),
|
||||
method: 'head',
|
||||
}, onSuccess);
|
||||
|
||||
api.post = (route, payload, onSuccess) => call({
|
||||
url: route,
|
||||
method: 'post',
|
||||
data: JSON.stringify(payload),
|
||||
data: JSON.stringify(payload || {}),
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
headers: {
|
||||
'x-csrf-token': config.csrf_token,
|
||||
@@ -68,7 +68,7 @@ define('api', ['hooks'], (hooks) => {
|
||||
api.put = (route, payload, onSuccess) => call({
|
||||
url: route,
|
||||
method: 'put',
|
||||
data: JSON.stringify(payload),
|
||||
data: JSON.stringify(payload || {}),
|
||||
contentType: 'application/json; charset=utf-8',
|
||||
headers: {
|
||||
'x-csrf-token': config.csrf_token,
|
||||
|
||||
@@ -50,7 +50,9 @@ define('settings/sorted-list', [
|
||||
const list = ajaxify.data[call ? hash : 'settings'][key];
|
||||
|
||||
if (Array.isArray(list) && typeof list[0] !== 'string') {
|
||||
list.forEach(function (item) {
|
||||
await Promise.all(list.map(async (item) => {
|
||||
({ item } = await hooks.fire('filter:settings.sorted-list.loadItem', { item }));
|
||||
|
||||
const itemUUID = utils.generateUUID();
|
||||
const form = $(formHtml).deserialize(item);
|
||||
form.attr('data-sorted-list-uuid', itemUUID);
|
||||
@@ -60,12 +62,12 @@ define('settings/sorted-list', [
|
||||
parse($container, itemUUID, item).then(() => {
|
||||
hooks.fire('action:settings.sorted-list.loaded', { element: listEl.get(0) });
|
||||
});
|
||||
});
|
||||
}));
|
||||
}
|
||||
|
||||
listEl.sortable().addClass('pointer');
|
||||
},
|
||||
addItem: function ($formElements, $target) {
|
||||
addItem: async ($formElements, $target) => {
|
||||
const key = $target.attr('data-sorted-list');
|
||||
const itemUUID = utils.generateUUID();
|
||||
const form = $('<form class="" data-sorted-list-uuid="' + itemUUID + '" data-sorted-list-object="' + key + '"></form>');
|
||||
@@ -73,7 +75,8 @@ define('settings/sorted-list', [
|
||||
|
||||
$('#content').append(form.hide());
|
||||
|
||||
const data = Settings.helper.serializeForm(form);
|
||||
let data = Settings.helper.serializeForm(form);
|
||||
({ item: data } = await hooks.fire('filter:settings.sorted-list.loadItem', { item: data }));
|
||||
parse($target, itemUUID, data);
|
||||
},
|
||||
};
|
||||
@@ -88,7 +91,6 @@ define('settings/sorted-list', [
|
||||
function setupEditButton($container, itemUUID) {
|
||||
const $list = $container.find('[data-type="list"]');
|
||||
const key = $container.attr('data-sorted-list');
|
||||
const itemTpl = $container.attr('data-item-template');
|
||||
const editBtn = $('[data-sorted-list-uuid="' + itemUUID + '"] [data-type="edit"]');
|
||||
|
||||
editBtn.on('click', function () {
|
||||
@@ -100,7 +102,7 @@ define('settings/sorted-list', [
|
||||
el.value = form.find(`select#${el.id}`).val();
|
||||
});
|
||||
|
||||
const modal = bootbox.confirm(clone, function (save) {
|
||||
const modal = bootbox.confirm(clone, async (save) => {
|
||||
if (save) {
|
||||
const form = $('<form class="" data-sorted-list-uuid="' + itemUUID + '" data-sorted-list-object="' + key + '"></form>');
|
||||
form.append(modal.find('form').children());
|
||||
@@ -109,25 +111,19 @@ define('settings/sorted-list', [
|
||||
$('#content').append(form.hide());
|
||||
|
||||
|
||||
const data = Settings.helper.serializeForm(form);
|
||||
let data = Settings.helper.serializeForm(form);
|
||||
({ item: data } = await hooks.fire('filter:settings.sorted-list.loadItem', { item: data }));
|
||||
stripTags(data);
|
||||
|
||||
app.parseAndTranslate(itemTpl, data, function (itemHtml) {
|
||||
itemHtml = $(itemHtml);
|
||||
const oldItem = $list.find('[data-sorted-list-uuid="' + itemUUID + '"]');
|
||||
oldItem.after(itemHtml);
|
||||
oldItem.remove();
|
||||
itemHtml.attr('data-sorted-list-uuid', itemUUID);
|
||||
|
||||
setupRemoveButton($container, itemUUID);
|
||||
setupEditButton($container, itemUUID);
|
||||
});
|
||||
const oldItem = $list.find('[data-sorted-list-uuid="' + itemUUID + '"]');
|
||||
parse($container, itemUUID, data, oldItem);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function parse($container, itemUUID, data) {
|
||||
function parse($container, itemUUID, data, replaceEl) {
|
||||
// replaceEl is optional
|
||||
const $list = $container.find('[data-type="list"]');
|
||||
const itemTpl = $container.attr('data-item-template');
|
||||
|
||||
@@ -136,7 +132,11 @@ define('settings/sorted-list', [
|
||||
return new Promise((resolve) => {
|
||||
app.parseAndTranslate(itemTpl, data, function (itemHtml) {
|
||||
itemHtml = $(itemHtml);
|
||||
$list.append(itemHtml);
|
||||
if (replaceEl) {
|
||||
replaceEl.replaceWith(itemHtml);
|
||||
} else {
|
||||
$list.append(itemHtml);
|
||||
}
|
||||
itemHtml.attr('data-sorted-list-uuid', itemUUID);
|
||||
|
||||
setupRemoveButton($container, itemUUID);
|
||||
@@ -148,7 +148,7 @@ define('settings/sorted-list', [
|
||||
|
||||
function stripTags(data) {
|
||||
return Object.entries(data || {}).forEach(([field, value]) => {
|
||||
data[field] = utils.stripHTMLTags(value, utils.stripTags);
|
||||
data[field] = typeof value === 'string' ? utils.stripHTMLTags(value, utils.stripTags) : value;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user