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 rend(self, ctx, data): tag = T.invisible[self.loader.load()] tag.fillSlots('formName', self.original.name) tag.fillSlots('formId', util.keytocssid(ctx.key)) tag.fillSlots('formAction', url.here) tag.fillSlots('formErrors', self._renderErrors) tag.fillSlots('formItems', self._renderItems) tag.fillSlots('formActions', self._renderActions) return tag
def _renderReSTTag(self, ctx, content, key, readonly): namer = self._namer(key) tag=T.invisible() ta=T.textarea(name=namer('content'), id=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 = iforms.IForm( ctx ) srcId = keytocssid(namer('content')) previewDiv = srcId + ['-preview-div'] frameId = srcId + ['-preview-frame'] targetURL = widgetResourceURLFromContext(ctx, form.name).child(key).child( srcId ) tag[T.br()] tag[T.button(onClick=["return Forms.Util.previewShow('",previewDiv,"', '",frameId,"', '",targetURL,"');"] )['Preview ...']] if self.withImagePicker: tag[T.button(onclick=["return Cms.Forms.ImagePicker.popup('",srcId,"','tag')"])['Choose image ...']] if self.withItemSelection: if self.itemSelectionTemplates: itemSelectionTemplates = ','.join(self.itemSelectionTemplates) else: itemSelectionTemplates = '' if self.itemSelectionTypes: itemSelectionTypes = encodeTypes(self.itemSelectionTypes) else: itemSelectionTypes = '' tag[T.button(onclick=["return Cms.Forms.ItemSelection.popupForReST('",srcId,"', '",itemSelectionTypes,"', 'rest')"])['Choose items ...']] 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('%s');"%(previewDiv))['Close'] ] ] return tag
def renderImmutable(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(id="%s-description"%keytocssid(ctx.key))[ self.renderDescriptiveText(itemsel) ]
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 renderImmutable(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.invisible() for image in images: imgs[ T.img(src='/artwork/system/assets/%s/mainImage?size=100x100'%image , class_="preview") ] return T.div()[ imgs, T.br(), T.textarea(class_="readonly", readonly="readonly", name=key, id=keytocssid(ctx.key))['\n'.join(images)], ]
def _renderTag(self, ctx, key, value, readonly): html = [] tag=T.textarea(name=key, id=keytocssid(key), cols=self.cols, rows=self.rows)[value or ''] if readonly: tag(class_='readonly', readonly='readonly') html.append(tag) if self.values is None: return html def renderOptions(ctx,options): for value,label in options: yield T.option(value=value)[label] selecttrigger = T.select(name='%s__selecttrigger'%key, data=self.values)[ renderOptions ] form = iforms.IForm( ctx ) js = T.xml("var x = document.getElementById('%(form)s');x.%(key)s.value += x.%(key)s__selecttrigger.options[x.%(key)s__selecttrigger.options.selectedIndex].value + "\\n";"%{'key':key,'form':form.name}) aonclick = T.a(onclick=js)[ 'add' ] html.append(T.div(class_="add")[selecttrigger,aonclick]) return html
def renderImmutable(self, ctx, key, args, errors): if errors: value = args.get(key, [''])[0] else: value = args.get(key) if value is None: value = '' previewValue = '' if value: previewValue='/content%s?size=200x200'%value return T.div()[ T.img(src=previewValue, class_="preview"), T.br(), T.input(type='text', class_="readonly", readonly="readonly", name=key, id=keytocssid(ctx.key), value=value), ]
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)}) ] ]
def _renderAction(self, ctx, data): return T.input(type='submit', id='%s-action-%s'%(util.keytocssid(ctx.key), data.name), name=data.name, value=data.label)