diff options
author | Alan Pearce | 2014-09-11 18:10:03 +0100 |
---|---|---|
committer | Alan Pearce | 2014-09-11 18:10:03 +0100 |
commit | 90d4ef777d61af7ad1990e9b3a65e42f591ed1ce (patch) | |
tree | dd27da695ddc74919cc69bf84d82d6531890b62b | |
parent | 31ad04a4ed9bfafa6c9682c9bdd98aadb45f6092 (diff) | |
download | microformats-90d4ef777d61af7ad1990e9b3a65e42f591ed1ce.tar.lz microformats-90d4ef777d61af7ad1990e9b3a65e42f591ed1ce.tar.zst microformats-90d4ef777d61af7ad1990e9b3a65e42f591ed1ce.zip |
Get correct property value for special tags
img, area, abbr, data and input tags are all consumed differently.
-rw-r--r-- | src/microformats/parser.clj | 13 | ||||
-rw-r--r-- | test/microformats/parser_test.clj | 13 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj index c39e396..959e1af 100644 --- a/src/microformats/parser.clj +++ b/src/microformats/parser.clj @@ -34,12 +34,23 @@ :class split-classes)) +(defn get-property + "Get the p-x property value of an element" + [el] + (case (:tag el) + :img (-> el :attrs :alt) + :area (-> el :attrs :alt) + :abbr (-> el :attrs :title) + :data (-> el :attrs :value) + :input (-> el :attrs :value) + (first (:content el)))) + (defn parse-p "Parse p-* classes within HTML element." [element] (let [el (first (html/select element [(html/attr-starts :class "p-")])) props (into [] ((classes-to-props "p-") (element-to-classes el)))] - (hash-map :properties (apply hash-map (first props) (repeat (count props) (first (:content el))))))) + (hash-map :properties (apply hash-map (first props) (repeat (count props) (get-property el)))))) (defn parse-h "Parse h-* classes within a HTML document." diff --git a/test/microformats/parser_test.clj b/test/microformats/parser_test.clj index f37906e..d9942f4 100644 --- a/test/microformats/parser_test.clj +++ b/test/microformats/parser_test.clj @@ -16,3 +16,16 @@ {:items [{:properties {:nickname "exuser"}}] :rels {}} "<div class=\"h-card\"><p class=\"p-nickname\">exuser</p></div>" )) + +(deftest parse-p-special-elements + (testing "img, abbr and data elements should be parsed differently" + (are [ex in] (= ex (parse in)) + {:items [{:properties {:name "Example User"}}] :rels {}} + "<div class=\"h-card\"><img class=\"p-name\" alt=\"Example User\"></div>" + + {:items [{:properties {:name "Example User"}}] :rels {}} + "<div class=\"h-card h-person\"><abbr class=\"p-name\" title=\"Example User\">@example</abbr></div>" + + {:items [{:properties {:name "Example User"}}] :rels {}} + "<div class=\"h-card\"><data class=\"p-name\" value=\"Example User\"></data></div>" + ))) |