1from nevow import tags as t, static, util, loaders, athena, inevow 2 3 4class tabbedPaneGlue: 5 """ 6 Record which holds information about the Javascript & CSS requirements 7 of L{TabbedPane} and L{TabbedPaneFragment}. 8 9 @type stylesheetPath: C{str} 10 @ivar stylesheetPath: Filesystem path of the tabbed pane stylesheet. 11 12 @type fileCSS: L{static.File} 13 @ivar fileCSS: Resource which serves L{stylesheetPath}. 14 15 @type inlineCSS: L{t.style} 16 @ivar inlineCSS: <style> tag containing the tabbedpane CSS inline. 17 """ 18 stylesheetPath = util.resource_filename('nevow', 'css/Nevow/TagLibrary/TabbedPane.css') 19 20 fileCSS = static.File(stylesheetPath, 'text/css') 21 22 inlineCSS = t.style(type_='text/css')[ t.xml(file(stylesheetPath).read()) ] 23 24 25 26class TabbedPaneFragment(athena.LiveFragment): 27 jsClass = u'Nevow.TagLibrary.TabbedPane.TabbedPane' 28 cssModule = u'Nevow.TagLibrary.TabbedPane' 29 30 docFactory = loaders.xmlstr(""" 31<div class="nevow-tabbedpane" 32 xmlns:nevow="http://nevow.com/ns/nevow/0.1" 33 xmlns:athena="http://divmod.org/ns/athena/0.7" 34 nevow:render="liveFragment" 35 style="opacity: .3"> 36 <ul class="nevow-tabbedpane-tabs" id="tab-container"> 37 <nevow:invisible nevow:render="tabs" /> 38 </ul> 39 <li nevow:pattern="tab" 40 ><athena:handler event="onclick" 41 handler="dom_tabClicked" /><nevow:attr name="class"><nevow:slot 42 name="class" /></nevow:attr><nevow:slot name="tab-name" /></li> 43 <div nevow:pattern="page"> 44 <nevow:attr name="class"><nevow:slot name="class" /></nevow:attr> 45 <nevow:slot name="page-content" /> 46 </div> 47 <div id="pane-container"><nevow:invisible nevow:render="pages" /></div> 48</div>""".replace('\n', '')) 49 50 def __init__(self, pages, selected=0, name='default'): 51 self.pages = pages 52 self.selected = selected 53 self.name = name 54 55 super(TabbedPaneFragment, self).__init__() 56 57 def getInitialArguments(self): 58 return (unicode(self.pages[self.selected][0], 'utf-8'),) 59 60 def render_tabs(self, ctx, data): 61 tabPattern = inevow.IQ(self.docFactory).patternGenerator('tab') 62 for (i, (name, content)) in enumerate(self.pages): 63 if self.selected == i: 64 cls = 'nevow-tabbedpane-selected-tab' 65 else: 66 cls = 'nevow-tabbedpane-tab' 67 yield tabPattern.fillSlots( 68 'tab-name', name).fillSlots( 69 'class', cls) 70 71 def render_pages(self, ctx, data): 72 pagePattern = inevow.IQ(self.docFactory).patternGenerator('page') 73 for (i, (name, content)) in enumerate(self.pages): 74 if self.selected == i: 75 cls = 'nevow-tabbedpane-selected-pane' 76 else: 77 cls = 'nevow-tabbedpane-pane' 78 yield pagePattern.fillSlots( 79 'page-content', content).fillSlots( 80 'class', cls) 81 82__all__ = [ "tabbedPaneGlue", "TabbedPaneFragment" ] 83 84 85