gnu-social/plugins/Autocomplete/Autocomplete.js
Brion Vibber 4915b0cb9e Update Autocomplete plugin for reusable notice forms in 1.0.x. It's fun!
Now pulls the fetch API URL from a dedicated <span> with a data attribute ('data-url', should pass HTML 5 validators for our future overlords)
2011-03-09 18:01:41 -08:00

54 lines
1.6 KiB
JavaScript

(function(SN, $) {
var origInit = SN.Init.NoticeFormSetup;
SN.Init.NoticeFormSetup = function(form) {
origInit(form);
// Only attach to traditional-style forms
var textarea = form.find('.notice_data-text:first');
if (textarea.length == 0) {
return;
}
function fullName(row) {
if (typeof row.fullname == "string" && row.fullname != '') {
return row.nickname + ' (' + row.fullname + ')';
} else {
return row.nickname;
}
}
var apiUrl = $('#autocomplete-api').attr('data-url');
textarea.autocomplete(apiUrl, {
multiple: true,
multipleSeparator: " ",
minChars: 1,
formatItem: function(row, i, max){
row = eval("(" + row + ")");
// the display:inline is because our INSANE stylesheets
// override the standard display of all img tags for no
// good reason.
var div = $('<div><img style="display:inline; vertical-align: middle"> <span></span></div>')
.find('img').attr('src', row.avatar).end()
.find('span').text(fullName(row)).end()
return div.html();
},
formatMatch: function(row, i, max){
row = eval("(" + row + ")");
return row.nickname;
},
formatResult: function(row){
row = eval("(" + row + ")");
switch(row.type)
{
case 'user':
return '@' + row.nickname;
case 'group':
return '!' + row.nickname;
}
}
});
};
})(SN, jQuery);