import 'package:intl/intl.dart'; import 'package:isekai_wiki/api/mw/mw_api.dart'; import 'package:isekai_wiki/api/response/parse.dart'; import 'package:isekai_wiki/global.dart'; class MWApiParse { static Future> parse({ String? title, int? pageId, List? prop, String? useSkin, String? section, bool disableEditSection = true, bool disableTOC = true, bool mobileMode = true, }) async { prop ??= [ "text", "langlinks", "categories", "links", "templates", "images", "externallinks", "sections", "revid", "displaytitle", "iwlinks", "properties", "parsewarnings", "modules", "jsconfigvars", ]; useSkin ??= Global.siteConfig.renderTheme; Map query = { "prop": prop.join("|"), "useskin": useSkin, }; if (title != null) query["page"] = title; if (pageId != null) query["pageid"] = pageId; if (disableEditSection) query["disableeditsection"] = 1; if (section != null) query["section"] = section; if (disableTOC) query["disabletoc"] = 1; if (mobileMode) query["mobilenode"] = 1; var mwRes = await MWApi.get("parse", params: query); var parseInfo = MWParseInfo.fromJson(mwRes.data); if (parseInfo.sections.isNotEmpty) { parseInfo = parseInfo.copyWith( sections: parseInfo.sections .map( (section) => section.copyWith( line: Bidi.stripHtmlIfNeeded(section.line), ), ) .toList(), ); } return mwRes.replaceData(parseInfo); } }