class ReconnectableElement(LiveElement): """ I am a live element that can disconnect and be reconnected. """ docFactory = loaders.stan( tags.div(render=tags.directive("liveElement"))[tags.button( onclick= "Nevow.Athena.page.deliveryChannel.sendCloseMessage(); return true;" )["Disconnect"], tags.button(onclick=""" Nevow.Athena.Widget.get(this).callRemote('getID').addCallback(function (result) { var e = document.createElement('div'); e.appendChild(document.createTextNode('ID: '+result)); document.body.appendChild(e); }) """)["Show ID"]]) def __init__(self): """ Create a ReconnectableElement with a unique ID """ LiveElement.__init__(self) self.currentID = counter() def getID(self): """ Retrieve my current ID. """ return self.currentID expose(getID)
def _renderReSTTag(self, ctx, content, key, readonly): namer = self._namer(key) tag=T.invisible() ta=T.textarea(name=namer('content'), id=formal_keytocssid(namer('content')), cols=self.cols, rows=self.rows)[content or ''] if readonly: ta(class_='readonly', readonly='readonly') tag[ta] if not readonly: try: import docutils except ImportError: raise else: form = iformal.IForm( ctx ) srcId = formal_keytocssid(namer('content')) previewDiv = srcId + '-preview-div' frameId = srcId + '-preview-frame' targetURL = formal_widgetResourceURLFromContext(ctx, form.name).child(key).child( srcId ) tag[T.br()] tag[T.button(onClick="return Forms.Util.previewShow('%s', '%s', '%s');"%(previewDiv, frameId, targetURL))['Preview ...']] if self.withImagePicker: tag[T.button(onclick=["return Cms.Forms.ImagePicker.popup('",srcId,"','tag')"])['Choose image ...']] tag[T.div(id=previewDiv, class_="preview-hidden")[ T.iframe(class_="preview-frame", name=frameId, id=frameId), T.br(), T.button(onClick=["return Forms.Util.previewHide('",previewDiv,"');"])['Close'] ] ] return tag
def _renderTag(self, ctx, key, value, readonly): tag = T.invisible() ta = T.textarea(name=key, id=render_cssid(key), cols=self.cols, rows=self.rows)[value or ""] if readonly: ta(class_="readonly", readonly="readonly") tag[ta] if not readonly: try: import docutils except ImportError: raise else: form = iformal.IForm(ctx) srcId = render_cssid(key) previewDiv = render_cssid(key, "preview-div") frameId = render_cssid(key, "preview-frame") targetURL = widgetResourceURLFromContext(ctx, form.name).child(key).child(srcId) tag[T.br()] onclick = ["return Forms.Util.previewShow('", previewDiv, "', '", frameId, "', '", targetURL, "');"] tag[T.button(onclick=onclick)["Preview ..."]] tag[ T.div(id=previewDiv, class_="preview-hidden")[ T.iframe(class_="preview-frame", name=frameId, id=frameId), T.br(), T.button(onclick=["return Forms.Util.previewHide('", previewDiv, "');"])["Close"], ] ] return tag
def render_customControls(self, ctx, data): handler = lambda wlc: livepage.server.handle('workloadClass', wlc) button = lambda wlc: T.button( _class='btn active', id='wlc_' + wlc, onclick=handler(wlc))[wlc] return T.div(_class='btn-group')[button('CPU'), button('MEM'), button('FS'), button('DISK'), button('NET'), button('OS')]
def render_customControls(self, ctx, data): handler = lambda wlc: livepage.server.handle('workloadClass', wlc) button = lambda wlc: T.button(_class='btn active', id='wlc_' + wlc, onclick = handler(wlc))[wlc] return T.div(_class='btn-group')[button('CPU'), button('MEM'), button('FS'), button('DISK'), button('NET'), button('OS') ]
def handle_positiveResponse(self, ctx): client = livepage.IClientHandle(ctx) client.oldNode = client.node client.node = client.node.positive if client.node == win: client.node = knowledge yield livepage.set('question', "I win!"), livepage.eol yield livepage.set( 'answer-inputs', tags.button( id="start-over", onclick=livepage.server.handle('updateDom'))["Start over"]), livepage.eol else: yield self.handle_updateDom(ctx), livepage.eol
def render(self, ctx, key, args, errors): if errors: value = args.get(key, [''])[0] itemsel = ItemSelection.fromString(value) else: itemsel = args.get(key) if itemsel is not None: value = itemsel.toString() else: value = '' return T.div[ T.div(id="%s-description"%keytocssid(ctx.key))[self.renderDescriptiveText(itemsel)], T.input(type='hidden', name=key, id=keytocssid(ctx.key), value=value), T.button(onclick='return Cms.Forms.ItemSelection.popup("%s","%s")'%(keytocssid(ctx.key),self.types))['Choose items ...'] ]
def _renderTag(self, ctx, key, value, readonly): tag = T.invisible() ta = T.textarea(name=key, id=render_cssid(key), cols=self.cols, rows=self.rows)[value or ''] if readonly: ta(class_='readonly', readonly='readonly') tag[ta] if not readonly: try: import docutils except ImportError: raise else: form = iformal.IForm(ctx) srcId = render_cssid(key) previewDiv = render_cssid(key, 'preview-div') frameId = render_cssid(key, 'preview-frame') targetURL = widgetResourceURLFromContext( ctx, form.name).child(key).child(srcId) tag[T.br()] onclick = [ "return Forms.Util.previewShow('", previewDiv, "', '", frameId, "', '", targetURL, "');" ] tag[T.button(onclick=onclick)['Preview ...']] tag[T.div(id=previewDiv, class_="preview-hidden")[ T.iframe(class_="preview-frame", name=frameId, id=frameId), T.br(), T.button(onclick=[ "return Forms.Util.previewHide('", previewDiv, "');" ])['Close']]] return tag
def render(self, ctx, key, args, errors): if errors: value = args.get(key, [''])[0] else: value = args.get(key) if value is None: value = '' img = T.invisible() if value: # TODO: work out how to find '/content' out img = T.img(src='/content%s?size=200x200'%value , class_="preview") return T.div()[ img, T.br(), T.input(type='text', name=key, id=keytocssid(ctx.key), value=value), T.button(onclick=["return Cms.Forms.ImagePicker.popup('",render_cssid(ctx.key),"','url')"])['Choose image ...'] ]
def render(self, ctx, key, args, errors): if errors: images = args.get(key, [''])[0] images = self._parseValue(images) else: images = iforms.ISequenceConvertible(self.original).fromType(args.get(key)) if images is None: images = [] imgs = T.ul(id="artwork_list_"+keytocssid(ctx.key)) for image in images: imgs[ T.li(id='item_%s'%image)[ T.img(src='/artwork/system/assets/%s/mainImage?size=100x100'%image , class_="preview"), T.a(onClick='delete_item(%s);'%image)['delete'] ] ] return T.div()[ imgs, T.br(), T.textarea(name=key, id=keytocssid(ctx.key))['\n'.join(images)], T.br(), T.button(onclick="return ArtworkPicker('%s')"%keytocssid(ctx.key))['Choose artwork ...'], T.script(type="text/javascript")[ T.xml(""" function ArtworkPicker(elementId, type) { var url = '/artwork/system/assets/artworkbrowser'; url = url + '?searchOwningId='+elementId+'&searchType='+type; var popup = window.open(url, 'ArtworkPicker', 'height=500,width=900,resizable,scrollbars'); popup.focus(); return false; } function imageListChanged(sortable) { var items = MochiKit.Sortable.Sortable.serialize(sortable).split('&'); var newOrder=[]; for(i=0;i<items.length;i++){ var item = items[i]; var id = item.split('=')[1]; newOrder.push(id); } var ta=document.getElementById('%(key)s'); ta.value=''; for(i=0;i<newOrder.length;i++) { ta.value=ta.value+'\\n'+newOrder[i]; } } function itemAdded() { MochiKit.Sortable.Sortable.create('artwork_list_%(key)s',{onUpdate:imageListChanged}); } function delete_item(delete_id) { var element=document.getElementById('item_'+delete_id); removeElement(element); var ta=document.getElementById('%(key)s'); var ids = ta.value.split('\\n'); ta.value=''; for(i=0;i<ids.length;i++) { id = ids[i]; if(delete_id==id) { continue; } ta.value=ta.value+'\\n'+id; } } function setup() { connect('artwork_list_%(key)s', 'itemAdded', itemAdded); signal('artwork_list_%(key)s', 'itemAdded'); } setup(); """%{'key': keytocssid(ctx.key)}) ] ]