summaryrefslogtreecommitdiff
path: root/themes/default/js/ui.init.js
blob: 53c47e36766dd3dbbf080ca2eeedd76fc360a886 (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
105
106
107
108
109
/**
 * Initialize jQuery UI and Plugin elements
 */
$("document").ready(function() {

  // Apply modal dialog class
  $(".gMenuLink").addClass("gDialogLink");
  $("#gLoginLink").addClass("gDialogLink");

  // Add Superfish menu class
  $("ul.gMenu").addClass("sf-menu");
  $("ul#gViewMenu").addClass("sf-menu");
  
  // Superfish menu options
  $('ul.sf-menu').superfish({
    delay: 500,
    animation: {
      opacity:'show',
      height:'show'
    },
    speed: 'fast'
  });

  // Reduce width of sized photo if it is wider than its parent container
  if ($("#gItem").length) {
    var containerWidth = $("#gItem").width();
    var oPhoto = $("#gItem img").filter(function() {
      return this.id.match(/gPhotoID-/);
    })
    if (containerWidth < oPhoto.width()) {
      var proportion = containerWidth / oPhoto.width();
      oPhoto.width(containerWidth);
      oPhoto.height(proportion * oPhoto.height());
    }
  }

  /**
   * Attach event listeners to open modal dialogs
   */
  var dialogLinks = $(".gDialogLink");
  for (var i=0; i < dialogLinks.length; i++) {
    $(dialogLinks[i]).bind("click", {element: dialogLinks[i]}, handleDialogEvent);
  };
  
});

/**
 * 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 dialog attributes dynamically (width, height, drag, resize)
 */
function openDialog(element) {
  var sHref = $(element).attr("href");
  var sTitle = $(element).attr("title");
  var eDialog = '<div id="gDialog"></div>';

  $("body").append(eDialog);
  var buttons = {};
  buttons["Submit"] = function() {
    var form = $("#gDialog").find("form");
    $.post(form.attr("action"), form.serialize(),
      function(data, textStatus) {
        form.html(data);
      }, "html");
  }
  buttons["Reset"] = function() {
    var form = $("#gDialog").find("form");
    form[0].reset();
  }

  $("#gDialog").dialog({
    autoResize: false,
    draggable: true,
    height: 500,
    modal: true,
    overlay: {
      opacity: 0.7,
      background: "black"
    },
    resizable: true,
    title: sTitle,
    width: 600,
    buttons: buttons,
    close: function (event, ui) {
      $("#gDialog").dialog('destroy').remove();
    }
  });
  $("#gDialog").html(sHref);
  $.get(sHref, function(data) {
    $("#gDialog").html(data);
  });
  return false;
}