Make nav search use textcomplete
This commit is contained in:
parent
4e3aadc38a
commit
34ecbcceea
@ -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>
|
||||
|
28
mod/acl.php
28
mod/acl.php
@ -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();
|
||||
|
||||
|
@ -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 );
|
||||
|
Reference in New Issue
Block a user