Exemple #1
0
    def renderImmutable(self, ctx, key, args, errors):
        form = iformal.IForm(ctx)

        namer = self._namer(key)
        originalIdName = namer('original_id')

        # Get the original key from a hidden field in the request,
        # then try the request form.data initial data.
        originalKey = self._getFromArgs(args, originalIdName)
        if not errors and not originalKey:
            originalKey = args.get(key)
        originalKey = self._blankField(originalKey)

        if originalKey:
            # The is no uploaded file, but there is an original, so render a
            # URL to it
            if self.originalKeyIsURL:
                tmpURL = originalKey
            else:
                tmpURL = widgetResourceURL(form.name).child(key).child(
                    self.FROM_CONVERTIBLE).child(originalKey)
            yield T.p[T.img(src=tmpURL)]
        else:
            # No uploaded file, no original
            yield T.p[T.strong['Nothing uploaded']]

        if originalKey:
            # key of the original that can be used to get a file later
            yield T.input(name=originalIdName,
                          value=originalKey,
                          type='hidden')
Exemple #2
0
    def getResource(self, ctx, key, segments):
        """
            Return an Resource that contains the image, either a file
            from the resource manager, or a data object from the convertible.
        """

        if segments[0] == self.FROM_RESOURCE_MANAGER:
            # Resource manager can provide a path so return a static.File
            # instance that points to the file
            rm = iformal.IForm(ctx).resourceManager
            (mimetype, path, fileName) = rm.getResourcePath(segments[1])
            return static.File(path, mimetype), []
        elif segments[0] == self.FROM_CONVERTIBLE:
            # The convertible can provide a file like object so create a
            # static.Data instance with the data from the convertible.

            def _(result):

                mimetype, filelike, fileName = result
                data = filelike.read()
                filelike.close()
                return static.Data(data, mimetype), []

            d = defer.maybeDeferred(self.convertibleFactory(
                self.original).fromType,
                                    segments[1],
                                    context=ctx)
            d.addCallback(_)
            return d
        else:
            return None
Exemple #3
0
    def __init__(self, ctx, restWriter, key, srcId):
        self.restWriter = restWriter

        form = iformal.IForm(ctx)
        u = widgetResourceURLFromContext(
            ctx, form.name).child(key).child(srcId).child('_submit')
        self.destId = srcId + '-dest'
        formId = srcId + '-form'

        stan = T.html(
        )[T.head()[T.script(type="text/javascript")["""
                function ReSTTranslate() {
                    dest = document.getElementById('%(destId)s');
                    form = document.getElementById('%(formId)s');
                    src = parent.document.getElementById('%(srcId)s');
                    dest.value = src.value;
                    form.submit(); 
                }    

                """ %
                                                    {
                                                        'srcId': srcId,
                                                        'destId': self.destId,
                                                        'formId': formId
                                                    }]],
          T.body(
          )[T.form(id=formId, method="POST", action=u
                   )[T.input(type="hidden", name=self.destId, id=self.destId)],
            T.script(type="text/javascript")["ReSTTranslate();"], ], ]

        self.docFactory = loaders.stan(stan)
