Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Create simple Aqua dialogs from Node.js using Pashua
JavaScript
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
README.md
demo1.js
demo2.js
package.json

README.md

node-pashua

node-pashua is a simple library that makes it easy to use the Pashua application (http://www.bluem.net/de/mac/pashua/) from Node.js programs.

For the moment, it requires Pashua to be installed in your Applications folder or to be located in the same directory as the node script that is using node-pashua.

Pashua is a program to create MacOS Aqua dialogs from a simple text based description. In order to display a dialog, Pashua is run with a dialog description as argument. The dialog is shown, and the user can make selections, fill out fields etc. Once she is done, she presses a submit or cancel button on the displayed dialog. Pashua then prints whatever the user has entered into the form to its standard output and exits. In order to display multiple dialogs, Pashua must be invoked multiple times.

To use node-pashua, you need to review the Pashua documentation in order to learn what user interface elements and attributes are available.

node-pashua creates the text configuration file that describes a Pashua dialog from JavaScript data structures. Also, it parses the result string that Pashua prints into a JavaScript object that can easily be processed further. When returning values, strings are parsed into numbers when they look like integers.

Example

The following program demonstrates how node-pashua can be used to perform a simple interaction with a user using two dialog boxes:

pashua.dialog(
    function (error, result) {
        if ( result.cancel ) {
            pashua.dialog('text', { type: 'text',
                                    text: 'You canceled' });
        } else {
            pashua.dialog('text', { type: 'text',
                                    text: 'Hello ' + result.name + ', nice to meet you!\n\nI like ' + result['favorite-food'] + ', too' });
        }
    },
    {
        title: 'node-pashua test'
    },
    'name', {
        type: 'textfield',
        label: 'Please enter your name'
    },
    'favorite-food', {
        type: 'radiobutton',
        label: 'Tell me your favorite food',
        option: [ 'Pizza', 'Königsberger Klopse', 'Vogon sheep ragou' ]
    },
    'cancel', {
        type: 'cancelbutton'
    }
);

Notice that specifying a callback or window attributes is optional. The first dialog is opened with both of them specified whereas the dialogs opened in the callback only specify text fields to display. Also notice that the definition of the 'favorite-food' radio button element has the 'options' attribute specified as array.

Only one function is provided:

pashua.dialog([callback], [window-description], configuration-directive, [configuration-directive ...])

callback is a callback function of two arguments. The first argument is a string describing an error that has occured when calling Pashua or undefined if no error has occured. In the latter case, the second argument is an object with the keys being the name of user interface elements and the values being the values that the user has entered (or that have been provided as the default for the element).

window-description is an object with window attributes. The keys must be the attribute name, without the "*." prefix.

configuration-directive can be one of the following

  • Two arguments, a key and a value, specifying a full Pashua configuration directive including the user element name.

  • An array with configuration directives.

If the value is an object, the key is interpreted as user element name and all keys in the object will are attributes of that element.

In addition, some magical processing is done when an array is specified as value in the attribute object to the effect shown in the example above.

Something went wrong with that request. Please try again.