summaryrefslogtreecommitdiff
path: root/rel/overlay/share/www/script/jquery.dialog.js
diff options
context:
space:
mode:
Diffstat (limited to 'rel/overlay/share/www/script/jquery.dialog.js')
-rw-r--r--rel/overlay/share/www/script/jquery.dialog.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/rel/overlay/share/www/script/jquery.dialog.js b/rel/overlay/share/www/script/jquery.dialog.js
new file mode 100644
index 00000000..02c0c497
--- /dev/null
+++ b/rel/overlay/share/www/script/jquery.dialog.js
@@ -0,0 +1,96 @@
+// 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.
+
+(function($) {
+
+ $.fn.centerBox = function() {
+ return this.each(function() {
+ var s = this.style;
+ s.left = (($(window).width() - $(this).width()) / 2) + "px";
+ s.top = (($(window).height() - $(this).height()) / 2) + "px";
+ });
+ }
+
+ $.showDialog = function(url, options) {
+ options = options || {};
+ options.load = options.load || function() {};
+ options.cancel = options.cancel || function() {};
+ options.validate = options.validate || function() { return true };
+ options.submit = options.submit || function() {};
+
+ var overlay = $('<div id="overlay" style="z-index:1001"></div>')
+ .css("opacity", "0");
+ var dialog = $('<div id="dialog" style="z-index:1002;position:fixed;display:none;"></div>');
+ if ($.browser.msie) {
+ var frame = $('<iframe id="overlay-frame" style="z-index:1000;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="javascript:false"></iframe>')
+ .css("opacity", "0").appendTo(document.body);
+ if (parseInt($.browser.version)<7) {
+ dialog.css("position", "absolute");
+ overlay.css("position", "absolute");
+ $("html,body").css({width: "100%", height: "100%"});
+ }
+ }
+ overlay.appendTo(document.body).fadeTo(100, 0.6);
+ dialog.appendTo(document.body).addClass("loading").centerBox().fadeIn(400);
+
+ $(document).keydown(function(e) {
+ if (e.keyCode == 27) dismiss(); // dismiss on escape key
+ });
+ function dismiss() {
+ dialog.fadeOut("fast", function() {
+ $("#dialog, #overlay, #overlay-frame").remove();
+ });
+ $(document).unbind("keydown");
+ }
+ overlay.click(function() { dismiss(); });
+
+ function showError(name, message) {
+ var input = dialog.find(":input[name=" + name + "]");
+ input.addClass("error").next("div.error").remove();
+ $('<div class="error"></div>').text(message).insertAfter(input);
+ }
+
+ $.get(url, function(html) {
+ $(html).appendTo(dialog);
+ dialog.removeClass("loading").addClass("loaded").centerBox().each(function() {
+ options.load(dialog.children()[0]);
+ $(":input:first", dialog).each(function() { this.focus() });
+ $("button.cancel", dialog).click(function() { // dismiss on cancel
+ dismiss();
+ options.cancel();
+ });
+ $("form", dialog).submit(function(e) { // invoke callback on submit
+ e.preventDefault();
+ dialog.find("div.error").remove().end().find(".error").removeClass("error");
+ var data = {};
+ $.each($("form :input", dialog).serializeArray(), function(i, field) {
+ data[field.name] = field.value;
+ });
+ $("form :file", dialog).each(function() {
+ data[this.name] = this.value; // file inputs need special handling
+ });
+ options.submit(data, function callback(errors) {
+ if ($.isEmptyObject(errors)) {
+ dismiss();
+ } else {
+ for (var name in errors) {
+ showError(name, errors[name]);
+ }
+ }
+ });
+ return false;
+ });
+ });
+ });
+ }
+
+})(jQuery);