mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 23:50:19 +00:00
LibHTML: Make StyleResolver responsible for loading the default style
Instead of HtmlView clients having to worry about parsing and loading the default CSS, just take care of it inside StyleResolver. The default style is automatically inserted into the stylesheet list, at the very start, so everyone else gets a chance to override it.
This commit is contained in:
parent
77218b1c2a
commit
ee64d99a96
Notes:
sideshowbarker
2024-07-19 11:49:08 +09:00
Author: https://github.com/awesomekling Commit: https://github.com/SerenityOS/serenity/commit/ee64d99a96a
4 changed files with 26 additions and 12 deletions
|
@ -46,10 +46,6 @@ int main(int argc, char* argv[])
|
|||
|
||||
auto html_view = HtmlView::construct(splitter);
|
||||
|
||||
extern const char default_stylesheet_source[];
|
||||
String css = default_stylesheet_source;
|
||||
auto sheet = parse_css(css);
|
||||
|
||||
History history;
|
||||
|
||||
RefPtr<GAction> go_back_action;
|
||||
|
@ -86,7 +82,6 @@ int main(int argc, char* argv[])
|
|||
String html = md_document.render_to_html();
|
||||
auto html_document = parse_html(html);
|
||||
html_document->normalize();
|
||||
html_document->add_sheet(sheet);
|
||||
html_view->set_document(html_document);
|
||||
|
||||
String page_and_section = model->page_and_section(tree_view->selection().first());
|
||||
|
|
|
@ -33,10 +33,31 @@ static bool matches(const Selector& selector, const Element& element)
|
|||
}
|
||||
}
|
||||
|
||||
static StyleSheet& default_stylesheet()
|
||||
{
|
||||
static StyleSheet* sheet;
|
||||
if (!sheet) {
|
||||
extern const char default_stylesheet_source[];
|
||||
String css = default_stylesheet_source;
|
||||
sheet = &parse_css(css).leak_ref();
|
||||
}
|
||||
return *sheet;
|
||||
}
|
||||
|
||||
template<typename Callback>
|
||||
void StyleResolver::for_each_stylesheet(Callback callback) const
|
||||
{
|
||||
callback(default_stylesheet());
|
||||
for (auto& sheet : document().stylesheets()) {
|
||||
callback(sheet);
|
||||
}
|
||||
}
|
||||
|
||||
NonnullRefPtrVector<StyleRule> StyleResolver::collect_matching_rules(const Element& element) const
|
||||
{
|
||||
NonnullRefPtrVector<StyleRule> matching_rules;
|
||||
for (auto& sheet : document().stylesheets()) {
|
||||
|
||||
for_each_stylesheet([&](auto& sheet) {
|
||||
for (auto& rule : sheet.rules()) {
|
||||
for (auto& selector : rule.selectors()) {
|
||||
if (matches(selector, element)) {
|
||||
|
@ -45,7 +66,7 @@ NonnullRefPtrVector<StyleRule> StyleResolver::collect_matching_rules(const Eleme
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
#ifdef HTML_DEBUG
|
||||
dbgprintf("Rules matching Element{%p}\n", &element);
|
||||
|
|
|
@ -23,5 +23,8 @@ public:
|
|||
NonnullRefPtrVector<StyleRule> collect_matching_rules(const Element&) const;
|
||||
|
||||
private:
|
||||
template<typename Callback>
|
||||
void for_each_stylesheet(Callback) const;
|
||||
|
||||
Document& m_document;
|
||||
};
|
||||
|
|
|
@ -33,14 +33,9 @@ int main(int argc, char** argv)
|
|||
return 1;
|
||||
}
|
||||
|
||||
extern const char default_stylesheet_source[];
|
||||
String css = default_stylesheet_source;
|
||||
auto sheet = parse_css(css);
|
||||
|
||||
String html = String::copy(f->read_all());
|
||||
auto document = parse_html(html);
|
||||
document->normalize();
|
||||
document->add_sheet(*sheet);
|
||||
|
||||
auto window = GWindow::construct();
|
||||
auto widget = HtmlView::construct();
|
||||
|
|
Loading…
Reference in a new issue