diff options
author | Alan Pearce | 2014-09-28 19:21:55 +0100 |
---|---|---|
committer | Alan Pearce | 2014-09-28 19:21:55 +0100 |
commit | 2beb34d0d9481faa111567b6faf019c0c179c591 (patch) | |
tree | ff3282f6615fad6aff575006cdd5b28d64d130c1 | |
parent | b1e28b8b122a46951ab8e17f010ab58fd06f9524 (diff) | |
download | microformats-2beb34d0d9481faa111567b6faf019c0c179c591.tar.lz microformats-2beb34d0d9481faa111567b6faf019c0c179c591.tar.zst microformats-2beb34d0d9481faa111567b6faf019c0c179c591.zip |
Parse properties for child microformats
-rw-r--r-- | src/microformats/parser.clj | 39 | ||||
-rw-r--r-- | 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 "<p class=\"h-card h-org\">Example</p>")) + +(expect {:items [{:type ["h-card"] + :properties {:name '("John Doe") + :org '({:value "Example" + :type ["h-card" "h-org"] + :properties {:name ("Example")}})}}] + :rels {}} + (parse "<div class=\"h-card\"> +<span class=\"p-name\">John Doe</span> +<span class=\"p-org h-card h-org\">Example</span> +</div>")) |