mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
Move Link to its own file
This commit is contained in:
63
lib/core/link.dart
Normal file
63
lib/core/link.dart
Normal file
@ -0,0 +1,63 @@
|
||||
import 'package:meta/meta.dart';
|
||||
import 'package:markdown/markdown.dart' as md;
|
||||
|
||||
class Link {
|
||||
String term;
|
||||
String filePath;
|
||||
|
||||
Link({@required this.term, @required this.filePath});
|
||||
|
||||
@override
|
||||
int get hashCode => filePath.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is Link &&
|
||||
runtimeType == other.runtimeType &&
|
||||
filePath == other.filePath;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Link{term: $term, filePath: $filePath}';
|
||||
}
|
||||
}
|
||||
|
||||
class LinkExtractor implements md.NodeVisitor {
|
||||
List<Link> links = [];
|
||||
|
||||
@override
|
||||
bool visitElementBefore(md.Element element) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
void visitText(md.Text text) {}
|
||||
|
||||
@override
|
||||
void visitElementAfter(md.Element el) {
|
||||
final String tag = el.tag;
|
||||
|
||||
if (tag == 'a') {
|
||||
var title = el.attributes['title'] ?? "";
|
||||
if (title.isEmpty) {
|
||||
for (var child in el.children) {
|
||||
if (child is md.Text) {
|
||||
title += child.text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var url = el.attributes['href'];
|
||||
var link = Link(term: title, filePath: url);
|
||||
links.add(link);
|
||||
}
|
||||
}
|
||||
|
||||
List<Link> visit(List<md.Node> nodes) {
|
||||
for (final node in nodes) {
|
||||
node.accept(this);
|
||||
}
|
||||
return links;
|
||||
}
|
||||
}
|
@ -10,11 +10,11 @@ import 'package:gitjournal/utils/logger.dart';
|
||||
import 'package:gitjournal/utils/datetime.dart';
|
||||
|
||||
import 'package:path/path.dart' as p;
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import 'package:markdown/markdown.dart' as md;
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import 'link.dart';
|
||||
import 'md_yaml_doc.dart';
|
||||
import 'md_yaml_doc_codec.dart';
|
||||
import 'note_serializer.dart';
|
||||
@ -505,64 +505,3 @@ String buildTitleFileName(String parentDir, String title) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Link {
|
||||
String term;
|
||||
String filePath;
|
||||
|
||||
Link({@required this.term, @required this.filePath});
|
||||
|
||||
@override
|
||||
int get hashCode => filePath.hashCode;
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) =>
|
||||
identical(this, other) ||
|
||||
other is Note &&
|
||||
runtimeType == other.runtimeType &&
|
||||
filePath == other.filePath;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'Link{term: $term, filePath: $filePath}';
|
||||
}
|
||||
}
|
||||
|
||||
class LinkExtractor implements md.NodeVisitor {
|
||||
List<Link> links = [];
|
||||
|
||||
@override
|
||||
bool visitElementBefore(md.Element element) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@override
|
||||
void visitText(md.Text text) {}
|
||||
|
||||
@override
|
||||
void visitElementAfter(md.Element el) {
|
||||
final String tag = el.tag;
|
||||
|
||||
if (tag == 'a') {
|
||||
var title = el.attributes['title'] ?? "";
|
||||
if (title.isEmpty) {
|
||||
for (var child in el.children) {
|
||||
if (child is md.Text) {
|
||||
title += child.text;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var url = el.attributes['href'];
|
||||
var link = Link(term: title, filePath: url);
|
||||
links.add(link);
|
||||
}
|
||||
}
|
||||
|
||||
List<Link> visit(List<md.Node> nodes) {
|
||||
for (final node in nodes) {
|
||||
node.accept(this);
|
||||
}
|
||||
return links;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user