summaryrefslogtreecommitdiff
path: root/lib/gallery.dialog.js
blob: 70f577c52ec1a8c6131aa765fd4fee947f8378dd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/**
 * Fire openDialog() and prevent links from opening
 *
 * @see openDialog()
 */
function handleDialogEvent(event) {
  openDialog(event.data.element);
  event.preventDefault();
}

/**
 * Display modal dialogs, populate dialog with trigger link's title and href
 *
 * @requires ui.core
 * @requires ui.draggable
 * @requires ui.resizable
 * @requires ui.dialog
 * @see handleDialogEvent()
 *
 * @todo Set ui-dialog-buttonpane button values equal to the original form button value
 * @todo Display loading animation on form submit
 */
function openDialog(element, on_success) {
  var sHref = $(element).attr("href");
  var sTitle = $(element).attr("title");
  var eDialog = '<div id="gDialog"></div>';

  $("body").append(eDialog);
  $("#gDialog").dialog({
    autoOpen: false,
    autoResize: false,
    draggable: true,
    height: "auto",
    width: "auto",
    modal: true,
    overlay: {
      opacity: 0.7,
      background: "black"
    },
    resizable: true,
    close: function (event, ui) {
      $("#gDialog").dialog("destroy").remove();
    }
  });
  loading("#gDialog");
  $("#gDialog").html(sHref);
  $.get(sHref, function(data) {
    loading("#gDialog");
    $("#gDialog").html(data);
    var parent = $("#gDialog").parent().parent();
    parent.css("opacity", "0.0");
    $("#gDialog").dialog("open");
    $("#ui-dialog-title-gDialog").html($("#gDialog fieldset legend:eq(0)").html());
    if (parent.width() < 400) {
      parent.css("width", 400);
    }
    parent.css({"top": $(window).height() / 2 - parent.height() / 2,
		"left": $(window).width() / 2 - parent.width() / 2,
		"opacity": "1.0"
	       });

    ajaxify_dialog = function() {
      $("#gDialog form").ajaxForm({
	dataType: "json",
	success: function(data) {
	  if (data.form) {
	    $("#gDialog form").replaceWith(data.form);
	    ajaxify_dialog();
	  }
	  if (data.result == "success") {
	    $("#gDialog").dialog("close");
	    if (on_success) {
	      on_success();
	    } else if (data.location) {
	      window.location = data.location;
	    } else {
	      window.location.reload();
	    }
	  }
	}
      });
    };
    ajaxify_dialog();
  });
  return false;
}

/**
 * Toggle the processing indicator, both large and small
 *
 * @param element ID to which to apply the loading class, including #
 */
function loading(element) {
  var size;
  switch (element) {
    case "#gDialog":
      size = "Large";
      break;
    default:
      size = "Small";
      break;
  }
  $(element).toggleClass("gLoading" + size);
}