summaryrefslogtreecommitdiff
path: root/lib/gallery.panel.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gallery.panel.js')
-rw-r--r--lib/gallery.panel.js100
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);