- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 React-Quill 中创建自定义样式属性?我想为我的 Twitter Blot 添加比对功能。我正在尝试使用 display flex 和 justify content 属性来对齐。我无法实现它。
这是我尝试创建自定义属性的方式:
const Parchment = Quill.import('parchment');
const config = {
scope: Parchment.Scope.BLOCK,
whitelist: ['flex', 'block', 'inline-block'],
};
const DisplayAttribute = new Parchment.Attributor.Attribute('display', 'display', config);
const DisplayClass = new Parchment.Attributor.Class('display', 'ql-display', config);
const DisplayStyle = new Parchment.Attributor.Style('display', 'display', config);
const configII = {
scope: Parchment.Scope.BLOCK,
whitelist: ['flex-start', 'center', 'flex-end'],
};
const JustifyContentAttribute = new Parchment.Attributor.Attribute('justify-content', 'justify-content', configII);
const JustifyContentClass = new Parchment.Attributor.Class('justify-content', 'ql-justify-content', configII);
const JustifyContentStyle = new Parchment.Attributor.Style('justify-content', 'justify-content', configII);
Quill.register({
'attributors/attribute/display': DisplayAttribute
});
Quill.register({
'attributors/class/display': DisplayClass
});
Quill.register({
'attributors/style/display': DisplayStyle
});
Quill.register({
'formats/display': DisplayClass
});
Quill.register({
'attributors/attribute/justify-content': JustifyContentAttribute
});
Quill.register({
'attributors/class/justify-content': JustifyContentClass
});
Quill.register({
'attributors/style/justify-content': JustifyContentStyle
});
Quill.register({
'formats/justify-content': JustifyContentClass
});
这是我的 Twitter Blot:
import ReactQuill from 'react-quill';
// eslint-disable-next-line prefer-destructuring
const Quill = ReactQuill.Quill;
const BlockEmbed = Quill.import('blots/block/embed');
const ATTRIBUTES = ['display', 'justify-content'];
class TwitterBlot extends BlockEmbed {
static create(obj) {
const node = super.create();
node.setAttribute('contenteditable', 'false');
node.setAttribute('id', obj.id);
node.dataset.id = obj.id;
node.dataset.url = obj.url;
node.dataset.html = obj.html;
node.dataset.type = obj.type;
node.setAttribute('display', 'flex');
node.setAttribute('justify-content', 'flex-start');
const innerDiv = document.createElement('div');
innerDiv.innerHTML = obj.html;
innerDiv.classList.add('disablePointerEvents');
if (obj.type === 'timeline') {
const timelineCss = `
height: 600px;
width: 500px;
overflow-x: hidden;
overflow-y: scroll;
border: 1px solid #ccc;
`;
innerDiv.setAttribute('style', timelineCss);
}
// node.setAttribute('style', 'display: flex; justify-content: center;');
node.appendChild(innerDiv);
return node;
}
static value(domNode) {
return {
id: domNode.dataset.id,
url: domNode.dataset.url,
html: domNode.dataset.html,
type: domNode.dataset.type,
};
}
formats() {
twttr.widgets.load();
}
static formats(domNode) {
// We still need to report unregistered embed formats
return ATTRIBUTES.reduce((formats, attribute) => {
if (domNode.hasAttribute(attribute)) {
// eslint-disable-next-line no-param-reassign
formats[attribute] = domNode.getAttribute(attribute);
}
return formats;
}, {});
}
format(name, value) {
if (ATTRIBUTES.indexOf(name) > -1) {
if (value) {
this.domNode.setAttribute(name, value);
} else {
this.domNode.removeAttribute(name);
}
} else {
super.format(name, value);
}
}
}
TwitterBlot.blotName = 'tweet';
TwitterBlot.tagName = 'div';
TwitterBlot.className = 'tweet';
export default TwitterBlot;
我只是尝试通过更改印迹的 onClick 函数的对齐方式来测试它
handleEmbedsFormat(e) {
DisplayAttribute.add(e.target, 'flex');
JustifyContentAttribute.add(e.target, 'center');
console.log('---e', e.target);
}
我可以使用普通的 DOM 方法和内联样式对齐印迹。但这种变化并没有反射(reflect)在我的增量中。因此,我试图创建一个自定义属性。我没有找到任何例子。
有人能指出我正确的方向吗?
最佳答案
Parchment 文档 ( Class and Style Attributors ) 中建议的用于注册 Attributor
的方法建议只使用名称(而不是像您的示例中那样使用具有路径键的对象) :
Quill.register(DisplayAttribute);
这是一个正在运行的演示(SpanWrapper
/sw
属性):
Parchment = Quill.import('parchment');
let config = { scope: Parchment.Scope.BLOCK };
let SpanWrapper = new Parchment.Attributor.Class('span-wrapper', 'span', config);
Quill.register(SpanWrapper, true)
var toolbarOptions = [
[{ "header": [false, 1, 2, 3, 4, 5, 6]}, "bold", "italic"],
["blockquote", "code-block", "link", "span-wrapper"]
];
var icons = Quill.import('ui/icons');
icons['span-wrapper'] = 'sw';
var quill = new Quill("#editor-container", {
modules: {
toolbar: {
container: toolbarOptions,
handlers: {
'span-wrapper': function() {
var range = quill.getSelection();
var format = quill.getFormat(range);
if (!format['span-wrapper']) {
quill.format('span-wrapper', 'wrapper');
} else {
quill.removeFormat(range.index, range.index + range.length);
}
}
}
}
},
theme: "snow"
});
#editor-container {
height: 375px;
}
.ql-editor .span-wrapper {
background-color: #F8F8F8;
border: 1px solid #CCC;
line-height: 19px;
padding: 6px 10px;
border-radius: 3px;
margin: 15px 0;
}
<link href="//cdn.quilljs.com/1.2.4/quill.snow.css" rel="stylesheet" />
<script src="//cdn.quilljs.com/1.2.4/quill.js"></script>
<div id="editor-container"></div>
关于reactjs - 在 quill js 中创建自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53625555/
假设我想要一个 AtomicText类似于默认 Link 的印迹印迹但不可变,只能作为一个整体删除。进一步来说: 光标可以在AtomicText的字符之间. 可以选择 AtomicText 的部分内容
我正在使用 Quill 编辑器。到目前为止还不错。我的问题是有什么方法可以通过工具栏中的按钮使 Quill Editor 全屏显示(一种无干扰模式)? 如果不是,我该如何继续自己实现? 最佳答案 要全
我知道在 Quill 编辑器的实例化中,有一个占位符选项。有没有办法在编辑器实例化后动态更改这个占位符? 最佳答案 占位符使用 CSS 规则实现: .ql-editor::before { co
我有一个显示富文本数据的模板。当用户单击编辑时,我将模板转换为可编辑的 Quill 编辑器,如下所示: 'click #editNote': (e, t) -> note = t.find
刚开始使用 Quill 并发现它非常有用。我的项目需要纯文本编辑。具体来说,我使用 quill 作为输入 YAML 代码的表单。破折号“-”是 YAML 中的关键项。问题是 Quill 自动将行格式化
我正在尝试在 quill 编辑器的特定位置插入 anchor 文本。 var fullEditor = new Quill('#m_wiki_textarea', { m
我正在尝试向 Quill 编辑器工具栏添加对齐按钮。 工具栏documentation不是很详细。它展示了如何选择对齐选项,但我想要一组并排的切换按钮。这可能吗? 最佳答案 您可以执行 align:
我正在尝试自定义 Quill editor满足我的需要。我设法实现并插入自定义印迹,如 https://quilljs.com/guides/cloning-medium-with-parchment
我有一个将 Quill 编辑器的内容发布到 PHP 脚本的表单。然后 PHP 脚本将文本保存到数据库中。以后可以将相同的文本加载到 Quill 编辑器中。这一切工作正常并按预期显示。 仅供引用,我使用
是否可以使用 Quill (link) 打印文档或导出为 pdf。如果是这样,怎么办? 最佳答案 不属于 Quill core . 您必须编写一个自定义模块来将 Quill 的 Delta 或原始 H
我必须创建在线文字编辑器,其中包括基本格式、内联注释。为此,我使用 quill.js 编辑器,但无法在 quill.js 编辑器中添加注释。 最佳答案 就我而言,我为此创建了一个自定义解决方案。下面是
我们如何在 Quill.js 中创建新主题?我们是否必须扩展现有的? 我只想更新外观,而不是功能,所以理论上我可以为默认的 Snow 主题添加一堆覆盖,但这并不理想。 那么 - 我们如何以及在哪里创建
我想防止 Quill 编辑器中的工具栏按钮具有 tabindex。我怎样才能做到这一点? 最佳答案 Quill 提供了两种获取 toolbar 的方法位于定制范围的两端。一种是您传入一组您想要的格式,
我正在使用最新版本的 quill.js,并且想知道是否有一种方法可以覆盖 Quill 在生成编辑器工具栏时使用的 svg 图标(对于气泡主题,如果这很重要。) 我试过四处寻找,看看在源代码中定义图标的
我已经成功地在 angular 7 中设置了 ngx-quill,我需要创建一个自定义文本印迹,它看起来如下(简化): ... /*** Custom blot: [its editable text
更新:当我意识到 PrimeNg 有一个 quill 实现并且我已经在使用 PrimeNg 时,我放弃了。起初没有工作,但升级到 angular 7 和 ngrx 7 beta 修复了问题。 http
我正在使用 angular 4 和 quill 编辑器。但我收到了 quill Invalid Quill container 的错误消息.我更改了容器的名称,但它仍然返回错误并且无法识别容器 ID。
如何将 Delta 转换为纯 HTML?我使用 Quill 作为富文本编辑器,但我不确定如何在 HTML 上下文中显示现有的 Delta。创建多个 Quill 实例是不合理的,但我想不出更好的方法。
标题可能会产生误导,但我不知道如何更好地命名它。我想要实现的是像 twitter-widget 一样嵌入我的自定义印迹。为此,我创建了示例“渲染器”类: class TestRenderer {
我创建了一种将 Quill 文本保存到数据库的方法。每次用户单击已保存的文档时,它都会从数据库中提取已保存的 Quill 文本,并将文本显示在 Quill 文本编辑器中。此时,如果我触发撤消功能,它将
我是一名优秀的程序员,十分优秀!