forked from mozilla/zamboni
-
Notifications
You must be signed in to change notification settings - Fork 8
/
init.js
125 lines (96 loc) · 3.31 KB
/
init.js
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
/* Global initialization script */
var z = {};
$(document).ready(function(){
// Initialize install buttons.
$('.install').installButton();
// Initialize any tabbed interfaces. See: tabs.js
if ($.fn.tabify) {
$('.tab-wrapper').tabify();
}
// Initialize email links
$('span.emaillink').each(function() {
$(this).find('.i').remove();
var em = $(this).text().split('').reverse().join('');
$(this).prev('a').attr('href', 'mailto:' + em);
});
// Set up input placeholders.
$('input[placeholder]').placeholder();
if (z.readonly) {
$('form[method=post]')
.before(gettext('This feature is temporarily disabled while we perform website maintenance. Please check back a little later.'))
.find('input, button, select').attr('disabled', true);
}
});
/* prevent-default function wrapper */
function _pd(func) {
return function(e) {
e.preventDefault();
func.apply(this, arguments);
};
}
/* Fake the placeholder attribute since Firefox 3.6 doesn't support it. */
jQuery.fn.placeholder = function(new_value) {
if (new_value) {
this.attr('placeholder', new_value);
}
/* Bail early if we have built-in placeholder support. */
if ('placeholder' in document.createElement('input')) {
return this;
}
if (new_value && this.hasClass('placeholder')) {
this.val('').blur();
}
return this.focus(function() {
var $this = $(this),
text = $this.attr('placeholder');
if ($this.val() == text) {
$this.val('').removeClass('placeholder');
}
}).blur(function() {
var $this = $(this),
text = $this.attr('placeholder');
if ($this.val() == '') {
$this.val(text).addClass('placeholder');
}
}).each(function(){
/* Remove the placeholder text before submitting the form. */
var self = $(this);
self.closest('form').submit(function() {
if (self.hasClass('placeholder')) {
self.val('');
}
});
}).blur();
};
jQuery.fn.hasattr = function(name) {
return this.attr(name) !== undefined;
}
var escape_ = function(s){
return s.replace('&', '&').replace('>', '>').replace('<', '<')
.replace("'", ''').replace('"', '"');
};
//TODO(potch): kill underscore dead. until then, fake it on mobile.
if (!('_' in window)) _ = {};
/* is ``key`` in obj? */
_.haskey = function(obj, key) {
return typeof obj[key] !== "undefined";
};
/* Detect browser, version, and OS. */
$.extend(z, BrowserUtils());
$(document.body).addClass(z.platform);
/* Details for the current application. */
z.app = document.body.getAttribute('data-app');
z.appName = document.body.getAttribute('data-appname');
z.appMatchesUserAgent = z.browser[z.app];
z.anonymous = JSON.parse(document.body.getAttribute('data-anonymous'))
z.media_url = document.body.getAttribute('data-media-url');
z.readonly = JSON.parse(document.body.getAttribute('data-readonly'));
if (z.browser.firefox) {
var betaVer = document.body.getAttribute('data-min-beta-version');
z.fxBeta = (VersionCompare.compareVersions(z.browserVersion, betaVer) > -1);
if (z.fxBeta) {
$(document.body).addClass('fxbeta');
}
} else {
z.fxBeta = false;
}