예제 #1
0
 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 ...']
         ]
예제 #2
0
 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
예제 #3
0
    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
예제 #4
0
 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)
         ]
예제 #5
0
    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 ...']
            ]
예제 #6
0
    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
예제 #8
0
    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),
            ]
예제 #9
0
    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)})
            ]
            ]
예제 #10
0
 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)