aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/nav.php10
-rw-r--r--mod/acl.php28
-rw-r--r--view/js/autocomplete.js30
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 );