Campfire.RdioExpander = Class.create({ initialize: function(chat) { this.chat = chat; var messages = this.chat.transcript.messages; for (var i = 0; i < messages.length; i++) { this.detectRdioURL(messages[i]); } }, detectRdioURL: function(message) { if (!message.pending() && message.kind === 'text') { var body = message.bodyElement() var links = message.bodyElement().select('a:not(image)'); for (var i = 0; i < links.length; i++) { var link = links[i]; var href = link.getAttribute('href'); var match = href.match(/^http:\/\/(rd\.io\/x\/\w*)$/) if (match) { var rdioHref = "rdio://" + match[1]; link.setAttribute('href', rdioHref); } } } }, onMessagesInsertedBeforeDisplay: function(messages) { for (var i = 0; i < messages.length; i++) { this.detectRdioURL(messages[i]); } }, onMessageAccepted: function(message, messageID) { this.detectRdioURL(message); } }); Campfire.Responders.push("RdioExpander"); window.chat.installPropaneResponder("RdioExpander", "rdioexpander");