On Tue, Nov 26, 2019 at 10:16 AM sebb <seb...@gmail.com> wrote:
>
> I have committed some code to extract the form data from ICLAs.
>
> For example:
>
> https://whimsy.apache.org/secretary/icla-parse/yyyymm/hash/icla.pdf
>
> It would be useful if this could somehow be plugged into the workbench.
> For example when a PDF is classified as an ICLA.
>
> However I cannot work out how to do this.

First thing to understand is that inside the workbench, the host is
not involved except when explicitly asked.  For example, when you
click the icla button in the Categorize tab, there is no server
action.  Everything happens on the client.

Now look at whimsy/www/secretary/workbench/views/forms/icla.js.rb.  In
there is a method called "mounted" that is invoked whenever this form
is displayed.  It currently sets a few form fields.

At the bottom of this method you will want to add code that does a
POST request to the server.  These days it is safe to assume that the
browser implements the fetch function, but if you like you can use the
HTTP.post method that is defined (or even jQuery.ajax).  One of the
arguments you will need to pass to the server will need to be the
message (window.parent.location.pathname), and attachment
(@@selected).  You can see these values are added as hidden fields to
the existing form.

The implementation of the parsing of the PDF will be done in a new
file in the whimsy/www/secretary/workbench/views/actions.  If your
post request is to /actions/name, then views/actions/name will be
invoked.  If you need something different (and you likely don't), the
routing of requests is done in server.rb.

Use the arguments to get the attachment, parse the PDF and construct a
JSON object to be returned.  You can look at other files in this
directory to see how you do this (e.g., rotate_attachment).   It is as
easy as message=...; selected=...; File.read(selected.path).  The last
line of the file defines the object to be returned.

Back on the client side, use the JSON object as you like: setting
fields will cause them to be updated in the form.  For best results,
disable the input fields that you expect to be setting when you issue
the POST request and re-enable them when you get the response - that
will ensure that the secretary hasn't begun typing and has their work
overwritten.  You could use the existing @filed variable for this, but
it would be clearer if you defined a new @disabled variable and change
the fields that may be overwritten from specifying "disabled: @filed"
to "disabled: @filed or @disabled".

- Sam Ruby

Reply via email to