From 63edb54f04e19d98625366807e3c482bef44f836 Mon Sep 17 00:00:00 2001 From: Matthias Andreas Benkard Date: Fri, 6 Mar 2009 21:46:25 +0100 Subject: Show feed entries using JavaScript if possible. --- cljssss-g.clj | 17 +++++++++++++++++ index.st | 13 ++++++++----- public/feed-list.js | 45 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 public/feed-list.js diff --git a/cljssss-g.clj b/cljssss-g.clj index 02c5eeb..79ff25a 100644 --- a/cljssss-g.clj +++ b/cljssss-g.clj @@ -272,6 +272,21 @@ to merely being replaced with a div element)?" "xhtml_content_p" (not (nil? xhtml-content)) "xhtml_content" xhtml-content})))))) +(defn show-entry-xml [entry] + (with-db + (sql/with-query-results + [{link :link, title :title}] + [(str "SELECT entry.link, entry.title, entry.id" + " FROM entry, feed_entry_link, user_feed_link" + " WHERE entry.id = ?") + entry] + (str "" + "" + "" link "" + "" title "" + "" (escape-xml (entry-xhtml-content entry)) "" + "")))) + (defmacro with-session "Rebind Compojure's magic lexical variables as vars." [& body] @@ -313,6 +328,8 @@ to merely being replaced with a div element)?" (and (params :feed) (Integer/parseInt (params :feed))) (Integer/parseInt entry-id-string))))) + (GET "/entry-xml" + (with-session (show-entry-xml (params :id)))) (GET "*" (serve-file path)) (ANY "*" diff --git a/index.st b/index.st index 7b505a4..0b3f688 100644 --- a/index.st +++ b/index.st @@ -1,4 +1,7 @@ -$header(title=title)$ +$header_start(title=title)$ + + +$header_end()$

$title$

@@ -27,15 +30,15 @@ $if(entries)$ $entries:{entry | $if(entry.active_p)$ $! FIXME: Show content inline if possible. !$ -
  • -

    $entry.title$

    +
  • +

    $entry.title$

    $if(xhtml_content_p)$
    $xhtml_content$
    $endif$
  • $else$ -
  • - $entry.title$ +
  • + $entry.title$
  • $endif$ }$ diff --git a/public/feed-list.js b/public/feed-list.js new file mode 100644 index 0000000..cce8911 --- /dev/null +++ b/public/feed-list.js @@ -0,0 +1,45 @@ +YUI({base: "/yui3/build/", timeout: 10000}).use("io-base", function(Y) { + function successHandler(entry_id) { + function updateEntry(id, response) { + var elem = Y.Node.get("#entry-" + entry_id + "-container"); + var xml = response.responseXML.documentElement; + var uri = xml.getElementsByTagName('uri')[0].firstChild.nodeValue; + var title = xml.getElementsByTagName('title')[0].firstChild.nodeValue; + var content = xml.getElementsByTagName('content')[0].firstChild.nodeValue; + elem.set("innerHTML", '

    ' + title + '

    ' + + '
    ' + content + '
    '); + } + + return updateEntry; + } + + function failureHandler(entry_id) { + function updateEntry(id, response) { + var elem = Y.Node.get("#entry-" + entry_id + "-container"); + // FIXME + alert ("No content."); + } + + return updateEntry; + } + + function getEntry(event) { + event.preventDefault(); + var id_string = this.get('id'); + var id = id_string.slice(6); + var queryURI = '/entry-xml?id=' + id; + Y.log("Querying server for entry: " + id, "info", "cljssss^g"); + var request = Y.io(queryURI, { + method: "GET", + on: { + success: successHandler(id), + failure: failureHandler(id) + }}); + } + +// Y.on("click", getEntry, ".entry-link"); + Y.Node.all(".entry-link").each(function(elem, key) { + Y.on("click", getEntry, elem, elem); + }); + +}); -- cgit v1.2.3