diff options
Diffstat (limited to 'lib/gallery.panel.js')
| -rw-r--r-- | lib/gallery.panel.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/lib/gallery.panel.js b/lib/gallery.panel.js new file mode 100644 index 0000000..0683c53 --- /dev/null +++ b/lib/gallery.panel.js @@ -0,0 +1,100 @@ +(function($) { + $.widget("ui.gallery_panel", { + _init: function() { + var self = this; + this.element.click(function(event) { + event.preventDefault(); + var element = event.currentTarget; + var parent = $(element).parent().parent(); + var sHref = $(element).attr("href"); + var parentClass = $(parent).attr("class"); + var ePanel = "<tr id=\"g-panel\"><td colspan=\"6\"></td></tr>"; + + // We keep track of the open vs. closed state by looking to see if there' + // an orig_text attr. If that attr is missing, then the panel is closed + // and we want to open it + var should_open = !$(element).attr("orig_text"); + + // Close any open panels and reset their button text + if ($("#g-panel").length) { + $("#g-panel").slideUp("slow").remove(); + $.each($(".g-panel-link"), + function() { + if ($(this).attr("orig_text")) { + $(this).children(".g-button-text").text($(this).attr("orig_text")); + $(this).attr("orig_text", ""); + } + } + ); + } + + if (should_open) { + $(parent).after(ePanel); + $("#g-panel td").html(sHref); + $.ajax({ + url: sHref, + type: "GET", + beforeSend: function(xhr) { + // Until we convert to jquery 1.4, we need to save the + // XMLHttpRequest object + 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-panel td").html(content); + self._ajaxify_panel(); + if ($(element).attr("open_text")) { + $(element).attr("orig_text", $(element).children(".g-button-text").text()); + $(element).children(".g-button-text").text($(element).attr("open_text")); + } + $("#g-panel").addClass(parentClass).show().slideDown("slow"); + } + }); + } + + return false; + }); + }, + + _ajaxify_panel: function () { + var self = this; + $("#g-panel td 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-panel td").html(data.html); + self._ajaxify_panel(); + } + if (data.result == "success") { + self._trigger("success", null, {}); + if (data.location) { + window.location = data.location; + } else { + window.location.reload(); + } + } + } + }); + }, + + success: function(event, ui) {} + }); + })(jQuery); |
