Skip to content

Commit 51dbd2c

Browse files
committed
content [nfc]: s/image/image preview/, making room for new "inline image"
The API doc is being updated to distinguish the current "image preview" content node from a new one, "image element presented in Markdown syntax", which I think we'll just call "inline image". See PR in progress: zulip/zulip#36226 Related: #1913
1 parent c86a5d8 commit 51dbd2c

File tree

6 files changed

+163
-162
lines changed

6 files changed

+163
-162
lines changed

lib/model/content.dart

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -524,19 +524,19 @@ class MathBlockNode extends MathNode implements BlockContentNode {
524524
});
525525
}
526526

527-
class ImageNodeList extends BlockContentNode {
528-
const ImageNodeList(this.images, {super.debugHtmlNode});
527+
class ImagePreviewNodeList extends BlockContentNode {
528+
const ImagePreviewNodeList(this.imagePreviews, {super.debugHtmlNode});
529529

530-
final List<ImageNode> images;
530+
final List<ImagePreviewNode> imagePreviews;
531531

532532
@override
533533
List<DiagnosticsNode> debugDescribeChildren() {
534-
return images.map((node) => node.toDiagnosticsNode()).toList();
534+
return imagePreviews.map((node) => node.toDiagnosticsNode()).toList();
535535
}
536536
}
537537

538-
class ImageNode extends BlockContentNode {
539-
const ImageNode({
538+
class ImagePreviewNode extends BlockContentNode {
539+
const ImagePreviewNode({
540540
super.debugHtmlNode,
541541
required this.srcUrl,
542542
required this.thumbnailUrl,
@@ -574,7 +574,7 @@ class ImageNode extends BlockContentNode {
574574

575575
@override
576576
bool operator ==(Object other) {
577-
return other is ImageNode
577+
return other is ImagePreviewNode
578578
&& other.srcUrl == srcUrl
579579
&& other.thumbnailUrl == thumbnailUrl
580580
&& other.loading == loading
@@ -583,7 +583,7 @@ class ImageNode extends BlockContentNode {
583583
}
584584

585585
@override
586-
int get hashCode => Object.hash('ImageNode',
586+
int get hashCode => Object.hash('ImagePreviewNode',
587587
srcUrl, thumbnailUrl, loading, originalWidth, originalHeight);
588588

589589
@override
@@ -1368,7 +1368,7 @@ class _ZulipContentParser {
13681368

13691369
static final _imageDimensionsRegExp = RegExp(r'^(\d+)x(\d+)$');
13701370

1371-
BlockContentNode parseImageNode(dom.Element divElement) {
1371+
BlockContentNode parseImagePreviewNode(dom.Element divElement) {
13721372
final elements = () {
13731373
assert(divElement.localName == 'div'
13741374
&& divElement.className == 'message_inline_image');
@@ -1397,7 +1397,7 @@ class _ZulipContentParser {
13971397
return UnimplementedBlockContentNode(htmlNode: divElement);
13981398
}
13991399
if (imgElement.className == 'image-loading-placeholder') {
1400-
return ImageNode(
1400+
return ImagePreviewNode(
14011401
srcUrl: href,
14021402
thumbnailUrl: null,
14031403
loading: true,
@@ -1450,7 +1450,7 @@ class _ZulipContentParser {
14501450
}
14511451
}
14521452

1453-
return ImageNode(
1453+
return ImagePreviewNode(
14541454
srcUrl: srcUrl,
14551455
thumbnailUrl: thumbnailUrl,
14561456
loading: false,
@@ -1875,7 +1875,7 @@ class _ZulipContentParser {
18751875
}
18761876

18771877
if (localName == 'div' && className == 'message_inline_image') {
1878-
return parseImageNode(element);
1878+
return parseImagePreviewNode(element);
18791879
}
18801880

18811881
if (localName == 'div') {
@@ -1928,10 +1928,10 @@ class _ZulipContentParser {
19281928
List<BlockContentNode> parseImplicitParagraphBlockContentList(dom.NodeList nodes) {
19291929
final List<BlockContentNode> result = [];
19301930

1931-
List<ImageNode> imageNodes = [];
1932-
void consumeImageNodes() {
1933-
result.add(ImageNodeList(imageNodes));
1934-
imageNodes = [];
1931+
List<ImagePreviewNode> imagePreviewNodes = [];
1932+
void consumeImagePreviewNodes() {
1933+
result.add(ImagePreviewNodeList(imagePreviewNodes));
1934+
imagePreviewNodes = [];
19351935
}
19361936

19371937
final List<dom.Node> currentParagraph = [];
@@ -1953,14 +1953,14 @@ class _ZulipContentParser {
19531953
if (node case dom.Element(localName: 'p', className: '', nodes: [
19541954
dom.Element(localName: 'span', className: 'katex-display'), ...])) {
19551955
if (currentParagraph.isNotEmpty) consumeParagraph();
1956-
if (imageNodes.isNotEmpty) consumeImageNodes();
1956+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
19571957
parseMathBlocks(node.nodes, result);
19581958
continue;
19591959
}
19601960

19611961
if (_isPossibleInlineNode(node)) {
1962-
if (imageNodes.isNotEmpty) {
1963-
consumeImageNodes();
1962+
if (imagePreviewNodes.isNotEmpty) {
1963+
consumeImagePreviewNodes();
19641964
// In a context where paragraphs are implicit it should be impossible
19651965
// to have more paragraph content after image previews.
19661966
result.add(UnimplementedBlockContentNode(htmlNode: node));
@@ -1971,15 +1971,15 @@ class _ZulipContentParser {
19711971
}
19721972
if (currentParagraph.isNotEmpty) consumeParagraph();
19731973
final block = parseBlockContent(node);
1974-
if (block is ImageNode) {
1975-
imageNodes.add(block);
1974+
if (block is ImagePreviewNode) {
1975+
imagePreviewNodes.add(block);
19761976
continue;
19771977
}
1978-
if (imageNodes.isNotEmpty) consumeImageNodes();
1978+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
19791979
result.add(block);
19801980
}
19811981
if (currentParagraph.isNotEmpty) consumeParagraph();
1982-
if (imageNodes.isNotEmpty) consumeImageNodes();
1982+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
19831983
return result;
19841984
}
19851985

@@ -1988,10 +1988,10 @@ class _ZulipContentParser {
19881988
List<BlockContentNode> parseBlockContentList(dom.NodeList nodes) {
19891989
final List<BlockContentNode> result = [];
19901990

1991-
List<ImageNode> imageNodes = [];
1992-
void consumeImageNodes() {
1993-
result.add(ImageNodeList(imageNodes));
1994-
imageNodes = [];
1991+
List<ImagePreviewNode> imagePreviewNodes = [];
1992+
void consumeImagePreviewNodes() {
1993+
result.add(ImagePreviewNodeList(imagePreviewNodes));
1994+
imagePreviewNodes = [];
19951995
}
19961996

19971997
for (final node in nodes) {
@@ -2006,20 +2006,20 @@ class _ZulipContentParser {
20062006
// handle it explicitly here.
20072007
if (node case dom.Element(localName: 'p', className: '', nodes: [
20082008
dom.Element(localName: 'span', className: 'katex-display'), ...])) {
2009-
if (imageNodes.isNotEmpty) consumeImageNodes();
2009+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
20102010
parseMathBlocks(node.nodes, result);
20112011
continue;
20122012
}
20132013

20142014
final block = parseBlockContent(node);
2015-
if (block is ImageNode) {
2016-
imageNodes.add(block);
2015+
if (block is ImagePreviewNode) {
2016+
imagePreviewNodes.add(block);
20172017
continue;
20182018
}
2019-
if (imageNodes.isNotEmpty) consumeImageNodes();
2019+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
20202020
result.add(block);
20212021
}
2022-
if (imageNodes.isNotEmpty) consumeImageNodes();
2022+
if (imagePreviewNodes.isNotEmpty) consumeImagePreviewNodes();
20232023
return result;
20242024
}
20252025

lib/widgets/content.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -348,13 +348,13 @@ class BlockContentList extends StatelessWidget {
348348
SpoilerNode() => Spoiler(node: node),
349349
CodeBlockNode() => CodeBlock(node: node),
350350
MathBlockNode() => MathBlock(node: node),
351-
ImageNodeList() => MessageImageList(node: node),
352-
ImageNode() => (){
351+
ImagePreviewNodeList() => MessageImagePreviewList(node: node),
352+
ImagePreviewNode() => (){
353353
assert(false,
354-
"[ImageNode] not allowed in [BlockContentList]. "
355-
"It should be wrapped in [ImageNodeList]."
354+
"[ImagePreviewNode] not allowed in [BlockContentList]. "
355+
"It should be wrapped in [ImagePreviewNodeList]."
356356
);
357-
return MessageImage(node: node);
357+
return MessageImagePreview(node: node);
358358
}(),
359359
InlineVideoNode() => MessageInlineVideo(node: node),
360360
EmbedVideoNode() => MessageEmbedVideo(node: node),
@@ -614,22 +614,22 @@ class _SpoilerState extends State<Spoiler> with TickerProviderStateMixin {
614614
}
615615
}
616616

617-
class MessageImageList extends StatelessWidget {
618-
const MessageImageList({super.key, required this.node});
617+
class MessageImagePreviewList extends StatelessWidget {
618+
const MessageImagePreviewList({super.key, required this.node});
619619

620-
final ImageNodeList node;
620+
final ImagePreviewNodeList node;
621621

622622
@override
623623
Widget build(BuildContext context) {
624624
return Wrap(
625-
children: node.images.map((imageNode) => MessageImage(node: imageNode)).toList());
625+
children: node.imagePreviews.map((node) => MessageImagePreview(node: node)).toList());
626626
}
627627
}
628628

629-
class MessageImage extends StatelessWidget {
630-
const MessageImage({super.key, required this.node});
629+
class MessageImagePreview extends StatelessWidget {
630+
const MessageImagePreview({super.key, required this.node});
631631

632-
final ImageNode node;
632+
final ImagePreviewNode node;
633633

634634
@override
635635
Widget build(BuildContext context) {

lib/widgets/lightbox.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class _LightboxHeroTag {
3232
required this.src,
3333
});
3434

35-
/// The [BuildContext] for the [MessageImage] being expanded into the lightbox.
35+
/// The [BuildContext] for the [MessageImagePreview] being expanded into the lightbox.
3636
///
3737
/// In particular this prevents hero animations between
3838
/// different message lists that happen to have the same message.
@@ -45,7 +45,7 @@ class _LightboxHeroTag {
4545
///
4646
/// This ensures the animation only occurs between matching images, even if
4747
/// the message was edited before navigating back to the message list
48-
/// so that the original [MessageImage] has been replaced in the tree
48+
/// so that the original [MessageImagePreview] has been replaced in the tree
4949
/// by a different image.
5050
final Uri src;
5151

0 commit comments

Comments
 (0)