Make nav search use textcomplete

This commit is contained in:
Stefan Parviainen 2015-01-07 19:39:50 +01:00
parent 4e3aadc38a
commit 34ecbcceea
3 changed files with 41 additions and 27 deletions

View File

@ -15,15 +15,7 @@ function nav(&$a) {
$a->page['htmlhead'] .= <<< EOT
<script>$(document).ready(function() {
var a;
a = $("#nav-search-text").autocomplete({
serviceUrl: '$base/acl',
minChars: 2,
width: 250,
id: 'nav-search-text-ac',
});
a.setOptions({ autoSubmit: true, params: { type: 'x' }});
$("#nav-search-text").search_autocomplete('$base/acl');
});
</script>

View File

@ -182,25 +182,25 @@ function acl_init(&$a){
);
}
elseif($type == 'x') {
$r = navbar_complete($a);
$x = array();
$x['query'] = $search;
$x['photos'] = array();
$x['links'] = array();
$x['suggestions'] = array();
$x['data'] = array();
$contacts = array();
if($r) {
foreach($r as $g) {
$x['photos'][] = $g['photo'];
$x['links'][] = $g['url'];
$x['suggestions'][] = '@' . $g['name'];
$x['data'][] = $g['name'];
$contacts[] = array(
"photo" => $g['photo'],
"name" => $g['name'],
"nick" => $g['address'],
);
}
}
echo json_encode($x);
killme();
$o = array(
'start' => $start,
'count' => $count,
'items' => $contacts,
);
echo json_encode($o);
killme();
}
else
$r = array();
@ -284,7 +284,7 @@ function navbar_complete(&$a) {
}
$dirmode = intval(get_config('system','directory_mode'));
$search = ((x($_REQUEST,'query')) ? htmlentities($_REQUEST['query'],ENT_COMPAT,'UTF-8',false) : '');
$search = ((x($_REQUEST,'search')) ? htmlentities($_REQUEST['search'],ENT_COMPAT,'UTF-8',false) : '');
if(! $search || mb_strlen($search) < 2)
return array();

View File

@ -3,15 +3,15 @@
*
* require jQuery, jquery.textcomplete
*/
function contact_search(term, callback, backend_url, extra_channels) {
function contact_search(term, callback, backend_url, type, extra_channels) {
var postdata = {
start:0,
count:100,
search:term,
type:'c',
type:type,
}
if(extra_channels)
if(typeof extra_channels !== 'undefined' && extra_channels)
postdata['extra_channels[]'] = extra_channels;
$.ajax({
@ -39,6 +39,10 @@ function editor_replace(item) {
return '$1$2'+item.nick.replace(' ','') + '+' + id;
}
function basic_replace(item) {
return '$1$2'+item.nick;
}
/**
* jQuery plugin 'editor_autocomplete'
*/
@ -50,7 +54,7 @@ function editor_replace(item) {
contacts = {
match: /(^|\s)(@\!*)([^ \n]+)$/,
index: 3,
search: function(term, callback) { contact_search(term, callback, backend_url, extra_channels); },
search: function(term, callback) { contact_search(term, callback, backend_url, 'c', extra_channels); },
replace: editor_replace,
template: contact_format,
}
@ -65,3 +69,21 @@ function editor_replace(item) {
this.textcomplete([contacts,smilies],{className:'acpopup'});
};
})( jQuery );
/**
* jQuery plugin 'search_autocomplete'
*/
(function( $ ){
$.fn.search_autocomplete = function(backend_url) {
// Autocomplete contacts
contacts = {
match: /(^)(@)([^\n]+)$/,
index: 3,
search: function(term, callback) { contact_search(term, callback, backend_url, 'x',[]); },
replace: basic_replace,
template: contact_format,
}
this.textcomplete([contacts],{className:'acpopup'});
};
})( jQuery );