Exemple #4
0
    def _renderTag(self, ctx, key, value, readonly):
        html = []
        tag = T.textarea(name=key,
                         id=render_cssid(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 = iformal.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
Exemple #5
0
    def processInput(self, ctx, key, args):
        """
            Process the request, storing any uploaded file in the
            resource manager.
        """

        resourceManager = iformal.IForm( ctx ).resourceManager

        # Ping the resource manager with any resource ids that I know
        self._registerWithResourceManager( key, args, resourceManager )

        fileitem = inevow.IRequest(ctx).fields[key]
        name = fileitem.filename.decode(util.getPOSTCharset(ctx))
        if name:
            # Store the uploaded file in the resource manager
            resourceManager.setResource( key, fileitem.file, name )

        # Validating against an uploaded file. Should the fact that there is
        # original file meet a required field validation?
        value = resourceManager.getResourceForWidget( key )
        value = self.convertibleFactory(self.original).toType( value )
        
        # check to see if we should remove this      
        if self.removeable is True:
            remove = args.get('%s_remove'%key, [None])[0]
            if remove is not None:
                value = (None,None,None)
        
        
        return self.original.validate( value )
Exemple #6
0
    def render(self, ctx, key, args, errors):
        """
            Render the data.

            This either renders a link to the original file, if specified, and
            no new file has been uploaded. Or a link to the uploaded file.

            The request to get the data should be routed to the getResouce
            method.
        """
        form = iformal.IForm(ctx)

        namer = self._namer(key)
        resourceIdName = namer('resource_id')
        originalIdName = namer('original_id')

        # get the resource id first from the resource manager
        # then try the request
        resourceId = form.resourceManager.getResourceId(key)
        if resourceId is None:
            resourceId = self._getFromArgs(args, resourceIdName)
        resourceId = self._blankField(resourceId)

        # Get the original key from a hidden field in the request,
        # then try the request file.data initial data.
        originalKey = self._getFromArgs(args, originalIdName)
        if not errors and not originalKey:
            originalKey = args.get(key)
        originalKey = self._blankField(originalKey)

        if resourceId:
            # Have an uploaded file, so render a URL to the uploaded file
            tmpURL = widgetResourceURL(form.name).child(key).child(
                self.FROM_RESOURCE_MANAGER).child(resourceId)
            yield T.p[T.img(src=tmpURL)]
        elif originalKey:
            # The is no uploaded file, but there is an original, so render a
            # URL to it
            if self.originalKeyIsURL:
                tmpURL = originalKey
            else:
                tmpURL = widgetResourceURL(form.name).child(key).child(
                    self.FROM_CONVERTIBLE).child(originalKey)
            yield T.p[T.img(src=tmpURL)]
        else:
            # No uploaded file, no original
            yield T.p[T.strong['Nothing uploaded']]

        yield T.input(name=key, id=render_cssid(key), type='file')

        # Id of uploaded file in the resource manager
        yield T.input(name=resourceIdName, value=resourceId, type='hidden')
        if originalKey:
            # key of the original that can be used to get a file later
            yield T.input(name=originalIdName,
                          value=originalKey,
                          type='hidden')
Exemple #7
0
    def render_field(self, ctx, data):
        # No fancy widget-stuff here

        ourform = iformal.IForm(ctx)
        classes = ['field', 'subheading-field']
        ctx.tag.fillSlots('fieldId', '%s-%s-field' % (ourform.name, self.field.name))  # XXX: unused...
        ctx.tag.fillSlots('fieldClass', ' '.join(classes))
        ctx.tag.fillSlots('fieldContents', self.field.label)
        return ctx.tag
Exemple #8
0
    def render_input(self, ctx, data):
        # No fancy widget-stuff here

        ourform = iformal.IForm(ctx)
        classes = ['submit-input']
        ctx.tag.fillSlots('inputId', '%s-action-%s' % (ourform.name, self.field.name))
        ctx.tag.fillSlots('inputClass', ' '.join(classes))
        ctx.tag.fillSlots('inputName', self.field.name)  # just terminal name component for actions
        ctx.tag.fillSlots('inputValue', self.field.label)
        
        return ctx.tag
Exemple #9
0
    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
Exemple #10
0
def formErrorsFinder(ctx):
    form = iformal.IForm(ctx)
    return form.errors
Exemple #11
0
 def _storeInResourceManager(self, ctx, key, originalKey):
     resourceManager = iformal.IForm( ctx ).resourceManager
     resourceManager.setResource( key, originalKey[1], originalKey[2] )
     resourceId = resourceManager.getResourceId( key )
     return resourceId
Exemple #12
0
    def render(self, ctx, key, args, errors):
        """
            Render the data.

            This either renders a link to the original file, if specified, and
            no new file has been uploaded. Or a link to the uploaded file.

            The request to get the data should be routed to the getResouce
            method.
        """
        form = iformal.IForm( ctx )

        namer = self._namer( key )
        resourceIdName = namer( 'resource_id' )
        originalIdName = namer( 'original_id' )

        # get the resource id first from the resource manager
        # then try the request
        resourceId = form.resourceManager.getResourceId( key )
        if resourceId is None:
            resourceId = self._getFromArgs( args, resourceIdName )
        resourceId = self._blankField( resourceId )

        # Get the original key from a hidden field in the request,
        # then try the request file.data initial data.
        originalKey = self._getFromArgs( args, originalIdName )
        if not errors and not originalKey:
            originalKey = args.get( key )
        originalKey = self._blankField( originalKey )

        # if we have a removeable attribute, generate the html
        if self.removeable is True:
            checkbox = T.input(type='checkbox', name='%s_remove'%key, id=render_cssid('%s_remove'%key),class_='upload-checkbox-remove',value='remove')
            if args.get('%s_remove'%key, [None])[0] is not None:
                checkbox = checkbox = checkbox(checked='checked')
            removeableHtml = T.p[ 'check to remove', checkbox]
        else:
            removeableHtml = ''
            
        if resourceId:
            # Have an uploaded file, so render a link to the uploaded file
            tmpURL = widgetResourceURL(form.name).child(key).child( self.FROM_RESOURCE_MANAGER ).child(resourceId)
            value = form.resourceManager.getResourceForWidget( key )
            yield [ T.p[T.a(href=tmpURL)[value[2]]], removeableHtml]
        elif originalKey:
            # The is no uploaded file, but there is an original, so render a
            # URL to it
            if self.originalKeyIsURL:
                tmpURL = originalKey
                yield [ T.p[T.img(src=tmpURL)], removeableHtml ]
            else:
                # Copy the data to the resource manager and render from there
                resourceId = self._storeInResourceManager(ctx, key, originalKey)
                tmpURL = widgetResourceURL(form.name).child(key).child( self.FROM_RESOURCE_MANAGER ).child(resourceId)
                yield [ T.p[T.a(href=tmpURL)[originalKey[2]]], removeableHtml]
        else:
            # No uploaded file, no original
            yield T.p[T.strong['Nothing uploaded']]

        yield T.input(name=key, id=render_cssid(key),type='file')

        # Id of uploaded file in the resource manager
        yield T.input(name=resourceIdName,value=resourceId,type='hidden')
        if originalKey and self.originalKeyIsURL:
            # key of the original that can be used to get a file later
            yield T.input(name=originalIdName,value=originalKey,type='hidden')