diff options
-rw-r--r-- | include/nav.php | 10 | ||||
-rw-r--r-- | mod/acl.php | 28 | ||||
-rw-r--r-- | view/js/autocomplete.js | 30 |
3 files changed, 41 insertions, 27 deletions
diff --git a/include/nav.php b/include/nav.php index a9bff4b29..a567f83c5 100644 --- a/include/nav.php +++ b/include/nav.php @@ -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> diff --git a/mod/acl.php b/mod/acl.php index e6733351b..d263569ce 100644 --- a/mod/acl.php +++ b/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(); diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 1fa20cc3b..1fad1903b 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -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 ); |