<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:red="http://redfoot.net/2002/10/red#">

  <red:Python rdf:about="http://redfoot.net/2002/11/29/rss#items">
    <red:codestr>
<![CDATA[

if not "start" in locals():
    start = 0
if not "end" in locals():
    end = 100
if not "channel" in locals():
    channel = None
channel = channel or term(request.get_parameter("channel"))

from time import mktime, strftime
from rdflib.util import first
from rdflib.constants import SEQ
from xml.sax.saxutils import quoteattr
from urllib import quote

RSS = Namespace("http://purl.org/rss/1.0/")
RED_RSS = Namespace("http://redfoot.net/2002/11/29/rss#")
DC = Namespace("http://purl.org/dc/elements/1.1/")

host = self.host or request.get_header('Host')
path_info = request.get_path_info()
path = URIRef("http://%s%s" % (host, path_info))

items = []
    
if channel:
    subjects = rednode.objects(channel, RED_RSS["item"])
else:
    subjects = rednode.subjects(TYPE, RSS["item"])
    
for subject in subjects:
    date = first(rednode.objects(subject, DC["date"]))
    if date:
        items.append((date, subject))
items.sort()
items.reverse()
items = items[start:end+1]
    
for date, subject in items:
    title = first(rednode.objects(subject, RSS["title"])) or ''
    description = first(rednode.objects(subject, RSS["description"])) or \
                  first(rednode.objects(subject, DC["description"])) or ''
    try:
        date = date.split('T')[0]
        parts = date.split('-')
        year, month, day, hh, mm, ss, wd, y, z = (int(parts[0]), int(parts[1]), int(parts[2]), 0, 0, 0, 0, 0, 0)
        t = ( year, month, day, hh, mm, ss, wd, y, z)
        date = strftime(" %B %d, %Y", t)                
    except:
        date = "parse error: expecting YYYY-MM-DD but found '%s'" % date
    
    # TODO: parameterize this... and remove duplicate code in edit_items
    response.write("""\
    <div class="rss_title">
      <a href="%s">%s</a>
    </div>
    <div class="rss_date">%s</div>
""" % (subject, title, date))

    if not channel:
        rss_channel = first(rednode.subjects(RED_RSS["item"], subject))
        if not rss_channel:
            seq = first(rednode.subjects_by_type(SEQ, None, subject))
            if seq:
                rss_channel = first(rednode.subjects(RSS["items"], seq))
        if rss_channel:
            rss_channel_title = first(rednode.objects(rss_channel, RSS["title"]))
        else:
            rss_channel_title = 'Unknown'
        response.write("""
        <div class="rss_channel">
          Source: <a href="%s">%s</a>
        </div>  
        """ % (rss_channel, rss_channel_title))

    response.write("""\
    <p>
      %s
    </p>
""" % description)
        
]]>
    </red:codestr>            
  </red:Python>          

  <red:Python rdf:about="http://redfoot.net/2002/11/29/rss#item">
    <red:codestr>
<![CDATA[

from time import mktime, strftime
from rdflib.util import first
from xml.sax.saxutils import quoteattr

RSS = Namespace("http://purl.org/rss/1.0/")
DC = Namespace("http://purl.org/dc/elements/1.1/")

host = self.host or request.get_header('Host')
path_info = request.get_path_info()
path = URIRef("http://%s%s" % (host, path_info))

subject = path
date = first(rednode.objects(subject, DC["date"]))

title = first(rednode.objects(subject, RSS["title"])) or ''
description = first(rednode.objects(subject, RSS["description"])) or \
              first(rednode.objects(subject, DC["description"])) or ''
try:
    date = date.split('T')[0]
    parts = date.split('-')
    year, month, day, hh, mm, ss, wd, y, z = (int(parts[0]), int(parts[1]), int(parts[2]), 0, 0, 0, 0, 0, 0)
    t = ( year, month, day, hh, mm, ss, wd, y, z)
    date = strftime(" %B %d, %Y", t)                
except:
    date = "parse error: expecting YYYY-MM-DD but found '%s'" % date

response.write("""\
  <h1 style="margin-bottom: 0em;">
    <a href=%s>%s</a>
  </h1>
  <h2 style="margin-top: 0em;">%s</h2>
  <p>
    %s
  </p>
""" % (quoteattr(subject), title, date, description))
        
]]>
    </red:codestr>            
  </red:Python>          


  <red:Python rdf:about="http://redfoot.net/2002/11/29/rss#edit">
    <rdfs:label>Redfoot Web Log</rdfs:label>
    <red:codestr>
