From 472b24527a76298843571fb5e0556070e4492c12 Mon Sep 17 00:00:00 2001 From: Untone Date: Fri, 25 Jul 2025 09:03:11 +0300 Subject: [PATCH] body-prettier --- package-lock.json | 29 +++++++++++++++++++++++++++-- package.json | 2 ++ panel/routes/shouts.tsx | 1 - panel/ui/HTMLEditor.tsx | 23 ++++++++++++++++++++++- 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6d1ff6bf..7204c36e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "publy-panel", - "version": "0.7.8", + "version": "0.7.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "publy-panel", - "version": "0.7.8", + "version": "0.7.9", "dependencies": { "@solidjs/router": "^0.15.3" }, @@ -18,10 +18,12 @@ "@graphql-codegen/typescript-operations": "^4.6.1", "@graphql-codegen/typescript-resolvers": "^4.5.1", "@types/node": "^24.1.0", + "@types/prettier": "^2.7.3", "@types/prismjs": "^1.26.5", "graphql": "^16.11.0", "graphql-tag": "^2.12.6", "lightningcss": "^1.30.1", + "prettier": "^3.6.2", "prismjs": "^1.30.0", "solid-js": "^1.9.7", "terser": "^5.43.0", @@ -2415,6 +2417,13 @@ "undici-types": "~7.8.0" } }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/prismjs": { "version": "1.26.5", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", @@ -5035,6 +5044,22 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/prismjs": { "version": "1.30.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", diff --git a/package.json b/package.json index bdd101c4..19e81027 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,12 @@ "@graphql-codegen/typescript-operations": "^4.6.1", "@graphql-codegen/typescript-resolvers": "^4.5.1", "@types/node": "^24.1.0", + "@types/prettier": "^2.7.3", "@types/prismjs": "^1.26.5", "graphql": "^16.11.0", "graphql-tag": "^2.12.6", "lightningcss": "^1.30.1", + "prettier": "^3.6.2", "prismjs": "^1.30.0", "solid-js": "^1.9.7", "terser": "^5.43.0", diff --git a/panel/routes/shouts.tsx b/panel/routes/shouts.tsx index ddf16b51..24fddb49 100644 --- a/panel/routes/shouts.tsx +++ b/panel/routes/shouts.tsx @@ -429,7 +429,6 @@ const ShoutsRoute = (props: ShoutsRouteProps) => { >
setSelectedMediaBody(value)} /> - gjl
diff --git a/panel/ui/HTMLEditor.tsx b/panel/ui/HTMLEditor.tsx index db66cfe6..83b2f9f4 100644 --- a/panel/ui/HTMLEditor.tsx +++ b/panel/ui/HTMLEditor.tsx @@ -127,8 +127,11 @@ const HTMLEditor = (props: HTMLEditorProps) => { } if (value.trim()) { + // Форматируем HTML перед экранированием + const formattedValue = formatHTML(value) + // Экранируем HTML для безопасности - const escapedValue = value + const escapedValue = formattedValue .replace(/&/g, '&') .replace(//g, '>') @@ -329,6 +332,24 @@ const HTMLEditor = (props: HTMLEditorProps) => { }, 10) } + const formatHTML = (html: string): string => { + try { + // Простое форматирование с отступами + const lines = html.split(/\n/) + const formattedLines = lines.map((line, index) => { + const trimmedLine = line.trim() + if (trimmedLine.startsWith('<') && !trimmedLine.startsWith(' 0 ? 1 : 0) + trimmedLine + } + return trimmedLine + }) + return formattedLines.join('\n') + } catch (error) { + console.warn('HTML formatting error:', error) + return html + } + } + return (