Skip to content

Instantly share code, notes, and snippets.

@cheeaun
Created November 24, 2009 06:41
Show Gist options
  • Save cheeaun/241691 to your computer and use it in GitHub Desktop.
Save cheeaun/241691 to your computer and use it in GitHub Desktop.
Add reply button(s) plugin for Talkerapp
// https://cheeaun.talkerapp.com/plugins/56
(function(plugin, $){
var msgbox = $('#msgbox');
// Gladly stolen from
// http://github.com/mootools/mootools-more/blob/master/Source/Element/Element.Forms.js
var selectRange = function(el, start, end){
if (el.setSelectionRange) {
el.focus();
el.setSelectionRange(start, end);
} else {
var value = el.value;
var diff = value.substr(start, end - start).replace(/\r/g, '').length;
start = value.substr(0, start).replace(/\r/g, '').length;
var range = el.createTextRange();
range.collapse(true);
range.moveEnd('character', start + diff);
range.moveStart('character', start);
range.select();
}
};
var setCaretPosition = function(el, pos){
if (pos == 'end') pos = el.value.length;
selectRange(el, pos, pos);
};
$('tr.message').live('mouseover', function(){
var el = $(this);
var message = el.find('td.message');
var replyButton = message.find('a.reply-button');
if (!replyButton.length){
var replyContainer = $('<div class="reply-button-container"></div>').css('position', 'relative');
replyButton = $('<a href="#" class="reply-button">Reply</a>').css({
position: 'absolute',
right: 9,
bottom: 4,
backgroundColor: '#fff',
padding: '3px 8px',
fontSize: '.8em',
textTransform: 'uppercase',
'-moz-border-radius': '3px',
'-webkit-border-radius': '3px'
}).appendTo(replyContainer);
replyContainer.appendTo(message);
}
replyButton.show();
}).live('mouseout', function(){
var el = $(this);
var message = el.find('td.message');
var replyButton = message.find('a.reply-button');
if (!replyButton.length) return;
replyButton.hide();
});
$('tr.message a.reply-button').live('click', function(){
var el = $(this);
var message = el.parents('tr.message');
if (!message.length) return;
var author = message.attr('author');
var val = $.trim(msgbox.val());
var pattern = new RegExp('@' + author + '(\\s|$)', 'gi');
if (val === ''){
msgbox.val('@' + author + ' ');
} else if (!pattern.test(val)){
msgbox.val(val + ' @' + author);
}
setCaretPosition(msgbox[0], 'end');
msgbox.focus();
return false;
});
})(plugin, jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment