from turbogears import controllers, expose, flash, url, paginate
from turbogears.widgets import Widget, JSLink
import re
# from model import *
# import logging
# log = logging.getLogger("widgets.controllers")
import feedparser
from turbogears import startup
from turbogears.widgets.base import JSLink
class LocalJSLink(JSLink):
"""
Link to local Javascript files
"""
def update_params(self, d):
super(JSLink, self).update_params(d)
d["link"] = url(self.name)
class FedoraPeopleWidget(Widget):
javascript = [ LocalJSLink('widgets', '/static/js/fedorapeople.js')]
template = """
"""
params = ["entries","widgetId", "widgetUrl"]
def __init__(self, widgetUrl, widgetId=None):
self.widgetId = widgetId
self.widgetUrl = widgetUrl
self.entries = []
regex = re.compile('
')
feed = feedparser.parse('http://planet.fedoraproject.org/rss20.xml')
for entry in feed['entries']:
self.entries.append({
'link' : entry['link'],
'title' : entry['title'],
'image' : regex.match(entry['summary']).group(1)
})
def __json__(self):
return {'id': self.widgetId, 'entries': self.entries}
class FedoraPeopleData(list):
def __init__(self):
regex = re.compile('
')
feed = feedparser.parse('http://planet.fedoraproject.org/rss20.xml')
for entry in feed['entries']:
self.append({
'link' : entry['link'],
'title' : entry['title'],
'image' : regex.match(entry['summary']).group(1)
})
class Root(controllers.RootController):
@expose(template="widgets.templates.index")
def index(self):
return dict(title="Widgets Demo", thisurl='/')
'''
@expose(template="widgets.templates.tgwidget")
@expose('json')
@expose(template="genshi-text:widgets.templates.tgwidget",
as_format="plain", accept_format="text/plain",
content_type="text/plain" )
'''
@expose(template="kid:widgets.templates.tgkid")
def tgwidget(self):
thisurl = '/tgwidget'
widget = FedoraPeopleWidget(url(thisurl), 'people1')
widget2 = FedoraPeopleWidget(url(thisurl), 'people2')
print widget
print dir(widget)
print widget.javascript
print widget.retrieve_javascript()
for i in widget.javascript:
print dir(i)
print i.retrieve_javascript()
print i.render()
from turbogears.widgets import JSSource, js_location
script = JSSource("alert('Hello World');", js_location.bodybottom)
return dict(title='TurboGears Widget', thisurl='/tgwidget',
widget=widget, widget2=widget2, script=script)
@expose(template="widgets.templates.people")
@expose('json')
@expose(template="genshi-text:widgets.templates.tgwidget",
as_format="plain", accept_format="text/plain",
content_type="text/plain" )
def xincludewidget(self):
try:
entries = FedoraPeopleData()
except feedparser.urllib2.URLError:
return dict(tg_error="")
return dict(title='Genshi Widget', thisurl='/xincludewidget',
peopleData=entries)