所见即所得 HTML 不尝试修复错误的编辑器 HTML

WYSIWYG HTML editor that doesn't try and fix bad HTML

我需要一个可以编辑 PHP Blade and Handlebars* templates. I've tried TinyMCE, CKEditor and bootstrap wysihtml5 的所见即所得 HTML 编辑器,但它们都 "fix" 我无效 HTML。谁能提出替代方案?

我需要能够在所见即所得和源代码模式之间切换,而无需更改以下内容。

<table>
  <thead>
    <tr>
      <tr>Column 1</tr>
      <tr>Column 2</tr>
    </tr>
  </thead>
  <tbody>
  @foreach ($data as $datum)
    <tr>
      <td>{{ $datum->col1 }}</td>
      <td>{{ $datum->col2 }}</td>
    </tr>
  @endforeach
  </tbody>
</table>

我发现的所有编辑器都会删除 @foreach,有时也会破坏 table。我不太在意 "visual" 模式是否损坏,但我需要 HTML 保持不变。

*我在 Handlebars 变量前加上 $ 以便它们与 blade 模板广泛兼容。

您可以为此使用 CKEditor,但是您必须定义您不希望编辑器修复的代码部分。

CKEditor 具有 protectedSource 功能,您可以使用它来定义编辑器不应触及的源代码部分,即使它们无效 HTML.

我已经创建了一个示例,可以与您的 @foreach 循环和您示例中的变量一起使用。您可以使用它并对其进行增强以满足您的需求:

CKEDITOR.editorConfig = function( config ) {
    ....
    ....
    config.protectedSource.push( /@foreach.*/g );
    config.protectedSource.push( /@endforeach.*/g );
    config.protectedSource.push( /{{.*}}/g );
}

这是一个有效的 fiddle 您可以查看:https://jsfiddle.net/0tw75xt3/

Note that I changed the

<tr> <tr>Column 1</tr> <tr>Column 2</tr> </tr>

since it's not a valid HTML and I guessed it wasn't supposed to be <tr><tr>

如果您想支持更复杂的模板,您将需要在 protectedSource 中使用一些更复杂的正则表达式,但这确实可以为您提供一个很好的起点。

我找到了一些用于 React 的所见即所得编辑器。

Pagedraw 在 YouTube.com、https://www.youtube.com/watch?v=NjH3koR1E6w

上的演示

我在 https://medium.com/@vlascik/ember-in-the-middle-of-2019-the-good-the-bad-the-ugly-hopefully-d641cc73d6d1:

中读到了有关组件所见即所得编辑的想法

Pinegrow 在文档中明确否认这一点,https://pinegrow.com/docs/pages/pages.html#formats

我看到有人试图让 Handlebars 与 GrapesJS 一起工作,但最终没有结果,https://github.com/artf/grapesjs/issues/1162