You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nodebb/public/src/modules/autocomplete.js

128 lines
2.9 KiB
JavaScript

10 years ago
'use strict';
define('autocomplete', function () {
10 years ago
var module = {};
10 years ago
module.user = function (input, onselect) {
app.loadJQueryUI(function () {
10 years ago
input.autocomplete({
9 years ago
delay: 200,
open: function () {
$(this).autocomplete('widget').css('z-index', 100005);
},
7 years ago
select: function (event, ui) {
handleOnSelect(input, onselect, event, ui);
},
source: function (request, response) {
7 years ago
socket.emit('user.search', {
query: request.term,
paginate: false,
}, function (err, result) {
10 years ago
if (err) {
return app.alertError(err.message);
}
10 years ago
10 years ago
if (result && result.users) {
var names = result.users.map(function (user) {
var username = $('<div/>').html(user.username).text();
10 years ago
return user && {
9 years ago
label: username,
value: username,
10 years ago
user: {
uid: user.uid,
name: user.username,
slug: user.userslug,
7 years ago
username: user.username,
userslug: user.userslug,
picture: user.picture,
'icon:text': user['icon:text'],
'icon:bgColor': user['icon:bgColor'],
},
10 years ago
};
});
response(names);
}
$('.ui-autocomplete a').attr('data-ajaxify', 'false');
});
},
10 years ago
});
10 years ago
});
};
module.group = function (input, onselect) {
app.loadJQueryUI(function () {
10 years ago
input.autocomplete({
9 years ago
delay: 200,
10 years ago
select: onselect,
source: function (request, response) {
10 years ago
socket.emit('groups.search', {
query: request.term,
}, function (err, results) {
10 years ago
if (err) {
return app.alertError(err.message);
}
10 years ago
if (results && results.length) {
var names = results.map(function (group) {
10 years ago
return group && {
label: group.name,
value: group.name,
group: {
name: group.name,
slug: group.slug,
},
10 years ago
};
});
response(names);
}
$('.ui-autocomplete a').attr('data-ajaxify', 'false');
});
},
10 years ago
});
});
};
module.tag = function (input, onselect) {
app.loadJQueryUI(function () {
input.autocomplete({
delay: 100,
open: function () {
$(this).autocomplete('widget').css('z-index', 20000);
},
select: function (event, ui) {
7 years ago
handleOnSelect(input, onselect, event, ui);
},
source: function (request, response) {
socket.emit('topics.autocompleteTags', {
query: request.term,
cid: ajaxify.data.cid || 0,
}, function (err, tags) {
if (err) {
return app.alertError(err.message);
}
if (tags) {
response(tags);
}
$('.ui-autocomplete a').attr('data-ajaxify', 'false');
});
},
});
});
};
7 years ago
function handleOnSelect(input, onselect, event, ui) {
onselect = onselect || function () {};
var e = jQuery.Event('keypress');
e.which = 13;
e.keyCode = 13;
setTimeout(function () {
input.trigger(e);
}, 100);
onselect(event, ui);
}
10 years ago
return module;
});