Я пытаюсь внедрить текстовый редактор в свое веб-приложение next.js. Я использовал текстовый редактор quill, а также средство форматирования quill-blot-formatter для изменения размера/выравнивания изображений. Изменение размера работает нормально, но выравнивание по левому, правому или центру не перемещает изображение при нажатии на значок. Я не знаю, почему, я взглянул на консоль после того, как, например, щелкнул вправо - чтобы увидеть, возможно, мой CSS-файл каким-то образом повлиял на нее - но на этом изображении не было выравнивания CSS.
Соответствующие части кода (page.ts):
"use client";
import React, { useState, useRef, useEffect, useMemo } from "react";
import dynamic from "next/dynamic";
import { debounce } from "lodash";
import { Undo, Redo, Eye, X, Image as ImageIcon } from "lucide-react";
import "react-quill-new/dist/quill.snow.css";
import Quill from "quill";
import { toast } from "react-hot-toast";
import "./styles.css";
import BlotFormatter2 from "@enzedonline/quill-blot-formatter2";
const ReactQuill = dynamic(
async () => {
const { default: RQ } = await import("react-quill-new");
const Quill = await import("quill");
const ImageDrop = require("quill-image-drop-module").ImageDrop;
Quill.default.register("modules/blotFormatter2", BlotFormatter2);
Quill.default.register("modules/imageDrop", ImageDrop);
const CustomImage = (await import("./CustomImage")).default;
Quill.default.register(CustomImage, true);
return function ForwardRefQuill(props: any) {
return ;
};
},
{
ssr: false,
loading: () => (
Loading editor...
),
}
);
Модули:
const modules = useMemo(
() => ({
toolbar: {
container: [
[{ header: [1, 2, 3, false] }],
["bold", "italic", "underline", "strike", "blockquote"],
[{ list: "ordered" }, { list: "bullet" }],
[{ color: [] }, { background: [] }],
[{ indent: "-1" }, { indent: "+1" }],
[{ align: [] }],
["link", "image"],
["clean"],
],
handlers: { image: imageHandler },
},
history: {
delay: 1000,
maxStack: 100,
userOnly: false,
},
imageDrop: true,
blotFormatter2: {
align: {
allowAligning: true,
alignments: ["left", "center", "right"],
},
resize: { allowResizing: true },
image: { allowAltTitleEdit: true, allowLinkEdit: false },
},
}),
[imageRadius]
);
ReactQuill:
{
if (source === "user") debouncedUpdate(value);
}}
placeholder="Write something amazing..."
modules={modules}
formats={formats}
theme="snow"
className="rounded-lg shadow-sm"
/>
CustomImage.ts:
import Quill from 'quill';
interface EmbedConstructor {
new (): any;
create: (value: any) => HTMLElement;
value?: (node: HTMLElement) => any;
}
const QuillBlockEmbed = Quill.import('blots/block/embed') as unknown;
const BlockEmbed = QuillBlockEmbed as EmbedConstructor;
class CustomImage extends (BlockEmbed as any) {
static blotName = 'image';
static tagName = 'img';
static create(value: any) {
const node = (super.create as (value: any) => HTMLElement)(value);
if (typeof value === 'string') {
node.setAttribute('src', value);
} else {
Object.keys(value).forEach((key) => {
node.setAttribute(key, value[key]);
});
}
return node;
}
static value(node: HTMLElement) {
const attributes: Record = {};
const attrs = Array.from(node.attributes) as Attr[];
attrs.forEach((attr) => {
attributes[attr.name] = attr.value;
});
return attributes;
}
}
export default CustomImage;
styles.css:
/* Image alignment */
.ql-align-center img, img.ql-align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.ql-align-right img, img.ql-align-right {
display: block;
margin-left: auto;
margin-right: 0;
}
.ql-align-left img, img.ql-align-left {
display: block;
margin-left: 0;
margin-right: auto;
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... e-aligning
Проблема с редактором Quill / форматером Quill Blot при выравнивании изображения ⇐ Html
Программисты Html
1761714841
Anonymous
Я пытаюсь внедрить текстовый редактор в свое веб-приложение next.js. Я использовал текстовый редактор quill, а также средство форматирования quill-blot-formatter для изменения размера/выравнивания изображений. Изменение размера работает нормально, но выравнивание по левому, правому или центру не перемещает изображение при нажатии на значок. Я не знаю, почему, я взглянул на консоль после того, как, например, щелкнул вправо - чтобы увидеть, возможно, мой CSS-файл каким-то образом повлиял на нее - но на этом изображении не было выравнивания CSS.
[b]Соответствующие части кода (page.ts):[/b]
"use client";
import React, { useState, useRef, useEffect, useMemo } from "react";
import dynamic from "next/dynamic";
import { debounce } from "lodash";
import { Undo, Redo, Eye, X, Image as ImageIcon } from "lucide-react";
import "react-quill-new/dist/quill.snow.css";
import Quill from "quill";
import { toast } from "react-hot-toast";
import "./styles.css";
import BlotFormatter2 from "@enzedonline/quill-blot-formatter2";
const ReactQuill = dynamic(
async () => {
const { default: RQ } = await import("react-quill-new");
const Quill = await import("quill");
const ImageDrop = require("quill-image-drop-module").ImageDrop;
Quill.default.register("modules/blotFormatter2", BlotFormatter2);
Quill.default.register("modules/imageDrop", ImageDrop);
const CustomImage = (await import("./CustomImage")).default;
Quill.default.register(CustomImage, true);
return function ForwardRefQuill(props: any) {
return ;
};
},
{
ssr: false,
loading: () => (
Loading editor...
),
}
);
Модули:
const modules = useMemo(
() => ({
toolbar: {
container: [
[{ header: [1, 2, 3, false] }],
["bold", "italic", "underline", "strike", "blockquote"],
[{ list: "ordered" }, { list: "bullet" }],
[{ color: [] }, { background: [] }],
[{ indent: "-1" }, { indent: "+1" }],
[{ align: [] }],
["link", "image"],
["clean"],
],
handlers: { image: imageHandler },
},
history: {
delay: 1000,
maxStack: 100,
userOnly: false,
},
imageDrop: true,
blotFormatter2: {
align: {
allowAligning: true,
alignments: ["left", "center", "right"],
},
resize: { allowResizing: true },
image: { allowAltTitleEdit: true, allowLinkEdit: false },
},
}),
[imageRadius]
);
ReactQuill:
{
if (source === "user") debouncedUpdate(value);
}}
placeholder="Write something amazing..."
modules={modules}
formats={formats}
theme="snow"
className="rounded-lg shadow-sm"
/>
[b]CustomImage.ts:[/b]
import Quill from 'quill';
interface EmbedConstructor {
new (): any;
create: (value: any) => HTMLElement;
value?: (node: HTMLElement) => any;
}
const QuillBlockEmbed = Quill.import('blots/block/embed') as unknown;
const BlockEmbed = QuillBlockEmbed as EmbedConstructor;
class CustomImage extends (BlockEmbed as any) {
static blotName = 'image';
static tagName = 'img';
static create(value: any) {
const node = (super.create as (value: any) => HTMLElement)(value);
if (typeof value === 'string') {
node.setAttribute('src', value);
} else {
Object.keys(value).forEach((key) => {
node.setAttribute(key, value[key]);
});
}
return node;
}
static value(node: HTMLElement) {
const attributes: Record = {};
const attrs = Array.from(node.attributes) as Attr[];
attrs.forEach((attr) => {
attributes[attr.name] = attr.value;
});
return attributes;
}
}
export default CustomImage;
[b]styles.css:[/b]
/* Image alignment */
.ql-align-center img, img.ql-align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
.ql-align-right img, img.ql-align-right {
display: block;
margin-left: auto;
margin-right: 0;
}
.ql-align-left img, img.ql-align-left {
display: block;
margin-left: 0;
margin-right: auto;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79734788/quill-editor-quill-blot-formatter-issue-with-image-aligning[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия