1
Y = YUI().use("base", "node", "io-base", "anim");
3
1
var global_timeout_id = null;
4
2
var global_search_request = null;
10
var search_box = Y.get('#q');
11
if (!Y.Lang.isNull(search_box))
6
var search_box = $('#q');
7
if (search_box != undefined)
13
9
function get_suggestions() {
14
var query = search_box.get('value');
10
var query = search_box.value;
15
11
var url = global_path + 'search?query=' + query;
17
if (!Y.Lang.isNull(global_search_request))
13
if (global_search_request != undefined)
19
15
global_search_request.abort();
21
global_search_request = Y.io(
24
on: {complete: cool_search},
29
var region = search_box.get('region');
30
var current_query = search_box.get('value');
32
Y.get('#search_terms').setStyle('display', 'block');
33
Y.get('#search_terms').setStyle('position', 'absolute');
34
Y.get('#search_terms').setStyle('left', region.left);
35
Y.get('#search_terms').setStyle('top', region.bottom);
36
Y.get('#search_terms').set('innerHTML','Loading...');
17
global_search_request = $.get(url, {'query': query}).done(cool_search);
19
var current_query = search_box.value;
21
$('#search_terms').css({
23
'position': 'absolute',
24
'left': search_box.left,
25
'top': search_box.bottom,
26
'innerHTML': 'Loading...',
42
if(search_box.get('value') == '')
32
if(search_box.value == '')
44
Y.get('#search_terms').setStyle('display', 'none');
34
$('#search_terms').css({'display': 'none'});
52
42
global_timeout_id = setTimeout(get_suggestions, 200);
58
49
function cool_search(tid, response, query)
61
var region = q.get('region');
62
var current_query = q.get('value');
52
var current_query = q.value;
63
53
if (current_query == query)
65
Y.get('#search_terms').set('innerHTML', response.responseText);
66
Y.get('#search_terms').setStyle('display', 'block');
67
Y.get('#search_terms').setStyle('position', 'absolute');
68
Y.get('#search_terms').setStyle('left', region.left);
69
Y.get('#search_terms').setStyle('top', region.bottom);
55
$('#search_terms').html(response.responseText);
56
$('#search_terms').css({
58
'position': 'absolute',
73
65
function hide_search()
75
setTimeout("Y.get('#search_terms').setStyle('display','none')", 300);
67
setTimeout("$('#search_terms').css({'display': 'none'})", 300);
78
70
function Collapsable(config)
92
84
function get_height(node) {
93
node.setStyle('position', 'absolute');
94
node.setStyle('top', -1000000000);
95
node.setStyle('display', 'block');
96
var height = node.get('region').height;
97
node.setStyle('display', 'none');
98
node.setStyle('position', 'static');
99
node.setStyle('top', 'auto');
86
'position': 'absolute',
90
var height = $(node).height;
105
101
if (this.anim) this.anim.stop();
107
this.anim = new Y.Anim(
109
node: this.container,
111
marginBottom: this.container.getStyle('marginBottom')
120
this.anim.on('end', this.animComplete, this, callback);
103
this.anim = $(this.container).animate(
104
{marginBottom: 0 }, 0.2, "swing" , function(event) {
106
if (this._loading) return;
107
if (callback) callback();
123
Collapsable.prototype._load_finished = function(tid, res, args)
112
Collapsable.prototype._load_finished = function(data, callback)
125
var l = res.responseText.split('\n');
114
var l = data.split('\n');
127
var newNode = Y.Node.create(l.join(''));
116
var newNode = $(l.join(''));
128
117
if (this.node_process)
129
118
this.node_process(newNode);
130
119
this.source = null;
131
newNode.setStyle('display', 'none');
132
this.loading.ancestor().insertBefore(newNode, this.loading);
133
var delta = this.loading.get('region').height - get_height(newNode);
134
newNode.setStyle('display', 'block');
135
this.container.setStyle('marginBottom', parseFloat(this.container.getStyle('marginBottom')) + delta);
136
this.loading.ancestor().removeChild(this.loading);
137
this._animate(args[0]);
120
newNode.css({'display': 'none'});
121
newNode.insertBefore(this.loading);
122
var delta = this.loading.height - get_height(newNode);
123
newNode.css({'display': 'block'});
124
this.container.css({'marginBottom': parseFloat(this.container.css('marginBottom')) + delta});
125
this.loading.remove();
126
this._animate(callback);
140
129
Collapsable.prototype._ensure_container = function(callback)
142
131
if (this.container == null) {
143
this.container = Y.Node.create('<div></div>');
132
this.container = $('<div></div>');
144
133
if (this.closed_node) {
145
134
this.closed_node.ancestor().replaceChild(
146
135
this.container, this.closed_node);
153
this.open_node.ancestor().replaceChild(
154
this.container, this.open_node);
155
this.container.appendChild(this.open_node);
142
$(this.open_node).replaceWith(this.container);
143
$(this.container).append(this.open_node);
157
var outer = Y.Node.create('<div style="overflow:hidden;"></div>');
158
this.container.ancestor().replaceChild(outer, this.container);
159
outer.appendChild(this.container);
145
var outer = $('<div style="overflow:hidden;"></div>');
146
this.container.replaceWith(outer);
147
$(outer).append(this.container);
187
175
Collapsable.prototype.open = function(callback)
189
this.expand_icon.set('src', expanded_icon_path);
177
this.expand_icon[0].src = expanded_icon_path;
191
179
this._ensure_container();
195
183
var close_height;
196
184
if (this.close_node) {
197
close_height = this.close_node.get('region').height;
185
close_height = this.close_node.height;
200
188
close_height = 0;
203
this.container.setStyle('marginBottom', close_height - open_height);
191
$(this.container).css({'marginBottom': close_height - open_height});
204
192
if (this.close_node) {
205
this.close_node.setStyle('display', 'none');
193
$(this.close_node).css({'display': 'none'});
207
this.open_node.setStyle('display', 'block');
195
$(this.open_node).css({'display': 'block'});
209
197
this._animate(callback);
199
var collapsable = this;
211
201
if (this.source) {
215
on: {complete: this._load_finished},
216
arguments: [callback],
202
$.get(this.source, function(data) {
203
collapsable._load_finished(data, callback);
224
Collapsable.prototype.animComplete = function(evt, callback)
227
if (this._loading) return;
228
if (callback) callback();
232
210
Collapsable.prototype.close = function()
234
212
this._ensure_container();
236
var open_height = this.open_node.get('region').height;
214
var open_height = this.open_node.height;
238
216
var close_height;
239
217
if (this.close_node) {
243
221
close_height = 0;
246
var anim = new Y.Anim(
248
node: this.container,
253
marginBottom: close_height - open_height
257
anim.on("end", this.closeComplete, this);
224
var anim = $(this.container).animate(
225
{ marginBottom: [0, close_height - open_height]},
226
0.2, "swing", this.closeComplete.bind(this));
261
229
Collapsable.prototype.closeComplete = function () {
262
this.open_node.setStyle('display', 'none');
230
$(this.open_node).css({'display': 'none'});
263
231
if (this.close_node) {
264
this.close_node.setStyle('display', 'block');
232
$(this.close_node).css({'display': 'block'});
266
this.container.setStyle('marginBottom', 0);
267
this.expand_icon.set('src', collapsed_icon_path);
234
$(this.container).css({'marginBottom': 0});
235
this.expand_icon[0].src = collapsed_icon_path;
268
236
this.is_open = false;
307
275
var id_selector = "#" + target_id;
308
var main = Y.get(id_selector);
309
notification_node = Y.Node.create('<div></div>')
276
var main = $(id_selector);
277
notification_node = $('<div></div>')
310
278
.addClass('global-notification');
312
280
notification_node.addClass('hidden');
314
var notification_span = Y.Node.create('<span></span>')
282
var notification_span = $('<span></span>')
315
283
.addClass('sprite')
316
284
.addClass('notification-private');
317
285
notification_node.set('innerHTML', notification_text);
324
292
this is because we have no way to use feature flags in
325
293
css directly. This should be removed if the feature
327
var body = Y.get('body');
295
var body = $(document.body);
328
296
body.addClass('feature-flag-bugs-private-notification-enabled');
329
297
// Set the visible flag so that the content moves down.
330
298
body.addClass('global-notification-visible');
332
300
setup_privacy_notification();
333
var global_notification = Y.get('.global-notification');
301
var global_notification = $('.global-notification');
334
302
if (global_notification.hasClass('hidden')) {
335
303
global_notification.addClass('transparent');
336
304
global_notification.removeClass('hidden');
338
var fade_in = new Y.Anim({
339
node: global_notification,
343
var body_space = new Y.Anim({
345
to: {'paddingTop': '40px'},
347
easing: Y.Easing.easeOut
349
var black_link_space = new Y.Anim({
353
easing: Y.Easing.easeOut
358
black_link_space.run();
306
$(global_notification).animate({
309
$(document.body).animate(
310
{'paddingTop': '40px'}, 0.2, "easeOutBounce");
311
$('.black-link').animate(
312
{'top': '45px'}, 0.2, "easeOutBounce");
362
Y.on('domready', function() {
363
var body = Y.get('body');
317
var body = $(document.body);
364
318
if (body.hasClass('private')) {
365
319
setup_privacy_notification();
366
320
display_privacy_notification();