mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-04 22:27:10 -04:00
Add new function to remove the comments from the settings file.
It reduces the size of the payload when we save on the admin page `.../admin/settings`
This commit is contained in:
parent
ed55018e1f
commit
01f75221ce
3 changed files with 50 additions and 6 deletions
|
@ -1,12 +1,12 @@
|
|||
import {useStore} from "../store/store.ts";
|
||||
import {isJSONClean} from "../utils/utils.ts";
|
||||
import {isJSONClean, cleanComments} from "../utils/utils.ts";
|
||||
import {Trans} from "react-i18next";
|
||||
import {IconButton} from "../components/IconButton.tsx";
|
||||
import {RotateCw, Save} from "lucide-react";
|
||||
|
||||
export const SettingsPage = ()=>{
|
||||
const settingsSocket = useStore(state=>state.settingsSocket)
|
||||
const settings = useStore(state=>state.settings)
|
||||
const settings = cleanComments(useStore(state=>state.settings))
|
||||
|
||||
return <div className="settings-page">
|
||||
<h1><Trans i18nKey="admin_settings.current"/></h1>
|
||||
|
|
|
@ -1,5 +1,14 @@
|
|||
const minify = (json: string)=>{
|
||||
export const cleanComments = (json: string|undefined)=>{
|
||||
if (json !== undefined){
|
||||
json = json.replace(/\/\*.*?\*\//g, ""); // remove single line comments
|
||||
json = json.replace(/ *\/\*.*(.|\n)*?\*\//g, ""); // remove multi line comments
|
||||
json = json.replace(/[ \t]+$/gm, ""); // trim trailing spaces
|
||||
json = json.replace(/^(\n)/gm, ""); // remove empty lines
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
export const minify = (json: string)=>{
|
||||
let tokenizer = /"|(\/\*)|(\*\/)|(\/\/)|\n|\r/g,
|
||||
in_string = false,
|
||||
in_multiline_comment = false,
|
||||
|
@ -49,9 +58,6 @@ const minify = (json: string)=>{
|
|||
return new_str.join("");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
export const isJSONClean = (data: string) => {
|
||||
let cleanSettings = minify(data);
|
||||
// this is a bit naive. In theory some key/value might contain the sequences ',]' or ',}'
|
||||
|
|
38
src/tests/backend/specs/admin_utils.ts
Normal file
38
src/tests/backend/specs/admin_utils.ts
Normal file
|
@ -0,0 +1,38 @@
|
|||
'use strict';
|
||||
|
||||
|
||||
import {strict as assert} from "assert";
|
||||
import {cleanComments, minify} from "../../../../admin/src/utils/utils.js";
|
||||
|
||||
const fs = require('fs');
|
||||
const fsp = fs.promises;
|
||||
let template:string;
|
||||
|
||||
describe(__filename, function () {
|
||||
before(async function () {
|
||||
template = await fsp.readFile('../settings.json.template', 'utf8')
|
||||
});
|
||||
describe('adminUtils', function () {
|
||||
it('cleanComments function empty', async function () {
|
||||
assert.equal(cleanComments(""), "");
|
||||
});
|
||||
it('cleanComments function HelloWorld no comment', async function () {
|
||||
assert.equal(cleanComments("HelloWorld"), "HelloWorld");
|
||||
});
|
||||
it('cleanComments function HelloWorld with comment', async function () {
|
||||
assert.equal(cleanComments("Hello/*abc*/World/*def*/"), "HelloWorld");
|
||||
});
|
||||
it('cleanComments function HelloWorld with comment and multiline', async function () {
|
||||
assert.equal(cleanComments("Hello \n/*abc\nxyz*/World/*def*/"), "Hello\nWorld");
|
||||
});
|
||||
it('cleanComments function HelloWorld with multiple line breaks', async function () {
|
||||
assert.equal(cleanComments(" \nHello \n \n \nWorld/*def*/"), "Hello\nWorld");
|
||||
});
|
||||
it('cleanComments function same after minified', async function () {
|
||||
assert.equal(minify(template), minify(cleanComments(template)!));
|
||||
});
|
||||
it('minified results are smaller', async function () {
|
||||
assert.equal(minify(template).length < template.length, true);
|
||||
});
|
||||
});
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue