The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
    <title>REST User: [% rest.fullname || rest.error %]</title>
    <script type="text/javascript" src="/static/yui/yahoo.js"></script>
    <script type="text/javascript" src="/static/yui/event.js"></script>
    <script type="text/javascript" src="/static/yui/utilities.js"></script>
    <script type="text/javascript" src="/static/yui/connection.js"></script>
    <script type="text/javascript" src="/static/yui/dom.js"></script>
    <script type="text/javascript" src="/static/json2.js"></script>
</head>
<body>
    [%
    SET method = 'POSTT';
    # Editing an existing user?
    IF rest.user_id;
        # Set the method to PUT
        method = 'PUT';
    END;
    %]
    <form id="user_form">
        <p>
            <label for="user_id">User ID:</label>
            <input id="user_id" type="text" disabled="disabled" value="[% c.req.args.0 %]"/>
        </p><p>
            <label for="fullname">Full Name:</label>
            <input id="fullname" type="text" value="[% rest.fullname %]"/>
        </p><p>
            <label for="Description">Description:</label><br/>
            <textarea name="description">[% rest.description %]</textarea>
        </p><p>
            <input type="submit" value="[% method == 'POST' ? "Create User" : "Update User" %]"/>
        </p>
    </form>
    <script type="text/javascript">
    var handleSuccess = function(o) {
        /* Object Created, check for Loc header */
        if ( o.status == "201" ) {
            var loc = o.getResponseHeader["Location"];
            if ( loc ) {
                document.location = loc;
                return true;
            }
            /* Just refresh if we did not get a location
             */
            alert("Object was created successfully");
            document.location = document.location;
        } else if ( o.status == "200" ) {
            alert("User Update OK");        
        }
    };

    var handleFailure = function(o) {
        alert("Failed! :(\n" + o.responseText);
    }

    YAHOO.util.Event.addListener(window, "load", function() {
        var callback = {
            success: handleSuccess,
            failure: handleFailure
        };
        var form = YAHOO.util.Dom.get("user_form");
        YAHOO.util.Event.addListener(form, "submit", function(e) {
            YAHOO.util.Event.preventDefault(e);
            window.setTimeout(function() {
                var uri  = '[% c.req.uri %]';

                var data = {
                    user_id:     form['user_id'].value,
                    fullname:    form['fullname'].value,
                    description: form['description'].value
                };
                YAHOO.util.Connect.setDefaultPostHeader('text/x-json');
                var request = YAHOO.util.Connect.asyncRequest(
                    '[% method %]',
                    uri,
                    callback,
                    JSON.stringify(data)
                );
            }, 200);
        });
    });
    </script>
</body>
</html>