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