Propane users, add this to your caveatPatchor.js file in ~/Library/Application Support/Propane/unsupported/ to get github repo descriptions when a link is pasted into your Campfire room. Screenshot: https://img.skitch.com/20110401-p7t6egkt1iedyfd7as5difk9
/*
Add github repo descriptions to your Campfire rooms in Propane (propaneapp.com).
Adapted from protocool's https://gist.github.com/825404
*/
var githubber = true;
if(githubber){
// github repo info inline
Campfire.GitHubber = Class.create({
initialize: function(chat) {
this.chat = chat;
var messages = this.chat.transcript.messages;
for(var i = 0; i < messages.length; i++) {
this.detectGithubURL(messages[i]);
}
},
detectGithubURL: function(message) {
if (!message.pending() && message.kind === 'text') {
var links = message.bodyElement().select('a:not(image)');
if (links.length != 1) return;
var href = links[0].getAttribute('href'),
match = href.match(/^https?:\/\/github.com\//),
api = 'http://github.com/api/v2/json/repos/show/';
if (!match) return;
api += href.replace(/^https?:\/\/github.com\//,'');
window.propane.requestJSON(message.id(), api, 'window.chat.githubber', 'onEmbedDataLoaded', 'onEmbedDataFailed');
}
},
onEmbedDataLoaded: function(messageID, data) {
var message = window.chat.transcript.getMessageById(messageID);
if (!message) return;
message.resize((function() {
message.bodyCell.insert({bottom: '<div style="color: red; width:100%; margin-top:5px; padding-top: 5px; border-top:1px dotted #ccc;">'+data.repository.description+'</div>'});
}).bind(this));
},
onEmbedDataFailed: function(messageID) {
/* No cleanup required, we only alter the HTML after we get back a succesful load from the data */
},
onMessagesInsertedBeforeDisplay: function(messages) {
for (var i = 0; i < messages.length; i++) {
this.detectGithubURL(messages[i]);
}
},
onMessageAccepted: function(message, messageID) {
this.detectGithubURL(message);
}
});
Campfire.Responders.push("GitHubber");
window.chat.installPropaneResponder("GitHubber", "githubber");
}