All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.tapestry5.t5-ajax.js Maven / Gradle / Ivy

/* Copyright 2011 The Apache Software Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * Defines Tapestry Ajax support, which includes sending requests and receiving
 * replies, but also includes default handlers for errors and failures, and
 * processing of Tapestry's partial page render response (a common response for
 * many types of Ajax requests).             `
 */
T5.define("ajax", function() {

    var _ = T5._;
    var $ = T5.$;
    var spi = T5.spi;

    var exceptionContainer, iframe, iframeDocument;

    function noop() {
    }

    function writeToErrorIFrame(content) {
        // Clear current content.
        iframeDocument.open();
        // Write in the new content.
        iframeDocument.write(content);
        iframeDocument.close();

    }

    function resizeExceptionDialog() {
        // Very Prototype specific!
        var dims = document.viewport.getDimensions();

        iframe.width = dims.width - 100;
        iframe.height = dims.height - (100 + 20);
    }

    /**
     * When there's a server-side failure, Tapestry sends back the exception report page as HTML.
     * This function creates and displays a dialog that presents that content to the user using
     * a created iframe element.
     * @param exceptionContext HTML markup for the exception report
     */
    function showExceptionDialog(exceptionContent) {

        if (!exceptionContainer) {
            var markup = [ "
", "", "
", "Close", "
", "
"].join(""); exceptionContainer = T5.dom.find(T5.dom.appendMarkup(document.body, markup), 'div.t-exception-container'); iframe = T5.dom.find(exceptionContainer, "iframe"); // See http://xkr.us/articles/dom/iframe-document/ iframeDocument = (iframe.contentWindow || iframe.contentDocument); if (iframeDocument.document) { iframeDocument = iframeDocument.document; } var closeButton = T5.dom.find(exceptionContainer, ".t-exception-close"); T5.dom.observe(closeButton, "click", function(event) { event.stop(); writeToErrorIFrame(""); T5.dom.hide(exceptionContainer); }); // Call it now to set initial width/height. resizeExceptionDialog(); // Very Prototype specific: // See http://groups.google.com/group/prototype-scriptaculous/browse_thread/thread/1b0ce3e94020121f/cdbab773fd8e7a4b // debounced to handle the rate at which IE sends the resizes (every pixel!) Event.observe(window, "resize", _.debounce(resizeExceptionDialog, 20)); } writeToErrorIFrame(exceptionContent); exceptionContainer.show(); } function defaultFailure(transport) { } function defaultException(exception) { } /** * Performs an AJAX request. The options object is used to identify * additional parameters to be encoded into the request, and to identify the * handlers for success and failure. *

* Option keys: *

*
parameters *
object with string keys and string values, defines additional query * parameters *
failure *
A function invoked if the Ajax request fails; the function is passed * the transport *
exception *
A function invoked if there's an exception processing the Ajax * request, the function is passed the exception *
success *
A function invoked when the Ajax response is returned successfully. * The function is passed the transport object. *
method *
The type of request, 'get' or 'post'. 'post' is the default. *
* * @param url * the URL for the request * @param options * an optional object that provides additional options. * @return not defined * */ function request(url, options) { throw "not yet implemented"; } return { defaultFailure : defaultFailure, defaultException : defaultException, defaultSuccess : noop, showExceptionDialog: showExceptionDialog, request : request }; });




© 2015 - 2025 Weber Informatics LLC | Privacy Policy