blob: 3fc12cace205b5c093ed24e28dcae48b6ea37942 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
/**
* Create a overlay barrier and animate it.
*/
Tobago.Config.set("Tobago", "waitOverlayDelay", 1000);
Tobago.Config.set("Ajax", "waitOverlayDelay", 1000);
(function ($) {
$.widget("tobago.overlay", {
options: {
/**
* This boolean indicates, if the overlay is "error" or "wait".
*/
error: false,
/**
* Is this overlay for an AJAX request, or an normal submit?
* We need this information, because AJAX need to clone the animated image, but for a normal submit
* we must not clone it, because the animation stops in some browsers.
*/
ajax: false,
/**
* The delay for the wait overlay. If not set the default delay is read from Tobago.Config.
*/
waitOverlayDelay: undefined
},
overlay: null,
_create: function () {
// create the overlay
this.overlay = jQuery("<div>").addClass("tobago-page-overlay");
if (this.options.error) {
this.overlay.addClass("tobago-page-overlay-markup-error");
}
this.overlay.outerWidth(this.element.outerWidth());
this.overlay.outerHeight(this.element.outerHeight());
this.overlay.offset(this.element.offset());
jQuery(".tobago-page-menuStore").append(this.overlay);
var wait = jQuery("<div>").addClass("tobago-page-overlayCenter");
this.overlay.append(wait);
var image = jQuery(this.options.error
? "body>.tobago-page-overlayErrorPreloadedImage"
: "body>.tobago-page-overlayWaitPreloadedImage");
// in case of AJAX, we may need more of these objects, on the other side, on an normal submit
// the animation stops, if we use the clone (don't know why, seems to be needed only in WebKit)
if (this.options.ajax) {
image = image.clone();
}
image.appendTo(wait);
image.removeClass(this.options.error
? "tobago-page-overlayErrorPreloadedImage"
: "tobago-page-overlayWaitPreloadedImage");
wait.show();
var waitOverlayDelay = this.options.waitOverlayDelay
? this.options.waitOverlayDelay
: Tobago.Config.get(this.options.ajax ? "Ajax" : "Tobago", "waitOverlayDelay");
this.overlay.css({
backgroundColor: jQuery('.tobago-page').css("background-color"),
filter: 'alpha(opacity=80)', //IE
opacity: 0})
.show()
.delay(this.options.error ? 0 : waitOverlayDelay)
.animate({opacity: '0.8'}, this.options.error ? 0 : 250, "linear", function () {
// fix for IE6: reset the src attribute to enable animation
if (Tobago.browser.isMsie6) {
image.attr("src", image.attr("src"));
}
});
// create an iframe for IE6
if (Tobago.browser.isMsie6) {
var iframe = jQuery("<iframe>").addClass("tobago-page-overlay-ie6bugfix");
iframe.prop("frameBorder", 0);
iframe.attr("src", Tobago.blankPage);
iframe.css({
position: 'absolute',
top: '0px',
left: '0px',
width: this.overlay.width() + 'px',
height: this.overlay.height() + 'px'
});
this.overlay.append(iframe);
}
},
_setOption: function (key, value) {
switch (key) {
case "error":
// If the error property has been changed, recreate the overlay.
var changed = key == 'error' && value != this.options.error;
if (changed) {
this.options.error = value;
this._destroy();
this._create();
}
break;
case "ajax":
// Changing of the ajax property seems not to make sense and is not supported.
break;
}
this._super("_setOption", key, value);
},
_destroy: function () {
this.overlay.remove();
this.overlay = null;
}
});
}(jQuery));