mirror of
https://github.com/Livinglist/Hacki.git
synced 2025-08-06 18:24:42 +08:00
53 lines
1.7 KiB
Dart
53 lines
1.7 KiB
Dart
import 'package:html/dom.dart' as dom;
|
|
import 'package:html/parser.dart' as parser;
|
|
import 'package:html_unescape/html_unescape.dart';
|
|
|
|
abstract class HtmlUtil {
|
|
static String? getTitle(dynamic input) =>
|
|
parser.parse(input).head?.querySelector('title')?.text;
|
|
|
|
static dom.Element? getBody(dynamic input) => parser.parse(input).body;
|
|
|
|
static bool hasMatch(dom.Element? element, {required String selector}) =>
|
|
element?.querySelector(selector) != null;
|
|
|
|
static Iterable<String>? getIds(
|
|
dom.Element? element, {
|
|
required String selector,
|
|
}) =>
|
|
element
|
|
?.querySelectorAll(selector)
|
|
.map((dom.Element element) => element.id);
|
|
|
|
static Map<String, String>? getHiddenFormValues(dynamic input) {
|
|
final Iterable<dom.Element>? hiddenInputs = getBody(input)
|
|
?.getElementsByTagName('form')
|
|
.first
|
|
.querySelectorAll("input[type='hidden']");
|
|
return <String, String>{
|
|
if (hiddenInputs != null)
|
|
for (final dom.Element hiddenInput in hiddenInputs)
|
|
hiddenInput.attributes['name']!: hiddenInput.attributes['value']!,
|
|
};
|
|
}
|
|
|
|
static String parseHtml(String text) {
|
|
return HtmlUnescape()
|
|
.convert(text)
|
|
.replaceAll('<p>', '\n')
|
|
.replaceAllMapped(
|
|
RegExp(r'\<i\>(.*?)\<\/i\>'),
|
|
(Match match) => '*${match[1]}*',
|
|
)
|
|
.replaceAllMapped(
|
|
RegExp(r'\<pre\>\<code\>(.*?)\<\/code\>\<\/pre\>', dotAll: true),
|
|
(Match match) => match[1]?.trimRight() ?? '',
|
|
)
|
|
.replaceAllMapped(
|
|
RegExp(r'\<a href=\"(.*?)\".*?\>.*?\<\/a\>'),
|
|
(Match match) => match[1] ?? '',
|
|
)
|
|
.replaceAll('\n', '\n\n');
|
|
}
|
|
}
|