From a0a849f7d15d2c1a2193dfa5015e05cd000a3b96 Mon Sep 17 00:00:00 2001 From: Brian Ernesto Date: Mon, 4 Mar 2024 15:16:41 -0700 Subject: [PATCH 1/7] Updated Selector escapeName to accomodated special characters used in tailwind class names --- src/selector_manager/model/Selector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/selector_manager/model/Selector.ts b/src/selector_manager/model/Selector.ts index a74c0e4e6..9da1d71dd 100644 --- a/src/selector_manager/model/Selector.ts +++ b/src/selector_manager/model/Selector.ts @@ -191,7 +191,7 @@ export default class Selector extends Model Date: Tue, 5 Mar 2024 19:35:38 -0700 Subject: [PATCH 2/7] Prevent comments from being processed when selected in the layers tree. --- src/commands/view/ShowOffset.ts | 4 ++++ src/utils/dom.ts | 3 +++ 2 files changed, 7 insertions(+) diff --git a/src/commands/view/ShowOffset.ts b/src/commands/view/ShowOffset.ts index 2f90c7d6e..a7953aadd 100644 --- a/src/commands/view/ShowOffset.ts +++ b/src/commands/view/ShowOffset.ts @@ -18,6 +18,10 @@ export default { const zoom = this.em.getZoomDecimal(); const el = opt.el as HTMLElement | undefined; + // if (!(el instanceof HTMLElement)) { + // return; + // } + if (!config.showOffsets || !el || isTextNode(el) || (!config.showOffsetsSelected && state == 'Fixed')) { editor.stopCommand(`${this.id}`, opts); return; diff --git a/src/utils/dom.ts b/src/utils/dom.ts index 909ed0344..b99157769 100644 --- a/src/utils/dom.ts +++ b/src/utils/dom.ts @@ -37,6 +37,9 @@ export const attrUp = (el?: HTMLElement, attrs: ObjectAny = {}) => el && el.setAttribute && each(attrs, (value, key) => el.setAttribute(key, value)); export const isVisible = (el?: HTMLElement) => { + if (!el || !(el instanceof HTMLElement)) { + return false; + } return el && !!(el.offsetWidth || el.offsetHeight || el.getClientRects().length); }; From 877ec194c6ebbcde555195498ca5e726cc92e4d8 Mon Sep 17 00:00:00 2001 From: Brian Ernesto Date: Tue, 5 Mar 2024 19:35:38 -0700 Subject: [PATCH 3/7] Prevent comments from being processed when selected in the layers tree. --- src/commands/view/ShowOffset.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/commands/view/ShowOffset.ts b/src/commands/view/ShowOffset.ts index a7953aadd..7e9c1cfa7 100644 --- a/src/commands/view/ShowOffset.ts +++ b/src/commands/view/ShowOffset.ts @@ -18,9 +18,9 @@ export default { const zoom = this.em.getZoomDecimal(); const el = opt.el as HTMLElement | undefined; - // if (!(el instanceof HTMLElement)) { - // return; - // } + if (!(el instanceof HTMLElement)) { + return; + } if (!config.showOffsets || !el || isTextNode(el) || (!config.showOffsetsSelected && state == 'Fixed')) { editor.stopCommand(`${this.id}`, opts); From b5926fdb1298b66a1d5cc705c39f0eb5da8021d5 Mon Sep 17 00:00:00 2001 From: Brian Ernesto Date: Thu, 7 Mar 2024 11:44:46 -0700 Subject: [PATCH 4/7] Address some logic issues in the HTML parser --- src/parser/model/ParserHtml.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/parser/model/ParserHtml.ts b/src/parser/model/ParserHtml.ts index 42482c27a..4f09aba1b 100644 --- a/src/parser/model/ParserHtml.ts +++ b/src/parser/model/ParserHtml.ts @@ -245,7 +245,8 @@ const ParserHtml = (em?: EditorModel, config: ParserConfig & { returnArray?: boo // Throw away empty nodes (keep spaces) if (!opts.keepEmptyTextNodes) { const content = node.nodeValue; - if (content != ' ' && !content!.trim()) { + // Handle all white spaces. This checks for tabs, newlines, and multiple spaces + if (content!.length > 0 && content!.trim() !== '') { continue; } } From 4e9d5c931908fad502e9b1663fce7c56d5155ad6 Mon Sep 17 00:00:00 2001 From: Brian Ernesto Date: Thu, 7 Mar 2024 18:40:40 -0700 Subject: [PATCH 5/7] Revert "Address some logic issues in the HTML parser" This reverts commit b5926fdb1298b66a1d5cc705c39f0eb5da8021d5. --- src/parser/model/ParserHtml.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/parser/model/ParserHtml.ts b/src/parser/model/ParserHtml.ts index 4f09aba1b..42482c27a 100644 --- a/src/parser/model/ParserHtml.ts +++ b/src/parser/model/ParserHtml.ts @@ -245,8 +245,7 @@ const ParserHtml = (em?: EditorModel, config: ParserConfig & { returnArray?: boo // Throw away empty nodes (keep spaces) if (!opts.keepEmptyTextNodes) { const content = node.nodeValue; - // Handle all white spaces. This checks for tabs, newlines, and multiple spaces - if (content!.length > 0 && content!.trim() !== '') { + if (content != ' ' && !content!.trim()) { continue; } } From 6eac780b2fa41dce0bd44ce51b227c6619b300a3 Mon Sep 17 00:00:00 2001 From: devDobby Date: Thu, 23 May 2024 17:14:15 +0200 Subject: [PATCH 6/7] Fix link in asset manager doc (#5899) Closes #5898 Fix link with typescript version --- docs/modules/Assets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/Assets.md b/docs/modules/Assets.md index f0bb5206a..91214c259 100644 --- a/docs/modules/Assets.md +++ b/docs/modules/Assets.md @@ -69,7 +69,7 @@ const editor = grapesjs.init({ ``` -If you want a complete list of available properties check out the source [AssetImage Model](https://github.com/GrapesJS/grapesjs/blob/dev/src/asset_manager/model/AssetImage.js) +If you want a complete list of available properties check out the source [AssetImage Model](https://github.com/GrapesJS/grapesjs/blob/dev/src/asset_manager/model/AssetImage.ts) The built-in Asset Manager modal is implemented and is showing up when requested. By default, you can make it appear by dragging Image Components in canvas, double clicking on images and all other stuff related to images (eg. CSS styling) From 250d5605d8776c4d1852526f77965ba048b7b2cf Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 23 May 2024 20:46:13 +0400 Subject: [PATCH 7/7] Add tests --- src/commands/view/ShowOffset.ts | 7 +------ src/selector_manager/model/Selector.ts | 2 +- test/specs/selector_manager/model/SelectorModels.ts | 4 ++-- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/commands/view/ShowOffset.ts b/src/commands/view/ShowOffset.ts index 7e9c1cfa7..e8c0a588c 100644 --- a/src/commands/view/ShowOffset.ts +++ b/src/commands/view/ShowOffset.ts @@ -1,7 +1,6 @@ import { isUndefined } from 'underscore'; import { CanvasSpotBuiltInTypes } from '../../canvas/model/CanvasSpot'; import { $ } from '../../common'; -import { isTextNode } from '../../utils/dom'; import { CommandObject } from './CommandAbstract'; export default { @@ -18,11 +17,7 @@ export default { const zoom = this.em.getZoomDecimal(); const el = opt.el as HTMLElement | undefined; - if (!(el instanceof HTMLElement)) { - return; - } - - if (!config.showOffsets || !el || isTextNode(el) || (!config.showOffsetsSelected && state == 'Fixed')) { + if (!config.showOffsets || !(el instanceof HTMLElement) || (!config.showOffsetsSelected && state == 'Fixed')) { editor.stopCommand(`${this.id}`, opts); return; } diff --git a/src/selector_manager/model/Selector.ts b/src/selector_manager/model/Selector.ts index 9da1d71dd..afc6f243d 100644 --- a/src/selector_manager/model/Selector.ts +++ b/src/selector_manager/model/Selector.ts @@ -191,7 +191,7 @@ export default class Selector extends Model { let obj: Selector; - const nameToEscape = '@Te s:T*'; - const nameEscaped = '@Te-s:T-'; + const nameToEscape = '@Te sT:*[]().%/+#'; + const nameEscaped = '@Te-sT:-[]().%/+#'; beforeEach(() => { obj = new Selector({});