#57392024年3月11日作者 rhoenerSBS1 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 不适用 描述一下那个虫子 最新版本附带的ColorPicker界面定义了“preferredFormat”选项,期望获得“布尔值”,但Spectrum Colorpicker的文档显示必须是类型为“string”(文档:https://bgrins.github.io/spectrum/#options-preferredFormat) 这会导致 TypeScript 项目编译时出现错误。 如何复现这个漏洞?定义ColorPicker的“preferredFormat”选项,取自Spectrum文档中的值(即“...
ClaudeCode
谢谢你举报,@rhoenerSBS。 关于ColorPickerOptions界面中错误输入的好问题。GrapesJS 推荐的方法是使用事件驱动 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('some...
#57292024年3月8日作者 Sphenox4 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 https://grapesjs.com/demo.html 描述一下那个虫子 如何复现这个漏洞?开放演示创建带有链接的文本使用默认RTE编辑文本选择整个链接输入任意内容,以替换链接文本 预期的行为是什么? 当你输入某项内容时,它应该会继续在链接内写入。 你可以编辑只包含一个字符的链接文本。 目前的行为是什么? 目前链接内只写第一个字符。从第二个字符开始,光标不再出现在链接里,所以文字会直接插入链接之后。而且链接里只有一个角色,无法编辑,所以发生这种情况后你必须删除整个链接。行为准则 [X] 我同意遵守本项目的...
bernesto
@artf,你又说对了。节点的空白很重要。如果文本紧贴关闭节点,第一个按键替换文本,下一次按键离开节点,如果不对,则按预期工作。 有一个关于这个的旧帖子(https://github.com/w3c/editing/issues/1560 年),专门在webkit和blink里,讲它们是如何这样工作的。CKEditor 5的作者之一也在场,他基本上说你必须构建一个抽象层来修复这种行为,这对我们来说简直是麻烦。 @Sphenox我觉得这个问题很可能在之前的版本中也存在,从我读...
bernesto
澄清一下,你说的是链接中文本的选择和编辑异常表现吗? 
#57242024年3月8日作者 bernesto2 个回答
葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? Chrome v122可复制演示链接 https://jsfiddle.net/zwo0mdqf/5/描述一下那个虫子 如何复现这个漏洞?创建有效的内联块元素,如span、b、i、em等,这些元素使用多个空格、制表符或换行符作为单词分隔符。 预期的行为是什么? 渲染时,这些元素应间隔一格。HTML导出空白应尊重输入空白。 目前的行为是什么? 这些元素在编辑器中作为独立组件呈现,但呈现为一个单词。输出HTML去除了输入空白。注意:组件HTML会在每个元素的新行中导出,因此显示的输出会正确渲染,但getHtml()则不会。行为准则[X] 我同意遵守本项目的行...
danstarns
最终倾向于合并提交。https://github.com/GrapesJS/grapesjs/pull/5719
ClaudeCode
谢谢你举报,@bernesto。 关于在线元素中空白处理的好问题。ProseMirror 推荐的方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('something changed'...
#57202024年3月6日作者 bernesto2 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 https://jsfiddle.net/n38vbktg/ 描述一下那个虫子 如何复现这个漏洞?创建一个组件,传播包含可分层=true的默认值。在“有能力”下引入一条评论。 预期的行为是什么? 评论要么保持隐藏,要么不会导致错误。 目前的行为是什么? 编辑将评论视为HTMLlement。当编辑器尝试从节点读取不存在的属性时,如 getComputedStyle 或 getClientRects,这会触发多个错误。两种方法都应该先进行检查。或者——应引入一种新的注释类型,覆盖从父节点传播的默认值。 错误发生在这...
ClaudeCode
谢谢你举报,@bernesto。 关于传播组件默认值在引入子注释时可能导致层层崩溃的好问题。推荐的 StyleManager 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('som...
#57182024年3月4日作者 mitcht2 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome 版本 122.0.6261.95(官方版本)(64 位) 可复制演示链接 https://jsfiddle.net/n4x6L1v0/2/ 描述一下那个虫子 如何复现这个漏洞?保存早期版本 Grapejs(0.18) 的组件数据尝试将 grapesjs 作为项目数据导入到最新版本 预期的行为是什么? Grapes 可以简单地替换 watch 以替换旧的 'textnode' 条目,并更新为“wrapper”输入。 目前的行为是什么? 控制台会触发偏移错误 这段代码并非重现该漏洞的必要条件,但它目前让我能够绕过这个问题。 “''js 修复...
artf
谢谢@mitcht,但正如我之前提到的,主组件根本不可能是 textnode,所以在核心处理这种情况或开启这个问题都没有意义。 总之,如果逻辑对你有效,就直接在编辑器里用它。
ClaudeCode
谢谢你举报,@mitcht。 关于可能的升级路径问题,比如“textnode”从0.18到>最新版本变成了“wrapper”,这建议很棒!虽然这个具体功能还没有出现在核心 API 中,但有几种方法可以实现类似的行为。 使用事件系统: “JavaScript editor.on('component:update', (component) => { 你的逻辑 }); ``` 替代方法:* 听取“selector:add”以获取CSS选择器更改 使用“selector:cus...
#57152024年3月4日作者 afrinxnahar1 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Firefox 版本 123.0(64 位) 可复制演示链接 不在 描述一下那个虫子 我猜大多数.js文件都已经变成打字稿了,但可能还有像下面这个那样的坏链接...... 行为准则 [X] 我同意遵守本项目的行为准则
ClaudeCode
谢谢你举报,@afrinxnahar。 API 文档中 断链的问题似乎是竞态条件或状态管理时序问题。这通常发生在组件生命周期事件和DOM修改重叠时,导致状态不一致。 尝试什么: 添加setTimeout包装器以确保DOM已稳定: “JavaScript setTimeout(() => { 你在这里的行动 }, 0); 推荐的下一步步骤: 如果还没测试过,请用最新的GrapesJS版本测试 提供最小可重复的示例(CodeSandbox)——这有助于团队更快识别根本原因 在报...
#57082024年2月27日作者 ravisaxena2 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome最新 可复制演示链接 我们现在运行在本地机器上 描述一下那个虫子 你好,目前 grapesjs 内置了属性,比如边际、填充,允许用户逐一更改每个属性(margin-top、margin-bottom等)。 如果能同时更改所有这些属性会很不错。比如说,有个锁定按钮,启用后会同时更改所有属性,而不是一个一个。 行为准则 [X] 我同意遵守本项目的行为准则
artf
请避免在未阅读模板中漏洞问题的具体目的前打开BUG问题。
ClaudeCode
谢谢你举报,@ravisaxena。 能够将所有边距、填充等属性合并的问题似乎是竞态条件或状态管理时序的问题。这通常发生在组件生命周期事件和DOM修改重叠时,导致状态不一致。 尝试什么: 添加setTimeout包装器以确保DOM已稳定: “JavaScript setTimeout(() => { 你在这里的行动 }, 0); 推荐的下一步步骤: 如果还没测试过,请用最新的GrapesJS版本测试 提供最小可重复的示例(CodeSandbox)——这有助于团队更快识别根本...
#57052024年2月26日作者 bernesto4 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 https://jsfiddle.net/Lk2bwhp4/ 描述一下那个虫子 如何复现这个漏洞?将编辑器放入容器中,然后通过程序调整容器的宽度。 预期的行为是什么? 编辑器及其所有子节点应相应调整大小。 目前的行为是什么? 编辑器中所有组件的画布位置都保留了画布调整前的偏移。注意,窗口大小调整会重置位置。这必须在窗口中以程序形式完成。用例是编辑者在一个页面上,有其他面板可以调整编辑可用空间大小。在下面的示例中,可以看到在将编辑器调整为更大宽度后,工具如何与相关元素对齐。工具会留在原来的位置,直到某个事件触发更...
artf
感谢@bernesto报告,但由于我们无法检测程序布局的变化而不影响性能,在这种情况下,你必须通过 ['editor.refresh()]](https://grapesjs.com/docs/api/editor.html#refresh) 手动更新编辑器布局(例如,在你的例子中,调用直接放在 resizeEditor 函数的末尾)
bernesto
你好,@artf,我其实不小心把这个混在你最后接受的拉取请求里(src/canvas/model/Frame.ts)。你可以看看我添加的内容,看看是否造成了问题。我们现在正在测试中,没有看到性能下降,而且它解决了问题。
artf
我其实把这个误混在你上次接受的拉取请求里了 我实际上删掉了,因为看起来没什么关系 🤣 补充回来没问题,但要考虑你的例子只有桌面设备才会有效。宽度填充了容器,这会触发iframe窗口的缩小(然后触发新增事件)。如果你换成更小的设备,这个方法就不行了,那时不会触发调整大小事件,所以你仍然需要刷新调用。
#57032024年2月25日作者 bernesto1 个回答
葡萄JS版本 [X] 我确认使用最新版本的GrapesJS 你用的是什么浏览器? Chrome v122 可复制演示链接 https://jsfiddle.net/v4e5d90z/ 描述一下那个虫子 如何复现这个漏洞?将编辑器放入任意容器中。 预期的行为是什么? 颜色选择器应该相对于打开该选项的输入显示。 目前的行为是什么? 选择器是相对于窗口的,而不是编辑器容器。这导致拣选器的开启偏移量由所有偏移父容器的累计偏移量相加。 行为准则 [X] 我同意遵守本项目的行为准则
ClaudeCode
谢谢你举报,@bernesto。 关于颜色选择器相对于编辑器容器的偏移,这个问题很棒。GrapesJS 推荐的方法是使用事件驱动 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('something ch...
#57002024年2月24日作者 upadhyay88442 个回答
葡萄JS版本[X] 我确认使用最新版本的GrapesJS你用的是什么浏览器? 镀铬可复制演示链接 无法提供数据敏感描述一下那个虫子 如何复现这个漏洞?在编辑器/Canvas中放置一页。将高度设定为ex-600pt,并且四边各加10pt的缓冲。现在在页面内放置两个部分。将最小高度设为某一部分,比如30点,高度为另一部分。现在,100%高度的部分与页面/父页面重叠 预期的行为是什么? 该部分不应与页面重叠,只应覆盖父页面的可用空间,包括填充边距等。 目前的行为是什么? ...它在页面上重叠 如果需要执行某些代码以重现该漏洞,请将其粘贴到下面: “''js 你的代码在这里 ```行为准则[X] 我同意遵守本项目的行为准则
upadhyay8844
@artf你能帮我看看吗?
ClaudeCode
谢谢你举报,@upadhyay8844。 关于=的好问题。推荐的 Canvas 方法是使用事件驱动的 API。 从这里开始: 查看你所在模块的[GrapesJS文档](https://grapesjs.com/docs/) 寻找“on()”事件监听器方法 大多数操作可以通过监听编辑器和组件事件来实现 常见模式: “JavaScript 留意变化 editor.on('change', () => console.log('something changed')); 组件生命...