about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAlan Pearce2014-09-24 18:34:11 +0100
committerAlan Pearce2014-09-24 18:34:11 +0100
commiteaf3f2052b41f813a30a081b3882136fa178a538 (patch)
tree63ff24324eab8398d69a1a2ca94d05aba70831e9
parent078d97a2f8ca6da814ff0a6d405d5c375f860185 (diff)
downloadmicroformats-eaf3f2052b41f813a30a081b3882136fa178a538.tar.lz
microformats-eaf3f2052b41f813a30a081b3882136fa178a538.tar.zst
microformats-eaf3f2052b41f813a30a081b3882136fa178a538.zip
Parse multiple types of properties on a single element
-rw-r--r--src/microformats/parser.clj10
-rw-r--r--test/microformats/parser_expectations.clj4
2 files changed, 9 insertions, 5 deletions
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj
index eee04c4..03e543f 100644
--- a/src/microformats/parser.clj
+++ b/src/microformats/parser.clj
@@ -227,10 +227,10 @@
   [element]
   (let [cappend (partial merge-with concat)]
     (merge (parse-implied element)
-           (apply cappend (map parse-p (html/select element [(html/attr-starts :class "p-")])))
-           (apply cappend (map parse-u (html/select element [(html/attr-starts :class "u-")])))
-           (apply cappend (map parse-dt (html/select element [(html/attr-starts :class "dt-")])))
-           (apply cappend (map parse-e (html/select element [(html/attr-starts :class "e-")]))))))
+           (apply cappend (map parse-p (html/select element [(html/attr-contains :class "p-")])))
+           (apply cappend (map parse-u (html/select element [(html/attr-contains :class "u-")])))
+           (apply cappend (map parse-dt (html/select element [(html/attr-contains :class "dt-")])))
+           (apply cappend (map parse-e (html/select element [(html/attr-contains :class "e-")]))))))
 
 (defn parse-h
   "Parse h-* classes within a HTML element."
@@ -241,7 +241,7 @@
 (defn select-h
   "Select h-* elements within a HTML document."
   [element]
-  (html/select element [(html/attr-starts :class "h-")]))
+  (html/select element [(html/attr-contains :class "h-")]))
 
 (defn parse-rel
   "Parse rel attributes of an HTML link element"
diff --git a/test/microformats/parser_expectations.clj b/test/microformats/parser_expectations.clj
index 893872c..e89833b 100644
--- a/test/microformats/parser_expectations.clj
+++ b/test/microformats/parser_expectations.clj
@@ -127,6 +127,10 @@
 (expect {:items [{:properties {:name '("Example User")} :type ["h-card"]}] :rels {}}
         (parse "<div class=\"h-card\"><p class=\"p-name\">  Example User  </p></div>"))
 
+(expect {:items [{:properties {:name '("Example User") :url '("http://example.com")}
+                  :type ["h-card"]}] :rels {}}
+        (parse "<div class=\"h-card\"><a class=\"p-name u-url\" href=\"http://example.com\">Example User</></div>"))
+
 (expect {:items [{:type ["h-card"] :properties {:name '("Example User")}}] :rels {}}
         (parse "<p class=\"h-card\">Example User</p>"))