XMPP invitation landing page, without javascript
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
// load i18n and perform translation
var i18n = new I18nText({path: 'lang'})
i18n.once(I18nText.EVT_LOCALE_CHANGE, function (data) {
	translate_ui();
})
i18n.setLocale('en');

// i18n key prefix for MUC ("muc.") or 1:1 chat ("chat.")
var key_prefix;
var display_data = null;

function show_clients(client_array) {
	var list = document.getElementById('client_list');
	for (var id = 0; id < client_array.length; id++) {
		var item = document.createElement('li');
		item.innerHTML = client_array[id];
		list.appendChild(item);
	}
}

function load_clients() {
	url = "clients.json";
	var request = new XMLHttpRequest()
	request.open('GET', url)
	request.onreadystatechange = function () {
		if (request.readyState === 4) {
			if (request.status == 200 || (isLocalFileRequest(url) && request.responseText.length > 0)) {
				show_clients(JSON.parse(request.responseText))
			}
		}
	}
	request.send(null)
}

function load_hash() {
	var muc = false;
	key_prefix = "chat.";
	var jid = window.location.search || window.location.hash;
	jid = decodeURIComponent(jid.substring(jid.indexOf('#') + 1, jid.length));
	try {
		base_decoded = window.atob(jid);
		if (base_decoded.search('@') >= 0)
			jid = base_decoded;
	} catch (err) {
		// ignore error, JID wasn't base64 encoded
	}
	if (jid.search("\\?join") >= 0) {
		muc = true;
		key_prefix = "muc.";
	}

	// TODO: proper error checking / display / Creation of invitations
	if (jid.search("@") <= 0) return {jid:"", name: "Somebody"};

	var name = jid.split("@")[0];
	name = name.charAt(0).toUpperCase() + name.slice(1);
	return {jid: jid, name: name};
}

function translate_ui() {
	// translation
	document.title = i18n.text(key_prefix + 'title',  display_data);
	// MUC/chat specific
	['heading', 'intro', 'button'].forEach(function(id) {
		document.getElementById(id).innerHTML = i18n.text(key_prefix + id, display_data);
	});
	// and agnostic
	['clients', 'recommend', 'checkfulllist', 'xmppis'].forEach(function(id) {
		document.getElementById(id).innerHTML = i18n.text(id, display_data);
	});
}

function rehash() {
	display_data = load_hash();
	document.getElementById('button').href = "xmpp:" + display_data.jid;
	document.getElementById('url_in').value = "xmpp:" + display_data.jid;
	translate_ui();
}

function load_done() {
	// functionality
	load_clients();
	rehash();
	window.addEventListener("hashchange", rehash, false);
}