From 30c1f97114025feecf71d9b6a1572cac55a2acf9 Mon Sep 17 00:00:00 2001 From: Anton Maminov Date: Sat, 14 Aug 2021 12:20:15 +0300 Subject: [PATCH] switch to Lexbor parser --- README.md | 4 ++-- shard.yml | 4 ++-- src/mechanize/form.cr | 12 ++++++------ src/mechanize/form/button.cr | 4 ++-- src/mechanize/form/field.cr | 8 ++++---- src/mechanize/form/multi_select_list.cr | 4 ++-- src/mechanize/form/option.cr | 2 +- src/mechanize/form/radio_button.cr | 2 +- src/mechanize/node.cr | 7 ++++--- src/mechanize/page.cr | 4 ++-- 10 files changed, 26 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 994aa89..ebc320f 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ page = agent.post("http://example.com/", query: query) ### add query params, request_headers -You can add any query parameters and headers to requests. +You can add any query parameters and headers to requests. ```crystal require "mechanize" @@ -79,7 +79,7 @@ agent.get("#{web page only logged-in users can see}" ### search node You can use css selector to search html nodes by using `#css` method. -This method is from [myhtml](https://github.com/sparklemotion/mechanize), so if you want to explore more, please refer the repository. +This method is from [lexbor](https://github.com/kostya/lexbor), so if you want to explore more, please refer the repository. ```crystal puts page.css("h1").first.inner_text diff --git a/shard.yml b/shard.yml index 63af622..d40ee01 100644 --- a/shard.yml +++ b/shard.yml @@ -9,8 +9,8 @@ crystal: 1.0.0 license: MIT dependencies: - myhtml: - github: kostya/myhtml + lexbor: + github: kostya/lexbor development_dependencies: webmock: diff --git a/src/mechanize/form.cr b/src/mechanize/form.cr index 21f235a..35961f2 100644 --- a/src/mechanize/form.cr +++ b/src/mechanize/form.cr @@ -11,7 +11,7 @@ require "./utils/element_matcher" class MechanizeCr::Form include MechanzeCr::ElementMatcher - getter node : Node | Myhtml::Node + getter node : Node | Lexbor::Node getter fields : Array(FormContent::Field) getter checkboxes : Array(FormContent::CheckBox) getter radiobuttons : Array(FormContent::RadioButton) @@ -23,7 +23,7 @@ class MechanizeCr::Form getter page : Page? property action : String - def initialize(node : Node | Myhtml::Node, page : Page? = nil) + def initialize(node : Node | Lexbor::Node, page : Page? = nil) @enctype = node.fetch("enctype", "application/x-www-form-urlencoded") @node = node @fields = Array(FormContent::Field).new @@ -64,7 +64,7 @@ class MechanizeCr::Form private def parse @node.css("input").not_nil!.each do |html_node| - html_node = html_node.as(Myhtml::Node) + html_node = html_node.as(Lexbor::Node) type = (html_node["type"] || "text").downcase case type when "checkbox" @@ -92,13 +92,13 @@ class MechanizeCr::Form # Find all textarea tags @node.css("textarea").each do |node| - node = node.as(Myhtml::Node) + node = node.as(Lexbor::Node) next if node["name"].empty? @fields << FormContent::Textarea.new(node, node.inner_text) end @node.css("button").each do |node| - node = node.as(Myhtml::Node) + node = node.as(Lexbor::Node) type = node.fetch("type", "submit").downcase next if type == "reset" @buttons << FormContent::Button.new(node, @node) @@ -106,7 +106,7 @@ class MechanizeCr::Form # Find all select tags @node.css("select").each do |node| - node = node.as(Myhtml::Node) + node = node.as(Lexbor::Node) next if node["name"].empty? if node.has_key?("multiple") @selectboxes << FormContent::MultiSelectList.new(node) diff --git a/src/mechanize/form/button.cr b/src/mechanize/form/button.cr index 7012455..d4dcf55 100644 --- a/src/mechanize/form/button.cr +++ b/src/mechanize/form/button.cr @@ -1,6 +1,6 @@ class MechanizeCr::FormContent::Button < MechanizeCr::FormContent::Field - getter form_node : Node | Myhtml::Node - def initialize(node : Node | Myhtml::Node, form_node : Node | Myhtml::Node, value=nil) + getter form_node : Node | Lexbor::Node + def initialize(node : Node | Lexbor::Node, form_node : Node | Lexbor::Node, value=nil) @form_node = form_node super(node, value) end diff --git a/src/mechanize/form/field.cr b/src/mechanize/form/field.cr index b0c7f69..6e3c4e0 100644 --- a/src/mechanize/form/field.cr +++ b/src/mechanize/form/field.cr @@ -3,9 +3,9 @@ class MechanizeCr::FormContent::Field getter name : String getter type : String getter raw_value : String? - getter node : Node | Myhtml::Node + getter node : Node | Lexbor::Node - def initialize(node : Node | Myhtml::Node, value=nil) + def initialize(node : Node | Lexbor::Node, value=nil) @node = node @name = node.fetch("name", "") @value = value || node.fetch("value", nil) @@ -17,12 +17,12 @@ class MechanizeCr::FormContent::Field [@name, @value || ""] end - # returns DOM 'id' value + # returns DOM 'id' value def dom_id node.fetch("id", "") end - # returns DOM 'class' value + # returns DOM 'class' value def dom_class node.fetch("class", "") end diff --git a/src/mechanize/form/multi_select_list.cr b/src/mechanize/form/multi_select_list.cr index a6f674c..3d1f9fd 100644 --- a/src/mechanize/form/multi_select_list.cr +++ b/src/mechanize/form/multi_select_list.cr @@ -1,13 +1,13 @@ require "./option" class MechanizeCr::FormContent::MultiSelectList - getter node : Myhtml::Node + getter node : Lexbor::Node getter name : String getter type : String property values : Array(String) property options : Array(FormContent::Option) - def initialize(node : Myhtml::Node) + def initialize(node : Lexbor::Node) @node = node @name = node.fetch("name", "") @type = node.fetch("type", "") diff --git a/src/mechanize/form/option.cr b/src/mechanize/form/option.cr index 0c06e2c..1dd4a9e 100644 --- a/src/mechanize/form/option.cr +++ b/src/mechanize/form/option.cr @@ -1,6 +1,6 @@ class MechanizeCr::FormContent::Option getter select_list : FormContent::MultiSelectList - getter node : Myhtml::Node + getter node : Lexbor::Node getter text : String getter value : String getter selected : Bool diff --git a/src/mechanize/form/radio_button.cr b/src/mechanize/form/radio_button.cr index fa3a413..4d75f94 100644 --- a/src/mechanize/form/radio_button.cr +++ b/src/mechanize/form/radio_button.cr @@ -1,7 +1,7 @@ class MechanizeCr::FormContent::RadioButton < MechanizeCr::FormContent::Field property :checked, :form - def initialize(node : Node | Myhtml::Node, form : Form) + def initialize(node : Node | Lexbor::Node, form : Form) @checked = !!node.fetch("checked", nil) @form = form super(node) diff --git a/src/mechanize/node.cr b/src/mechanize/node.cr index acc592e..f66b1fc 100644 --- a/src/mechanize/node.cr +++ b/src/mechanize/node.cr @@ -1,5 +1,6 @@ -require "myhtml" -# This is a fake node used when sending post request. +require "lexbor" + +# This is a fake node used when sending post request. class Node < Hash(String,String) def css(str) [] of Hash(String,String) @@ -11,7 +12,7 @@ class Node < Hash(String,String) end # This is a real Node got from html. -struct Myhtml::Node +struct Lexbor::Node delegate :[], to: attributes delegate :[]=, to: attributes delegate :[]?, to: attributes diff --git a/src/mechanize/page.cr b/src/mechanize/page.cr index d4feb97..d20e736 100644 --- a/src/mechanize/page.cr +++ b/src/mechanize/page.cr @@ -12,8 +12,8 @@ class MechanizeCr::Page < MechanizeCr::File super(uri, response, body, code) end - def parser : Myhtml::Parser - @parser ||= Myhtml::Parser.new(@body) + def parser : Lexbor::Parser + @parser ||= Lexbor::Parser.new(@body) end def title