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 = """
${entry['title']}
""" 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)