瀏覽代碼

LibWeb: Teach HtmlView how to open a .txt file

When encountering a text file, we now put it in a wrapper document with
the file contents in a <pre> tag. This works really nicely :^)
Andreas Kling 5 年之前
父節點
當前提交
97adcde36e
共有 1 個文件被更改,包括 27 次插入0 次删除
  1. 27 0
      Libraries/LibWeb/HtmlView.cpp

+ 27 - 0
Libraries/LibWeb/HtmlView.cpp

@@ -321,6 +321,31 @@ void HtmlView::reload()
     load(main_frame().document()->url());
 }
 
+static RefPtr<Document> create_text_document(const ByteBuffer& data, const URL& url)
+{
+    auto document = adopt(*new Document(url));
+
+    auto html_element = document->create_element("html");
+    document->append_child(html_element);
+
+    auto head_element = document->create_element("head");
+    html_element->append_child(head_element);
+    auto title_element = document->create_element("title");
+    head_element->append_child(title_element);
+
+    auto title_text = document->create_text_node(url.basename());
+    title_element->append_child(title_text);
+
+    auto body_element = document->create_element("body");
+    html_element->append_child(body_element);
+
+    auto pre_element = create_element(document, "pre");
+    body_element->append_child(pre_element);
+
+    pre_element->append_child(document->create_text_node(String::copy(data)));
+    return document;
+}
+
 static RefPtr<Document> create_image_document(const ByteBuffer& data, const URL& url)
 {
     auto document = adopt(*new Document(url));
@@ -393,6 +418,8 @@ void HtmlView::load(const URL& url)
             RefPtr<Document> document;
             if (url.path().ends_with(".png") || url.path().ends_with(".gif")) {
                 document = create_image_document(data, url);
+            } else if (url.path().ends_with(".txt")) {
+                document = create_text_document(data, url);
             } else {
                 String encoding = "utf-8";