From e8a96393c8e6c2b5f94e43e58680ee90a2b5a6b0 Mon Sep 17 00:00:00 2001
From: Alan Pearce
Date: Sat, 13 Sep 2014 10:00:49 +0100
Subject: Add basic support for dt-* parsing
---
src/microformats/parser.clj | 22 +++++++++++++++++++++-
test/microformats/parser_test.clj | 30 ++++++++++++++++++++++++++++++
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj
index 75f7de9..f89ed8f 100644
--- a/src/microformats/parser.clj
+++ b/src/microformats/parser.clj
@@ -57,6 +57,19 @@
(first :content el)
""))
+(defn get-dt-property
+ "Get the dt-x property value of an element"
+ [el]
+ (or (case (:tag el)
+ :time (-> el :attrs :datetime)
+ :ins (-> el :attrs :datetime)
+ :del (-> el :attrs :datetime)
+ :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]
@@ -69,11 +82,18 @@
(let [prop (get-u-property element)]
(into {} (r/map #(hash-map % prop) ((classes-to-props "u-") (element-to-classes element))))))
+(defn parse-dt
+ "Parse dt-* classes within HTML element"
+ [element]
+ (let [prop (get-dt-property element)]
+ (into {} (r/map #(hash-map % prop) ((classes-to-props "dt-") (element-to-classes element))))))
+
(defn parse-children
"Parse element children for microformats"
[element]
(let [el (first (html/select element [(html/union [(html/attr-starts :class "p-")
- (html/attr-starts :class "u-")])]))]
+ (html/attr-starts :class "u-")
+ (html/attr-starts :class "dt-")])]))]
(hash-map :properties (merge (parse-p el) (parse-u el)))))
(defn parse-h
diff --git a/test/microformats/parser_test.clj b/test/microformats/parser_test.clj
index 0f712de..63c7708 100644
--- a/test/microformats/parser_test.clj
+++ b/test/microformats/parser_test.clj
@@ -70,3 +70,33 @@
{:photo "http://example.com/someimage.png"}
"http://example.com/someimage.png")))
+
+(deftest parse-dt-elements
+ (testing "Tags with dt-* classes should have their values parsed"
+ (are [ex in] (= ex (parse-dt (first (html-snippet in))))
+ {:start "2012-08-05T14:50"}
+ ""
+
+ {:start "2012-08-05T14:50"}
+ ""
+
+ {:start "2012-08-05T14:50"}
+ ""
+
+ {:end "2012-08-05T18:00"}
+ ""
+
+ {:start "2012-08-05T14:50"}
+ ""
+
+ {:start "2012-08-05T14:50"}
+ "2012-08-05T14:50"
+
+ {:start "2012-08-05T14:50"}
+ ""
+
+ {:start "2012-08-05T14:50"}
+ "2012-08-05T14:50"
+
+ {:start "2012-08-05T14:50"}
+ "")))
--
cgit 1.4.1