<![CDATA[

if not "default_channel" in locals():
    default_channel = None

host = self.host or request.get_header('Host')
path_info = request.get_path_info()
path = URIRef("http://%s%s" % (host, path_info))

RSS = Namespace("http://purl.org/rss/1.0/")
DC = Namespace("http://purl.org/dc/elements/1.1/")
RED_RSS = Namespace("http://redfoot.net/2002/11/29/rss#")

from xml.sax.saxutils import quoteattr, escape
from urllib import quote

rednode.import_context("http://redfoot.net/2002/11/05/date_time")
dt = red_import("http://redfoot.net/2002/11/05/date_time#date_time")
date_time = dt.date_time

delete_item = request.get_parameter("delete_item")
if delete_item:
    delete_item = URIRef(delete_item)
    rednode.remove_triples((delete_item, None, None))
    rednode.remove_triples((None, RED_RSS["item"], delete_item))

item = request.get_parameter("item")
if item:
    item = URIRef(item)
else:
    path = URIRef(path)
    if not (path, None, None) in rednode or (path, TYPE, RSS[item]) in rednode:
        item = path
    else:
        item = ""

title = request.get_parameter("title")
description = request.get_parameter("description")
channels = request.get_parameters().get("channels", [])

if item:
    rss_item = rednode[item]
else:
    rss_item = None
    
if rss_item and title:
    rss_item[TYPE] = RSS["item"]
    rss_item[RSS["title"]] = Literal(title)
    rss_item[RSS["link"]] = Literal(item)
    rss_item[RSS["description"]] = Literal(description)
    rss_item[DC["date"]] = Literal(date_time())    
    if not rss_item[DC["date"]]:
        rss_item[DC["date"]] = Literal(date_time())
    rednode.remove_triples((None, RED_RSS["item"], rss_item.id))
    for channel in channels:
        rss_channel = URIRef(channel)
        rednode.add((rss_channel, RED_RSS["item"], rss_item.id))

if rss_item:
    title = rss_item[RSS["title"]]
    description = rss_item[RSS["description"]]

response.write("""
<form action="" method="post" name="log_form">
""")
response.write("""
<p>URL:<br/>
<input name="item" type="text" size="60" value=%s/><br/>
</p>
""" % quoteattr(item))

response.write("""<p>Channel:<br/><select name="channels">
<option value="">Select a Channel</option>""")

for channel in rednode.subjects(TYPE, RSS["channel"]):
    rss_channel = URIRef(channel)
    if not rss_item:
        if rss_channel==default_channel:
            response.write("""<option selected="true" """)
        else:
            response.write("""<option """)
    elif (rss_channel, RED_RSS["item"], rss_item.id) in rednode:
        response.write("""<option selected="true" """)
    else:
        response.write("""<option """)
    response.write("""value="%s">%s</option>""" % (channel, channel))
response.write("""</select></p>""")
  
response.write("""
<p>Title:<br/>
<input name="title" type="text" size="60" value=%s/></p>
""" % quoteattr(title or ''))

response.write("""
<p>Description:<br/>
<textarea name="description" rows="10" cols="60">%s</textarea>
</p>
  <input type="submit" value="submit"/>
</form>
""" % escape(description or ''))

if rss_item:
    response.write("""
<form action="" method="post" name="log_form">
  <input type="hidden" name="delete_item" value=%s/>
  <input type="submit" value="delete"/>
</form>
""" % quoteattr(item))

       

]]>
    </red:codestr>
  </red:Python>


  <red:Python rdf:about="http://redfoot.net/2002/11/29/rss#edit_items">
    <red:codestr>
<![CDATA[

from rdflib.util import first
from urllib import quote

RSS = Namespace("http://purl.org/rss/1.0/")
RED_RSS = Namespace("http://redfoot.net/2002/11/29/rss#")
DC = Namespace("http://purl.org/dc/elements/1.1/")

if not "channel" in locals():
    channel = None
channel = channel or term(request.get_parameter("channel"))

if channel:
    subjects = rednode.objects(channel, RED_RSS["item"])
else:
    subjects = rednode.subjects(TYPE, RSS["item"])

items = []
subjects = rednode.objects(channel, RED_RSS["item"])
for subject in subjects:
    date = first(rednode.objects(subject, DC["date"]))
    if date:
        items.append((date, subject))
items.sort()
items.reverse()
    
response.write("""
<form method="GET" action="add">
  <input name="item" type="text"  size="60" value=""/>
  <input type="submit" value="add"/>
</form>
""")
response.write("<ul>")

for date, subject in items:
    title = first(rednode.objects(subject, RSS["title"])) or ''
    
    response.write("""\
    <li xclass="rss_title">
      <a href="add?item=%s">%s</a>
    </li>
""" % (quote(subject), title))
response.write("</ul>")        
]]>
    </red:codestr>            
  </red:Python>          




</rdf:RDF>  
