From 2beb34d0d9481faa111567b6faf019c0c179c591 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 28 Sep 2014 19:21:55 +0100 Subject: Parse properties for child microformats --- src/microformats/parser.clj | 39 +++++++++++++++++++++++-------- test/microformats/parser_expectations.clj | 11 +++++++++ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj index 32d0331..27c1388 100644 --- a/src/microformats/parser.clj +++ b/src/microformats/parser.clj @@ -79,19 +79,38 @@ (when-let [values (seq (html/select el [html/root :> :.value]))] (get-value-class values))) +(declare parse-h) + +(defn get-child-mf-properties + [element] + (assoc (parse-h element) :value (-> element :content node-to-text))) + +(defn remove-property-classes + [element] + (into {} (html/transform (list element) [html/root] + (apply html/remove-class (filter (prefixed-by? "p-") + (element-to-classes element)))))) + +(defn- find-child-mf + "Find child property microformats of an element." + [element] + (when (-> element :attrs :class (.indexOf "h-") (>= 0)) + (-> element remove-property-classes get-child-mf-properties))) + (defn get-p-value "Get the p-x property value of an element" [el] - (str/trim (or (find-value-class el) - (case (:tag el) - :img (-> el :attrs :alt) - :area (-> el :attrs :alt) - :abbr (-> el :attrs :title) - :data (-> el :attrs :value) - :input (-> el :attrs :value) - nil) - (node-to-text (:content el)) - ""))) + (or (find-child-mf el) + (str/trim (or (find-value-class el) + (case (:tag el) + :img (-> el :attrs :alt) + :area (-> el :attrs :alt) + :abbr (-> el :attrs :title) + :data (-> el :attrs :value) + :input (-> el :attrs :value) + nil) + (node-to-text (:content el)) + "")))) (defn get-u-value "Get the u-x property value of an element" diff --git a/test/microformats/parser_expectations.clj b/test/microformats/parser_expectations.clj index 1cbeedd..12234aa 100644 --- a/test/microformats/parser_expectations.clj +++ b/test/microformats/parser_expectations.clj @@ -244,3 +244,14 @@ :properties {:name '("Example")}}] :rels {}} (parse "

Example

")) + +(expect {:items [{:type ["h-card"] + :properties {:name '("John Doe") + :org '({:value "Example" + :type ["h-card" "h-org"] + :properties {:name ("Example")}})}}] + :rels {}} + (parse "
+John Doe +Example +
")) -- cgit 1.4.1