Add support for ephemeral messages that are tied to an open channel, aka "pins".

This commit is contained in:
Ian Gulliver
2014-05-25 23:40:56 -07:00
parent 1e91f5babb
commit 8e7af2f5cf
6 changed files with 363 additions and 14 deletions

View File

@@ -29,6 +29,7 @@ a {
</div>
<div>
<input type="button" id="send" value="Send">
<input type="button" id="pin" value="Pin">
</div>
<hr>
@@ -37,6 +38,10 @@ a {
<hr>
<div id="pins"></div>
<hr>
<div id="messages"></div>
<script>
@@ -48,6 +53,8 @@ var key = document.getElementById('key');
var keys = document.getElementById('keys');
var pins = document.getElementById('pins');
var messages = document.getElementById('messages');
var addMessage = function(message) {
@@ -60,6 +67,17 @@ var addMessage = function(message) {
messages.appendChild(messageDiv);
};
var addPin = function(pin) {
var pinDiv = document.createElement('div');
pinDiv.appendChild(document.createTextNode(
(new Date(pin['created'] * 1000)).toString() +
' <????-' + (Math.abs(pin['sender'].hashCode()) % 10000) + '> ' +
pin['message']
));
pinDiv.pinId = pin['id'];
pins.appendChild(pinDiv);
};
window.addEventListener('load', function() {
var googleUser = document.getElementById('google_user');
@@ -99,6 +117,24 @@ window.addEventListener('load', function() {
}
}
},
onPin: function(pin) {
if (subscriptions.value != pin['subject']['name']) {
return;
}
addPin(pin);
},
onUnpin: function(pin) {
if (subscriptions.value != pin['subject']['name']) {
return;
}
for (var i = 0; i < pins.childNodes.length; i++) {
var pinDiv = pins.childNodes[i];
if (pinDiv.pinId == pin['id']) {
pins.removeChild(pinDiv);
break;
}
}
},
};
var debug = new Cosmopolite(callbacks);
@@ -121,12 +157,18 @@ window.addEventListener('load', function() {
debug.sendMessage(subscriptions.value, message.value, key.value);
});
document.getElementById('pin').addEventListener('click', function() {
debug.pin(subscriptions.value, message.value);
});
document.getElementById('subscriptions').addEventListener('change', function() {
messages.innerHTML = '';
pins.innerHTML = '';
if (!subscriptions.value) {
return;
}
debug.getMessages(subscriptions.value).forEach(addMessage);
debug.getPins(subscriptions.value).forEach(addPin);
});
});