Quill.js:制作自定义链接格式 - 或 - 具有相同标签名称的自定义格式

2024-03-26

我正在使用鹅毛笔1.0.0-rc.1。如何制作几种不同类型的链接格式?我制作了三种不同类型的链接格式,添加了data-link-type属性。当我创建链接时,一切都很好。但是,当我使用将内容重新加载到编辑器中时pasteHTML,自上次注册的格式获胜tagNames 都是“A”,所以所有data-link-types 设置为resource.

So this:

<p>These are the links: 
  <a href="http://www.google.com" data-link-type="external">External</a> 
  <a href="/resources/3" data-link-type="resource">Resource</a>
  <a href="/pages/12" data-link-type="internal">Internal</a>
</p>

就变成这样了:

<p>These are the links: 
  <a href="http://www.google.com" data-link-type="resource">External</a> 
  <a href="/resources/3" data-link-type="resource">Resource</a>
  <a href="/pages/12" data-link-type="resource">Internal</a>
</p>

我已经包含了一个代码笔:

http://codepen.io/anon/pen/akxNNK http://codepen.io/anon/pen/akxNNK

var Inline = Quill.import('blots/inline');

class ExternalLink extends Inline {
  static create(value) {
    let node = super.create(value);
    value = value.trim();
    if (!value.match(/^http|mailto/)) {
      value = 'http://' + value
    }
    node.setAttribute('href', value);
    node.setAttribute('data-link-type', 'external');
    return node;
  }

  static formats(domNode) {
    return domNode.getAttribute('href');
  }
}

ExternalLink.blotName = 'external_link';
ExternalLink.tagName = 'A';


class InternalLink extends Inline {
  static create(value) {
    let node = super.create(value);
    if (!value.match(/^\/pages\//)) {
      value = '/pages/' + value
    }
    node.setAttribute('href', value);
    node.setAttribute('data-link-type', 'internal');
    return node;
  }

  static formats(domNode) {
    return domNode.getAttribute('href');
  }
}

InternalLink.blotName = 'internal_link';
InternalLink.tagName = 'A';


class ResourceLink extends Inline {
  static create(value) {
    let node = super.create(value);
    if (!value.match(/^\/resources\//)) {
      value = '/resources/' + value
    }
    node.setAttribute('href', value);
    node.setAttribute('data-link-type', 'resource');
    return node;
  }

  static formats(domNode) {
    return domNode.getAttribute('href');
  }
}

ResourceLink.blotName = 'resource_link';
ResourceLink.tagName = 'A';


Quill.register({
  'formats/internal_link': InternalLink,
  'formats/external_link': ExternalLink,
  'formats/resource_link': ResourceLink
});


var quill = new Quill(
  '#editor-container',
  { theme: 'snow' }
);

quill.pasteHTML('<p>These are the links: <a href="http://www.google.com" data-link-type="external">External</a> <a href="/resources/3" data-link-type="resource">Resource</a> <a href="/pages/12" data-link-type="internal">Internal</a></p>');

鹅毛笔可以用tagName and/or className将 DOM 节点映射到其文档模型。只需设置一个属性即可create还不够。这是故意允许额外的属性,如target or rel如果没有设置,则不会为文档贡献有意义的内容(如果属性有意义,那么您将使用归因者 https://github.com/quilljs/parchment#attributors).

这个分叉的CodePen http://codepen.io/quill/pen/VjNaEw您的示例与 className 一起使用。请注意,当不存在类名时,它将使用 tagName,这取决于注册顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Quill.js:制作自定义链接格式 - 或 - 具有相同标签名称的自定义格式 的相关文章

随机推荐