dartlangeditorflutterflutter-appsflutter-examplesflutter-packageflutter-widgetquillquill-deltaquilljsreactquillrich-textrich-text-editorwysiwygwysiwyg-editor
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.8 KiB
58 lines
1.8 KiB
import 'dart:convert' show jsonDecode, jsonEncode; |
|
|
|
/// An object which can be embedded into a Quill document. |
|
/// |
|
/// See also: |
|
/// |
|
/// * [BlockEmbed] which represents a block embed. |
|
class Embeddable { |
|
const Embeddable(this.type, this.data); |
|
|
|
/// The type of this object. |
|
final String type; |
|
|
|
/// The data payload of this object. |
|
final dynamic data; |
|
|
|
Map<String, dynamic> toJson() { |
|
return {type: data}; |
|
} |
|
|
|
static Embeddable fromJson(Map<String, dynamic> json) { |
|
final m = Map<String, dynamic>.from(json); |
|
assert(m.length == 1, 'Embeddable map must only have one key'); |
|
|
|
return Embeddable(m.keys.first, m.values.first); |
|
} |
|
} |
|
|
|
/// There are two built-in embed types supported by Quill documents, however |
|
/// the document model itself does not make any assumptions about the types |
|
/// of embedded objects and allows users to define their own types. |
|
class BlockEmbed extends Embeddable { |
|
const BlockEmbed(super.type, String super.data); |
|
|
|
static const String imageType = 'image'; |
|
static BlockEmbed image(String imageUrl) => BlockEmbed(imageType, imageUrl); |
|
|
|
static const String videoType = 'video'; |
|
static BlockEmbed video(String videoUrl) => BlockEmbed(videoType, videoUrl); |
|
|
|
static const String formulaType = 'formula'; |
|
static BlockEmbed formula(String formula) => BlockEmbed(formulaType, formula); |
|
|
|
static const String customType = 'custom'; |
|
static BlockEmbed custom(CustomBlockEmbed customBlock) => |
|
BlockEmbed(customType, customBlock.toJsonString()); |
|
} |
|
|
|
class CustomBlockEmbed extends BlockEmbed { |
|
const CustomBlockEmbed(super.type, super.data); |
|
|
|
String toJsonString() => jsonEncode(toJson()); |
|
|
|
static CustomBlockEmbed fromJsonString(String data) { |
|
final embeddable = Embeddable.fromJson(jsonDecode(data)); |
|
return CustomBlockEmbed(embeddable.type, embeddable.data); |
|
} |
|
}
|
|
|