This commit is contained in:
kodjomoustapha 2023-12-20 18:33:04 +01:00
parent 68ff513932
commit 6eeced8ca9
4 changed files with 5 additions and 172 deletions

View file

@ -22,7 +22,7 @@ class $MElement implements MElement, $Instance {
'element': BridgeFieldDef(BridgeTypeAnnotation($Element.$type)),
},
getters: {
'outerHTML': BridgeMethodDef(BridgeFunctionDef(
'outerHtml': BridgeMethodDef(BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string),
nullable: true),
)),
@ -129,8 +129,8 @@ class $MElement implements MElement, $Instance {
@override
$Value? $getProperty(Runtime runtime, String identifier) {
switch (identifier) {
case 'outerHTML':
final res = $value.outerHTML;
case 'outerHtml':
final res = $value.outerHtml;
return res == null ? const $null() : $String(res);
case 'innerHtml':
final res = $value.innerHtml;
@ -253,7 +253,7 @@ class $MElement implements MElement, $Instance {
MElement? get nextElementSibling => $value.nextElementSibling;
@override
String? get outerHTML => $value.outerHTML;
String? get outerHtml => $value.outerHtml;
@override
MElement? get parent => $value.parent;

View file

@ -513,51 +513,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
false),
]),
),
'querySelector': BridgeMethodDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
params: [
BridgeParameter(
'html',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
BridgeParameter(
'selector',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
BridgeParameter('typeElement',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
BridgeParameter(
'attributes',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
]),
),
'querySelectorAll': BridgeMethodDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(
CoreTypes.list, [BridgeTypeRef(CoreTypes.string)])),
params: [
BridgeParameter(
'html',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
],
namedParams: [
BridgeParameter(
'selector',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
BridgeParameter('typeElement',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
BridgeParameter(
'attributes',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.string)),
false),
BridgeParameter('typeRegExp',
BridgeTypeAnnotation(BridgeTypeRef(CoreTypes.int)), false),
]),
),
'xpath': BridgeMethodDef(
BridgeFunctionDef(
returns: BridgeTypeAnnotation(BridgeTypeRef(
@ -956,8 +911,6 @@ class $MProvider extends MProvider with $Bridge<MProvider> {
.map((e) => $String(e))
.toList());
}),
"querySelector" => MBridge.querySelector,
"querySelectorAll" => MBridge.querySelectorAll,
"xpath" => MBridge.xpath,
_ => $Function((_, __, List<$Value?> args) {
throw UnimplementedError('Unknown property $identifier');

View file

@ -6,7 +6,7 @@ class MElement {
final Element? _element;
String? get outerHTML => _element?.outerHtml;
String? get outerHtml => _element?.outerHtml;
String? get innerHtml => _element?.innerHtml;

View file

@ -41,7 +41,6 @@ import 'package:mangayomi/utils/extensions.dart';
import 'package:mangayomi/utils/reg_exp_matcher.dart';
import 'package:mangayomi/utils/xpath_selector.dart';
import 'package:xpath_selector_html_parser/xpath_selector_html_parser.dart';
import 'package:html/parser.dart' as parser;
import 'package:http/http.dart' as hp;
import 'package:encrypt/encrypt.dart' as encrypt;
@ -67,125 +66,6 @@ class WordSet {
}
class MBridge {
///Seaches for the first descendant node matching the given selectors, using a preorder traversal.
static const $Function querySelector = $Function(_querySelector);
static $Value? _querySelector(_, __, List<$Value?> args) {
String html = args[0]!.$reified;
String selector = args[0]!.$reified;
int typeElement = args[0]!.$reified;
String attributes = args[0]!.$reified;
String res = "";
try {
var parse = parser.parse(html);
// return querySelector text
if (typeElement == 0) {
res = parse.querySelector(selector)!.text.trim().trimLeft().trimRight();
// return querySelector innerHtml
} else if (typeElement == 1) {
res = parse
.querySelector(selector)!
.innerHtml
.trim()
.trimLeft()
.trimRight();
// return querySelector outerHtml
} else if (typeElement == 2) {
res = parse
.querySelector(selector)!
.outerHtml
.trim()
.trimLeft()
.trimRight();
}
// return querySelector attributes
res = parse
.querySelector(selector)!
.attributes[attributes]!
.trim()
.trimLeft()
.trimRight();
return $String(res);
} catch (_) {
return $String("");
}
}
///Returns all descendant nodes matching the given selectors, using a preorder traversal.
static const $Function querySelectorAll = $Function(_querySelectorAll);
static $Value? _querySelectorAll(_, __, List<$Value?> args) {
String html = args[0]!.$value;
String selector = args[1]!.$value;
int typeElement = args[2]!.$value;
String attributes = args[3]!.$value;
int typeRegExp = args[4]!.$value;
try {
var parse = parser.parse(html);
final a = parse.querySelectorAll(selector);
List<String> res = [];
for (var element in a) {
//text
if (typeElement == 0) {
res.add(element.text.trim().trimLeft().trimRight());
}
//innerHtml
else if (typeElement == 1) {
res.add(element.innerHtml.trim().trimLeft().trimRight());
}
//outerHtml
else if (typeElement == 2) {
res.add(element.outerHtml.trim().trimLeft().trimRight());
}
//attributes
else if (typeElement == 3) {
res.add(
element.attributes[attributes]!.trim().trimLeft().trimRight());
}
}
// if (typeRegExp == 0) is the default parameter
if (typeRegExp == 0) {
return $List.wrap(res.map((e) => $String(e)).toList());
}
List<String> resRegExp = [];
for (var element in res) {
//get first element of href that match
if (typeRegExp == 1) {
resRegExp.add(regHrefMatcher(element.trim().trimLeft().trimRight()));
}
//get first element of src that match
else if (typeRegExp == 2) {
resRegExp.add(regSrcMatcher(element.trim().trimLeft().trimRight()));
}
//get first element of datasrc that match
else if (typeRegExp == 3) {
resRegExp
.add(regDataSrcMatcher(element.trim().trimLeft().trimRight()));
}
//get first element of img that match
else if (typeRegExp == 4) {
resRegExp.add(regImgMatcher(element.trim().trimLeft().trimRight()));
}
}
return $List.wrap(resRegExp.map((e) => $String(e)).toList());
} catch (_) {
// botToast(e.toString());
return $List.wrap([]);
}
}
static MDocument parsHtml(String html) {
return MDocument(Document.html(html));
}