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
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
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta content="IE=edge" http-equiv="X-UA-Compatible">
  <meta content="width=device-width, initial-scale=1, user-scalable=0" name="viewport">
  <script src="./i18n-text.min.js"></script>

  <title>XMPP Invitation</title>
  <script>
// 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);
}
  </script>
  <link href="stylesheets/bootstrap.min.css" rel="stylesheet">
  <link href="stylesheets/i.css" rel="stylesheet">
  <style>
    .main {
      padding-top: 0px;
      max-width: 600px;
      width: 90%;
      margin: 0 auto;
    }
  </style>
  <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
  <![endif]-->
</head>
<body onload="load_done();">
  <div class="main">
    <noscript><h3>You need JavaScript to follow the invitation.</h3></noscript>
      <h3 class="text-center" id="heading"></h3>
    <p class="lead text-center" id="intro"></p>
    <p class="text-center"><a class="btn btn-primary" id="button"></a></p>
    <input type="url" class="form-control text-center" id="url_in" size=50 onfocus="this.select();"></input>
    <p class="lead text-center" id="clients"></p>
    <p class="lead" id="recommend"></p>

    <ul class="lead" id="client_list"></ul>

    <p class="lead" id="checkfulllist"></p>
    <p id="xmppis"></p>
  </div>
</body>
</html>