javascript - Quill Span 印迹格式

标签 javascript css typescript quill parchment

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

export class Track extends Inline {

  static blotName = 'track';
  static tagName = 'span';
  static formats(node) {
    return {
       color: node.getAttribute('color'),
      cid: node.getAttribute('cid'),
      uid: node.getAttribute('uid'),
      name:  node.getAttribute('name')
    };
  }

  static create({name, uid, cid, color}) {
    const node = super.create();
    node.setAttribute('name', name);
    node.setAttribute('uid', uid);
    node.setAttribute('cid', cid);
    node.style.backgroundColor = color;
    return node;
  }
Quill.register(Track);

我已经创建了一个自定义跨度印迹来跟踪鹅毛笔的更改,但每次有新用户时 除了从上一个跨度印迹继承的背景颜色之外,所有属性(即 cid、uid、名称)保持一致。尽管是不同的跨度 Blob ,但我看不到新用户以不同颜色提供的建议。如何在定制的跨度印迹中为不同用户执行内联样式?这就是我在代码中添加作者的方式

 author() {
     this.trackChanges = !this.trackChanges;
     const range = this.editor.quillEditor.getSelection();
     if (range) {
        if (this.trackChanges) {
          this.editor.quillEditor.format('track', {name: this.name, uid: this.id, cid: this.chance.guid(), color: this.color});
        }
    }
  }

最佳答案

请检查以下示例是否可以解决您的问题:

const Inline = Quill.import('blots/inline');
class Track extends Inline {
    static create(value) {
        if (!value) return super.crate(false);

        let node = super.create(value);
        node.setAttribute('data-name', value.name);
        node.setAttribute('data-uid', value.uid);
        node.setAttribute('data-cid', value.cid);

        if(value.group === 1) {
            node.classList.add('highlight-1');
        }
        else if (value.group === 2) {
            node.classList.add('highlight-2');
        }
        // else if...

        return node;
    }
    // Overriding this method, in this particular case,
    // is what causes the Delta returned as content by 
    // Quill to have the desired information.
    static formats(domNode) {
        if (domNode.getAttribute('data-cid') &&
            domNode.getAttribute('data-uid') &&
            domNode.getAttribute('data-name')) {
            return { 
                'name': domNode.getAttribute('data-name') , 
                'cid': domNode.getAttribute('data-cid') ,
                'uid': domNode.getAttribute('data-uid')
            };
        }
        else {
            return super.formats(domNode);
        }
    }

    formats() {
        // Returns the formats list this class (this format).
        let formats = super.formats();

        // Inline has the domNode reference, which in this 
        // case represents the SPAN, result defined in tagName.
        formats['track'] = Track.formats(this.domNode);

        // In the code above, it is as if we are adding this new format.
        return formats;
    }
}
Track.tagName = 'SPAN';
Track.blotName = 'track';
Quill.register('formats/track', Track);

var toolbarOptions = {
    container: [['bold' , 'italic' , 'underline' , 'strike'] , ['track' , 'clean']],
    handlers: {
      'track': () => {
        var range = quill.getSelection();
        var valueExample = {
          name: 'Foo',
          uid: 10,
          cid: 20,
          group: 1
        };
        
        quill.formatText(range , 'track' , valueExample);
      }
    }
};

var quill = new Quill('#editor', {
    theme: 'snow',
    modules: {
      toolbar: toolbarOptions
    }
});

window.quill = quill;
.highlight-1 {
  background: green;
}

.highlight-2 {
  background: orange;
}
<!-- Quill Stylesheet -->
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">

<!-- Quill lib -->
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>

<h3>Instructions:</h3>
<ol>
<li>Select a portion of text.</li>
<li>Click the invisible button.</li>
<li>Change the group value to 2.</li>
<li>Click the invisible button again.</li>
<li>Don't forget to check the generated HTML structure, as well as the editor's Delta.</li>
</ol>
<!-- Create the editor container -->
<div id="editor">
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris pharetra, tellus id commodo consectetur, urna tellus varius enim, nec hendrerit turpis diam eu erat. Ut eleifend enim et accumsan fringilla.</p>
</div>

另外别忘了看看this address 。您会发现很多有用的信息。

关于javascript - Quill Span 印迹格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830008/

相关文章:

typescript - Jasmine Spec Helpers 未加载

javascript - 将最后滚动的标题粘贴到视口(viewport)的顶部?

javascript - 即使为 false 也执行 if 语句

javascript - 如何设置正确的 src 路径(GET localhost 获取 404(未找到))?

javascript - SlideShow 悬停在左侧,向右移动图像

html - 嵌套 div 的流体高度

javascript - 在没有 authguard 的情况下禁用 Angular 7 中的 url 更改导航或直接页面访问?

javascript - 向服务器发送二进制数据

javascript - 搜索特定文本的类并返回条目号

javascript - 如何在 TypeScript 中将 JSON 对象转换为另一个对象