summaryrefslogtreecommitdiff
path: root/lib/gallery.dialog.js
diff options
context:
space:
mode:
authorNathan Kinkade <nath@nkinka.de>2013-03-19 16:41:42 +0000
committerNathan Kinkade <nath@nkinka.de>2013-03-19 16:41:42 +0000
commit3908e37d965fa76ea774e76ddf42365a872a5f27 (patch)
tree457e1a1e465f83855eee96ba287cd91f1623395c /lib/gallery.dialog.js
parent711651f727e093cc7357a6bbff6bd992fd6dfd80 (diff)
parent1eab94f6062b5f54ea5d9db01d968e7195f3de9d (diff)
Merge branch 'master' of git://github.com/gallery/gallery3
Diffstat (limited to 'lib/gallery.dialog.js')
-rw-r--r--lib/gallery.dialog.js396
1 files changed, 179 insertions, 217 deletions
diff --git a/lib/gallery.dialog.js b/lib/gallery.dialog.js
index 3115532b..1c810171 100644
--- a/lib/gallery.dialog.js
+++ b/lib/gallery.dialog.js
@@ -1,221 +1,183 @@
-
(function($) {
- $.widget("ui.gallery_dialog", {
- _init: function() {
- var self = this;
- if (!self.options.immediate) {
- this.element.click(function(event) {
- event.preventDefault();
- self._show($(event.currentTarget).attr("href"));
- return false;
- });
- } else {
- self._show(this.element.attr("href"));
- }
- },
-
- _show: function(sHref) {
- var self = this;
- var eDialog = '<div id="g-dialog"></div>';
-
- if ($("#g-dialog").length) {
- $("#g-dialog").dialog("close");
- }
- $("body").append(eDialog);
-
- if (!self.options.close) {
- self.options.close = self.close_dialog;
- }
- $("#g-dialog").dialog(self.options);
-
- $("#g-dialog").gallery_show_loading();
-
- $.ajax({
- url: sHref,
- type: "GET",
- beforeSend: function(xhr) {
- // Until we convert to jquery 1.4, we need to save the XMLHttpRequest object so that we
- // can detect the mime type of the reply
- this.xhrData = xhr;
- },
- success: function(data, textStatus, xhr) {
- // Pre jquery 1.4, get the saved XMLHttpRequest object
- if (xhr == undefined) {
- xhr = this.xhrData;
- }
- var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
-
- var content = "";
- if (mimeType[1] == "application/json") {
- data = JSON.parse(data);
- content = data.html;
- } else {
- content = data;
- }
-
- $("#g-dialog").html(content).gallery_show_loading();
-
- if ($("#g-dialog form").length) {
- self.form_loaded(null, $("#g-dialog form"));
- }
- self._layout();
-
- $("#g-dialog").dialog("open");
- self._set_title();
-
- if ($("#g-dialog form").length) {
- self._ajaxify_dialog();
- }
- }
- });
- $("#g-dialog").dialog("option", "self", self);
- },
-
- error: function(xhr, textStatus, errorThrown) {
- $("#g-dialog").html(xhr.responseText);
- self._set_title();
- self._layout();
- },
-
- _layout: function() {
- var dialogWidth;
- var dialogHeight = $("#g-dialog").height();
- var cssWidth = new String($("#g-dialog form").css("width"));
- var childWidth = cssWidth.replace(/[^0-9]/g,"");
- var size = $.gallery_get_viewport_size();
- if ($("#g-dialog iframe").length) {
- dialogWidth = size.width() - 100;
- // Set the iframe width and height
- $("#g-dialog iframe").width("100%").height(size.height() - 100);
- } else if ($("#g-dialog .g-dialog-panel").length) {
- dialogWidth = size.width() - 100;
- $("#g-dialog").dialog("option", "height", size.height() - 100);
- } else if (childWidth == "" || childWidth > 300) {
- dialogWidth = 500;
- }
- $("#g-dialog").dialog('option', 'width', dialogWidth);
- },
-
- form_loaded: function(event, ui) {
- // Should be defined (and localized) in the theme
- MSG_CANCEL = MSG_CANCEL || 'Cancel';
- var eCancel = '<a href="#" class="g-cancel g-left">' + MSG_CANCEL + '</a>';
- if ($("#g-dialog .submit").length) {
- $("#g-dialog .submit").addClass("ui-state-default ui-corner-all");
- $.fn.gallery_hover_init();
- $("#g-dialog .submit").parent().append(eCancel);
- $("#g-dialog .g-cancel").click(function(event) {
- $("#g-dialog").dialog("close");
- event.preventDefault();
- });
+ $.widget("ui.gallery_dialog", {
+ options: {
+ autoOpen: false,
+ autoResize: true,
+ modal: true,
+ resizable: false,
+ position: "center"
+ },
+ _init: function() {
+ var self = this;
+ if (!self.options.immediate) {
+ this.element.click(function(event) {
+ event.preventDefault();
+ self._show($(event.currentTarget).attr("href"));
+ return false;
+ });
+ } else {
+ self._show(this.element.attr("href"));
+ }
+ },
+
+ _show: function(sHref) {
+ var self = this;
+ var eDialog = '<div id="g-dialog"></div>';
+
+ if ($("#g-dialog").length) {
+ $("#g-dialog").dialog("close");
+ }
+ $("body").append(eDialog);
+
+ if (!self.options.close) {
+ self.options.close = self.close_dialog;
+ }
+ $("#g-dialog").dialog(self.options);
+
+ $("#g-dialog").gallery_show_loading();
+
+ $.ajax({
+ url: sHref,
+ type: "GET",
+ success: function(data, textStatus, xhr) {
+ var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
+
+ var content = "";
+ if (mimeType[1] == "application/json") {
+ content = unescape(data.html);
+ } else {
+ content = data;
+ }
+
+ $("#g-dialog").html(content).gallery_show_loading();
+
+ if ($("#g-dialog form").length) {
+ self.form_loaded(null, $("#g-dialog form"));
+ }
+ self._layout();
+
+ $("#g-dialog").dialog("open");
+ self._set_title();
+
+ if ($("#g-dialog form").length) {
+ self._ajaxify_dialog();
+ }
}
- $("#g-dialog .ui-state-default").hover(
- function() {
- $(this).addClass("ui-state-hover");
- },
- function() {
- $(this).removeClass("ui-state-hover");
- }
- );
- },
-
- close_dialog: function(event, ui) {
- var self = $("#g-dialog").dialog("option", "self");
- if ($("#g-dialog form").length) {
- self._trigger("form_closing", null, $("#g-dialog form"));
- }
- self._trigger("dialog_closing", null, $("#g-dialog"));
- $("#g-dialog").dialog("destroy").remove();
- },
-
- _ajaxify_dialog: function() {
- var self = this;
- $("#g-dialog form").ajaxForm({
- beforeSubmit: function(formData, form, options) {
- form.find(":submit")
- .addClass("ui-state-disabled")
- .attr("disabled", "disabled");
- return true;
- },
- beforeSend: function(xhr) {
- // Until we convert to jquery 1.4, we need to save the XMLHttpRequest object so that we
- // can detect the mime type of the reply
- this.xhrData = xhr;
- },
- success: function(data) {
- // Pre jquery 1.4, get the saved XMLHttpRequest object
- xhr = this.xhrData;
- if (xhr) {
- var mimeType = /^(\w+\/\w+)\;?/.exec(xhr.getResponseHeader("Content-Type"));
-
- var content = "";
- if (mimeType[1] == "application/json") {
- data = JSON.parse(data);
- } else {
- data = {"html": escape(data)};
- }
- } else {
- // Uploading files (eg: watermark) uses a fake xhr in jquery.form.js so
- // all we have is in the data field, which should be some very simple JSON.
- // Weirdly enough in Chrome the result gets wrapped in a <pre> element and
- // looks like this:
- // <pre style="word-wrap: break-word; white-space: pre-wrap;">{"result":"success",
- // "location":"\/~bharat\/gallery3\/index.php\/admin\/watermarks"}</pre>
- // bizarre. Strip that off before parsing.
- data = JSON.parse(data.match("({.*})")[0]);
- }
-
- if (data.html) {
- $("#g-dialog").html(data.html);
- $("#g-dialog").dialog("option", "position", "center");
- $("#g-dialog form :submit").removeClass("ui-state-disabled")
- .attr("disabled", null);
- self._set_title();
- self._ajaxify_dialog();
- self.form_loaded(null, $("#g-dialog form"));
- if (typeof data.reset == 'function') {
- eval(data.reset + '()');
- }
- }
- if (data.result == "success") {
- if (data.location) {
- window.location = data.location;
- } else {
- window.location.reload();
- }
- }
- },
- error: function(xhr, textStatus, errorThrown) {
- $("#g-dialog").html(xhr.responseText);
- self._set_title();
- self._layout();
- }
- });
- },
-
- _set_title: function() {
- // Remove titlebar for progress dialogs or set title
- if ($("#g-dialog #g-progress").length) {
- $(".ui-dialog-titlebar").remove();
- } else if ($("#g-dialog h1").length) {
- $("#g-dialog").dialog('option', 'title', $("#g-dialog h1:eq(0)").html());
- $("#g-dialog h1:eq(0)").hide();
- } else if ($("#g-dialog fieldset legend").length) {
- $("#g-dialog").dialog('option', 'title', $("#g-dialog fieldset legend:eq(0)").html());
+ });
+ $("#g-dialog").dialog("option", "self", self);
+ },
+
+ error: function(xhr, textStatus, errorThrown) {
+ $("#g-dialog").html(xhr.responseText);
+ self._set_title();
+ self._layout();
+ },
+
+ _layout: function() {
+ var dialogWidth;
+ var dialogHeight = $("#g-dialog").height();
+ var childWidth = $("#g-dialog form").width();
+ var size = $.gallery_get_viewport_size();
+ if ($("#g-dialog iframe").length) {
+ dialogWidth = size.width() - 100;
+ // Set the iframe width and height
+ $("#g-dialog iframe").width("100%").height(size.height() - 100);
+ } else if ($("#g-dialog .g-dialog-panel").length) {
+ dialogWidth = size.width() - 100;
+ $("#g-dialog").dialog("option", "height", size.height() - 100);
+ } else if (childWidth <= 150 || childWidth > 300) {
+ dialogWidth = 500;
+ } else {
+ dialogWidth = 300;
+ }
+ $("#g-dialog").dialog('option', 'width', dialogWidth);
+ },
+
+ form_loaded: function(event, ui) {
+ // Should be defined (and localized) in the theme
+ MSG_CANCEL = MSG_CANCEL || 'Cancel';
+ var eCancel = '<button class="g-cancel ui-state-default ui-corner-all">' + MSG_CANCEL + '</button>';
+ if ($("#g-dialog .submit").length) {
+ $("#g-dialog .submit").addClass("ui-state-default ui-corner-all");
+ $("#g-dialog .submit").parent().append(eCancel);
+ $.fn.gallery_hover_init();
+ $("#g-dialog .g-cancel").click(function(event) {
+ $("#g-dialog").dialog("close");
+ event.preventDefault();
+ });
}
- },
-
- form_closing: function(event, ui) {},
- dialog_closing: function(event, ui) {}
- });
-
- $.extend($.ui.gallery_dialog, {
- defaults: {
- autoOpen: false,
- autoResize: true,
- modal: true,
- resizable: false,
- position: "center"
- }
- });
+ $("#g-dialog .ui-state-default").hover(
+ function() {
+ $(this).addClass("ui-state-hover");
+ },
+ function() {
+ $(this).removeClass("ui-state-hover");
+ }
+ );
+ },
+
+ close_dialog: function(event, ui) {
+ var self = $("#g-dialog").dialog("option", "self");
+ if ($("#g-dialog form").length) {
+ self._trigger("form_closing", null, $("#g-dialog form"));
+ }
+ self._trigger("dialog_closing", null, $("#g-dialog"));
+ $("#g-dialog").dialog("destroy").remove();
+ },
+
+ _ajaxify_dialog: function() {
+ var self = this;
+ $("#g-dialog form").ajaxForm({
+ dataType: "json",
+ beforeSubmit: function(formData, form, options) {
+ form.find(":submit")
+ .addClass("ui-state-disabled")
+ .attr("disabled", "disabled");
+ return true;
+ },
+ success: function(data) {
+ if (data.html) {
+ $("#g-dialog").html(data.html);
+ $("#g-dialog").dialog("option", "position", "center");
+ $("#g-dialog form :submit").removeClass("ui-state-disabled")
+ .attr("disabled", null);
+ self._set_title();
+ self._ajaxify_dialog();
+ self.form_loaded(null, $("#g-dialog form"));
+ if (typeof data.reset == 'function') {
+ eval(data.reset + '()');
+ }
+ }
+ if (data.result == "success") {
+ if (data.location) {
+ window.location = data.location;
+ } else {
+ window.location.reload();
+ }
+ }
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ $("#g-dialog").html(xhr.responseText);
+ self._set_title();
+ self._layout();
+ }
+ });
+ },
+
+ _set_title: function() {
+ // Remove titlebar for progress dialogs or set title
+ if ($("#g-dialog #g-progress").length) {
+ $(".ui-dialog-titlebar").remove();
+ } else if ($("#g-dialog h1").length) {
+ $("#g-dialog").dialog('option', 'title', $("#g-dialog h1:eq(0)").html());
+ $("#g-dialog h1:eq(0)").hide();
+ } else if ($("#g-dialog fieldset legend").length) {
+ $("#g-dialog").dialog('option', 'title', $("#g-dialog fieldset legend:eq(0)").html());
+ }
+ $(".ui-dialog-title").width('auto');
+ },
+
+ form_closing: function(event, ui) {},
+ dialog_closing: function(event, ui) {}
+ });
})(jQuery);