[Seaside] DocumentHandler

Esteban Maringolo emaringolo at gmail.com
Thu Jun 4 16:26:41 UTC 2020


Hi Annick,

Yes, the #document: registers a callback with that content "ahead of
time" (it is, before it is clicked), it is meant to be used when you
already know the contents, and ideally don't instantiate it several
times.

That's why for dynamically created docs you just use the other
approach, an anchor with a callback that does something like:

html anchor
    callback: [WACurrentRequestContext value respond: [:response |
response document: self buildWAMimeDocument ]];
    with: 'Generate and and download'

Regards,

Esteban A. Maringolo

On Thu, Jun 4, 2020 at 1:00 PM Annick Fron <list at afceurope.com> wrote:
>
> Hi Esteban,
>
>         I have tried your code
>
> >>> html anchor
> >>> document: documentContents mimeType:  ( Seaside.WAMimeType main:
> >>> 'application' sub: 'pdf' ) fileName: 'YourFile.pdf';
> >>> with: 'Download PDF’
>
> but the issue is that it generates the file when the page is created, and not when the user clicks.
>
> So I have derived a new class DelayedDocumentHandler that takes a GRDelayedSend instead of a string or binary, and generates the document only if needed by evaluating the Delayed send.
> I have added also delayedDocument:mimeType:fileName: on HtmlAnchorTag.
>
> Annick
>
>
> > Le 2 juin 2020 à 15:04, Esteban Maringolo <emaringolo at gmail.com> a écrit :
> >
> > I am using both BS3 and BS4 (in a newer application).
> > In both cases using Torsten's wrapper:
> >
> > BS3: https://github.com/astares/Seaside-Bootstrap
> > BS4: https://github.com/astares/Seaside-Bootstrap4
> >
> > Regards!
> >
> > Esteban A. Maringolo
> >
> > On Tue, Jun 2, 2020 at 9:47 AM Annick Fron <list at afceurope.com> wrote:
> >>
> >> Hi Esteban,
> >>
> >>        This is the solution that I will use, thank you all for your answers !
> >>
> >>        For your records, I just use the cairo library to draw the PDF.
> >>
> >>        By the way, is anybody using the Bootstrap library with seaside ?
> >>
> >>        Annick
> >>
> >>
> >>> Le 2 juin 2020 à 13:47, Esteban Maringolo <emaringolo at gmail.com> a écrit :
> >>>
> >>> If instead of setting a callback on an anchor, you set a document, it
> >>> will be treated slightly different.
> >>>
> >>> E.g.
> >>>
> >>> You can do something like:
> >>>
> >>> html anchor
> >>> document: documentContents mimeType:  ( Seaside.WAMimeType main:
> >>> 'application' sub: 'pdf' ) fileName: 'YourFile.pdf';
> >>> with: 'Download PDF'
> >>>
> >>> This will be handled differently to a regular action continuation of a
> >>> callback and will trigger the download immediately, also the document
> >>> will be returned as a response to never expire.
> >>>
> >>> In some cases you want to use `document:` and in others it could be
> >>> more flexible to use a regular `respond:` from the
> >>> WACurrentRequestContext (e.g. if the decision on the file format or
> >>> other things are deep down in the logic, away from the anchor).
> >>>
> >>> E.g.
> >>>
> >>> WACurrentRequestContext value respond: [:response |
> >>> response
> >>>   attachmentWithFileName: self exportedFilename , '.pdf';
> >>>   doNotCache;
> >>>   contentType: ( Seaside.WAMimeType main: 'application' sub: 'pdf' );
> >>>   binary;
> >>>   nextPutAll: pdfContents;
> >>>   respond
> >>> ]
> >>>
> >>> Or directly pass an instance of WAMimeDocument to the response.
> >>>
> >>> WACurrentRequestContext value respond: [:response |
> >>> response document: aWAMimeDocument
> >>> ]
> >>>
> >>> Best regards,
> >>>
> >>> Esteban A. Maringolo
> >>>
> >>> On Tue, Jun 2, 2020 at 6:20 AM Annick Fron <list at afceurope.com> wrote:
> >>>>
> >>>> Hi, I would like to serve a custom dynamically generated PDF file, what is the best option ? Use a DocumentHandler ?
> >>>> If yes how ?
> >>>>
> >>>> Annick
> >>>> _______________________________________________
> >>>> seaside mailing list
> >>>> seaside at lists.squeakfoundation.org
> >>>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>> _______________________________________________
> >>> seaside mailing list
> >>> seaside at lists.squeakfoundation.org
> >>> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> >>
> >> _______________________________________________
> >> seaside mailing list
> >> seaside at lists.squeakfoundation.org
> >> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
> > _______________________________________________
> > seaside mailing list
> > seaside at lists.squeakfoundation.org
> > http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside
>
> _______________________________________________
> seaside mailing list
> seaside at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/seaside


More information about the seaside mailing list