Files
cosmopolite/static/debug.html
2014-05-11 15:09:16 +03:00

168 lines
4.8 KiB
HTML

<html>
<head>
<script type="text/javascript" src="/cosmopolite/static/cosmopolite.js" charset="UTF-8"></script>
<style>
a {
text-decoration: none;
}
</style>
</head>
<body>
<div>Google user: <span id="google_user"></span></div>
<div>
<div>
Key:
<select id="keys"></select>
<input type="button" id="set" value="Set">
<input type="button" id="add" value="Add">
</div>
<div>
Last set:
<span id="last_set"></span>
</div>
<div>
<input type="checkbox" id="public"> Public
</div>
<div>
<textarea id="value" rows="10" cols="40"></textarea>
</div>
</div>
<hr>
<div>
<div>
Subject:
<input type="text" id="subject">
<input type="button" id="subscribe" value="Subscribe">
</div>
<div>
<select id="subscriptions"></select>
<input type="button" id="unsubscribe" value="Unsubscribe">
</div>
<div>
<input type="text" id="message">
<input type="button" id="send" value="Send">
</div>
<div id="messages"></div>
<script>
var keys = document.getElementById('keys');
var value = document.getElementById('value');
var last_set = document.getElementById('last_set');
var is_public = document.getElementById('public');
var subject = document.getElementById('subject');
var subscriptions = document.getElementById('subscriptions');
var messages = document.getElementById('messages');
var message = document.getElementById('message');
var selectKey = function(new_key) {
keys.value = new_key;
keys.dispatchEvent(new CustomEvent('change'));
};
var addKey = function(new_key, index) {
var option = document.createElement('option');
option.text = new_key;
keys.options.add(option, index);
if (keys.options.length == 1) {
selectKey(new_key);
}
};
var addMessage = function(message) {
var messageDiv = document.createElement('div');
messageDiv.appendChild(document.createTextNode(
(new Date(message['created'] * 1000)).toString() +
' <????-' + (Math.abs(message['sender'].hashCode()) % 10000) + '> ' +
message['message']
));
messages.appendChild(messageDiv);
};
window.addEventListener('load', function() {
var googleUser = document.getElementById('google_user');
var callbacks = {
onLogin: function(username, logout_url) {
googleUser.innerHTML =
username +
' <a href="' + logout_url + '" target="_blank">(log out)</a>';
},
onLogout: function(login_url) {
googleUser.innerHTML =
'<a href="' + login_url + '" target="_blank">(log in)</a>';
},
onStateChange: function(new_key, new_value) {
for (var i = 0; i < keys.options.length; ++i) {
if (keys.options[i].value == new_key) {
return;
};
if (keys.options[i].value > new_key) {
addKey(new_key, i);
return;
};
};
// Sorts at the end
addKey(new_key, keys.options.length);
},
onMessage: function(message) {
if (subscriptions.value != message['subject']) {
return;
}
addMessage(message);
},
};
var debug = new cosmopolite.Client(callbacks);
document.getElementById('set').addEventListener('click', function() {
debug.setValue(keys.value, value.value, is_public.checked);
});
document.getElementById('add').addEventListener('click', function() {
var new_key = prompt('New key name:');
if (new_key === null) {
return;
}
debug.setValue(new_key, '');
selectKey(new_key);
});
document.getElementById('keys').addEventListener('change', function() {
var value_obj = debug.getValue(keys.value);
value.value = value_obj.value;
last_set.innerHTML = (new Date(value_obj.last_set * 1000)).toString();
is_public.checked = value_obj['public'];
});
document.getElementById('subscribe').addEventListener('click', function() {
debug.subscribe(subject.value, -1);
var option = document.createElement('option');
option.text = subject.value;
subscriptions.options.add(option);
subscriptions.dispatchEvent(new CustomEvent('change'));
});
document.getElementById('unsubscribe').addEventListener('click', function() {
debug.unsubscribe(subscriptions.value);
subscriptions.options.remove(subscriptions.options.selectedIndex);
subscriptions.dispatchEvent(new CustomEvent('change'));
});
document.getElementById('send').addEventListener('click', function() {
debug.sendMessage(subscriptions.value, message.value);
});
document.getElementById('subscriptions').addEventListener('change', function() {
messages.innerHTML = '';
if (!subscriptions.value) {
return;
}
debug.getMessages(subscriptions.value).forEach(addMessage);
});
});
</script>
</body>
</html>