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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
|
(function ($) {
$.fn.gallery_show_message = function(message) {
return this.each(function(i){
$(this).effect("highlight", {"color": "white"}, 3000);
$(this).animate({opacity: 1.0}, 6000);
});
};
// Make the height of all items the same as the tallest item within the set
$.fn.equal_heights = function() {
var tallest_height = 0;
$(this).each(function(){
if ($(this).height() > tallest_height) {
tallest_height = $(this).height();
}
});
return $(this).height(tallest_height);
};
// Vertically align a block element's content
$.fn.gallery_valign = function(container) {
return this.each(function(i){
if (container == null) {
container = 'div';
}
$(this).html("<" + container + " class=\"gValign\">" + $(this).html() + "</" + container + ">");
var el = $(this).children(container + ".gValign");
var elh = $(el).height();
var ph = $(this).height();
var nh = (ph - elh) / 2;
$(el).css('margin-top', nh);
});
};
// Get the viewport size
$.gallery_get_viewport_size = function() {
return {
width : function() {
return $(window).width();
},
height : function() {
return $(window).height();
}
};
};
/**
* Toggle the processing indicator, both large and small
* @param elementID Target ID, including #, to apply .gLoadingSize
*/
$.fn.gallery_show_loading = function() {
return this.each(function(i){
var size;
switch ($(this).attr("id")) {
case "#g-dialog":
case "#gPanel":
size = "Large";
break;
default:
size = "Small";
break;
}
$(this).toggleClass("gLoading" + size);
});
};
/**
* Reduce the width of an image if it's wider than its parent container
* @param elementID The image container's ID
*/
$.fn.gallery_fit_photo = function() {
return this.each(function(i) {
var container_width = $(this).width();
var photo = $(this).gallery_get_photo();
var photo_width = photo.width();
if (container_width < photo_width) {
var proportion = container_width / photo_width;
photo.width(container_width);
photo.height(proportion * photo.height());
}
});
};
/**
* Get a thumbnail or resize photo within a container
* @param elementID The image container's ID
* @return object
*/
$.fn.gallery_get_photo = function() {
var photo = $(this).find("img").filter(function() {
return this.id.match(/gPhotoId-\d+/);
});
return photo;
};
/**
* Get the sum of an element's height, margin-top, and margin-bottom
* @param elementID the element's ID
* @return int
*/
$.fn.gallery_height = function() {
var ht = $(this).height();
var mt = parseInt($(this).css("margin-top"));
var mb = parseInt($(this).css("margin-bottom"));
return ht + parseInt(mt) + parseInt(mb);
};
// Add hover state to buttons
$.fn.gallery_hover_init = function() {
$(".ui-state-default").hover(
function(){
$(this).addClass("ui-state-hover");
},
function(){
$(this).removeClass("ui-state-hover");
}
);
};
// Ajax handler for replacing an image, used in Ajax thumbnail rotation
$.gallery_replace_image = function(data, thumb) {
$(thumb).attr({src: data.src, width: data.width, height: data.height});
};
$.fn.gallery_context_menu = function() {
if ($(".gContextMenu li").length) {
var hover_target = ".gContextMenu";
var in_progress = 0;
$(hover_target + " *").removeAttr('title');
$(hover_target + " ul").hide();
$(hover_target).hover(
function() {
if (in_progress == 0) {
$(this).find("ul").slideDown("fast", function() { in_progress = 1; });
$(this).find(".g-dialogLink").gallery_dialog();
$(this).find(".gAjaxLink").gallery_ajax();
}
},
function() {
$(this).find("ul").slideUp("slow", function() { in_progress = 0; });
}
);
}
};
$.gallery_auto_fit_window = function(imageWidth, imageHeight) {
var size = $.gallery_get_viewport_size();
var width = size.width() - 6,
height = size.height() - 6;
var ratio = width / imageWidth;
imageWidth *= ratio;
imageHeight *= ratio;
/* after scaling the width, check that the height fits */
if (imageHeight > height) {
ratio = height / imageHeight;
imageWidth *= ratio;
imageHeight *= ratio;
}
// handle the case where the calculation is almost zero (2.14e-14)
return {
top: Number((height - imageHeight) / 2),
left: Number((width - imageWidth) / 2),
width: Number(imageWidth),
height: Number(imageHeight)
};
};
})(jQuery);
|