mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 18:38:36 +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:gitjournal/utils/datetime.dart';
|
||||||
|
|
||||||
import 'package:path/path.dart' as p;
|
import 'package:path/path.dart' as p;
|
||||||
import 'package:meta/meta.dart';
|
|
||||||
|
|
||||||
import 'package:markdown/markdown.dart' as md;
|
import 'package:markdown/markdown.dart' as md;
|
||||||
import 'package:uuid/uuid.dart';
|
import 'package:uuid/uuid.dart';
|
||||||
|
|
||||||
|
import 'link.dart';
|
||||||
import 'md_yaml_doc.dart';
|
import 'md_yaml_doc.dart';
|
||||||
import 'md_yaml_doc_codec.dart';
|
import 'md_yaml_doc_codec.dart';
|
||||||
import 'note_serializer.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