mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-05 06:37: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 {useStore} from "../store/store.ts";
|
||||||
import {isJSONClean} from "../utils/utils.ts";
|
import {isJSONClean, cleanComments} from "../utils/utils.ts";
|
||||||
import {Trans} from "react-i18next";
|
import {Trans} from "react-i18next";
|
||||||
import {IconButton} from "../components/IconButton.tsx";
|
import {IconButton} from "../components/IconButton.tsx";
|
||||||
import {RotateCw, Save} from "lucide-react";
|
import {RotateCw, Save} from "lucide-react";
|
||||||
|
|
||||||
export const SettingsPage = ()=>{
|
export const SettingsPage = ()=>{
|
||||||
const settingsSocket = useStore(state=>state.settingsSocket)
|
const settingsSocket = useStore(state=>state.settingsSocket)
|
||||||
const settings = useStore(state=>state.settings)
|
const settings = cleanComments(useStore(state=>state.settings))
|
||||||
|
|
||||||
return <div className="settings-page">
|
return <div className="settings-page">
|
||||||
<h1><Trans i18nKey="admin_settings.current"/></h1>
|
<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,
|
let tokenizer = /"|(\/\*)|(\*\/)|(\/\/)|\n|\r/g,
|
||||||
in_string = false,
|
in_string = false,
|
||||||
in_multiline_comment = false,
|
in_multiline_comment = false,
|
||||||
|
@ -49,9 +58,6 @@ const minify = (json: string)=>{
|
||||||
return new_str.join("");
|
return new_str.join("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export const isJSONClean = (data: string) => {
|
export const isJSONClean = (data: string) => {
|
||||||
let cleanSettings = minify(data);
|
let cleanSettings = minify(data);
|
||||||
// this is a bit naive. In theory some key/value might contain the sequences ',]' or ',}'
|
// 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