rework autocomplete: some cleanup and docu
This commit is contained in:
parent
7ee0bca2bb
commit
586b251539
13 changed files with 111 additions and 107 deletions
|
@ -1,13 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file include/acl_selectors.php
|
||||||
|
*/
|
||||||
|
|
||||||
require_once("include/contact_selectors.php");
|
require_once("include/contact_selectors.php");
|
||||||
require_once("include/contact_widgets.php");
|
require_once("include/contact_widgets.php");
|
||||||
|
require_once("include/dir_fns.php");
|
||||||
require_once("include/features.php");
|
require_once("include/features.php");
|
||||||
require_once("mod/proxy.php");
|
require_once("mod/proxy.php");
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @package acl_selectors
|
* @package acl_selectors
|
||||||
|
@ -653,7 +655,12 @@ function acl_lookup(&$a, $out_type = 'json') {
|
||||||
|
|
||||||
killme();
|
killme();
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @brief Searching for global contacts for autocompletion
|
||||||
|
*
|
||||||
|
* @param App $a
|
||||||
|
* @return type
|
||||||
|
*/
|
||||||
function navbar_complete(&$a) {
|
function navbar_complete(&$a) {
|
||||||
|
|
||||||
// logger('navbar_complete');
|
// logger('navbar_complete');
|
||||||
|
@ -662,42 +669,26 @@ function navbar_complete(&$a) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$local = get_config('system','poco_local_search');
|
// check if searching in the local global contact table is enabled
|
||||||
$local = true;
|
$localsearch = get_config('system','poco_local_search');
|
||||||
|
|
||||||
$search = $prefix.notags(trim($_REQUEST['search']));
|
$search = $prefix.notags(trim($_REQUEST['search']));
|
||||||
|
|
||||||
|
// don't search if search term has less than 2 characters
|
||||||
if(! $search || mb_strlen($search) < 2)
|
if(! $search || mb_strlen($search) < 2)
|
||||||
return array();
|
return array();
|
||||||
|
|
||||||
$star = false;
|
|
||||||
$address = false;
|
|
||||||
|
|
||||||
if(substr($search,0,1) === '@')
|
if(substr($search,0,1) === '@')
|
||||||
$search = substr($search,1);
|
$search = substr($search,1);
|
||||||
|
|
||||||
if(substr($search,0,1) === '*') {
|
if($localsearch) {
|
||||||
$star = true;
|
$x = dirsearch_global_by_name($search);
|
||||||
$search = substr($search,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(strpos($search,'@') !== false) {
|
|
||||||
$address = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if($local) {
|
|
||||||
require_once("include/dir_fns.php");
|
|
||||||
$x = dirsearch_autocomplete($search);
|
|
||||||
return $x;
|
return $x;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(! $local) {
|
if(! $localsearch) {
|
||||||
require_once("include/dir_fns.php");
|
|
||||||
$url = $directory['url'] . '/dirsearch';
|
|
||||||
|
|
||||||
|
|
||||||
$p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
|
$p = (($a->pager['page'] != 1) ? '&p=' . $a->pager['page'] : '');
|
||||||
|
|
||||||
|
|
||||||
$x = z_fetch_url(get_server().'/lsearch?f=' . $p . '&search=' . urlencode($search));
|
$x = z_fetch_url(get_server().'/lsearch?f=' . $p . '&search=' . urlencode($search));
|
||||||
if($x['success']) {
|
if($x['success']) {
|
||||||
$t = 0;
|
$t = 0;
|
||||||
|
|
|
@ -1,11 +1,20 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @file include/dir_fns.php
|
||||||
|
* @brief Functions for directory
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
function dirsearch_autocomplete($search) {
|
* @brief Search global contact table by nick or name
|
||||||
|
* *
|
||||||
|
* @param string $search
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
function dirsearch_global_by_name($search) {
|
||||||
|
|
||||||
if($search) {
|
if($search) {
|
||||||
|
// check supported networks
|
||||||
if (get_config('system','diaspora_enabled'))
|
if (get_config('system','diaspora_enabled'))
|
||||||
$diaspora = NETWORK_DIASPORA;
|
$diaspora = NETWORK_DIASPORA;
|
||||||
else
|
else
|
||||||
|
@ -16,7 +25,8 @@ function dirsearch_autocomplete($search) {
|
||||||
else
|
else
|
||||||
$ostatus = NETWORK_DFRN;
|
$ostatus = NETWORK_DFRN;
|
||||||
|
|
||||||
$results = q("SELECT `contact`.`id` AS `cid`, `gcontact`.`url`, `gcontact`.`name`, `gcontact`.`nick`, `gcontact`.`photo`, `gcontact`.`network`, `gcontact`.`keywords`, `gcontact`.`addr`
|
$results = q("SELECT `contact`.`id` AS `cid`, `gcontact`.`url`, `gcontact`.`name`, `gcontact`.`nick`, `gcontact`.`photo`,
|
||||||
|
`gcontact`.`network`, `gcontact`.`keywords`, `gcontact`.`addr`
|
||||||
FROM `gcontact`
|
FROM `gcontact`
|
||||||
LEFT JOIN `contact` ON `contact`.`nurl` = `gcontact`.`nurl`
|
LEFT JOIN `contact` ON `contact`.`nurl` = `gcontact`.`nurl`
|
||||||
AND `contact`.`uid` = %d AND NOT `contact`.`blocked`
|
AND `contact`.`uid` = %d AND NOT `contact`.`blocked`
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
function nav(&$a) {
|
function nav(&$a) {
|
||||||
|
|
||||||
/**
|
/*
|
||||||
*
|
*
|
||||||
* Build page header and site navigation bars
|
* Build page header and site navigation bars
|
||||||
*
|
*
|
||||||
|
@ -11,23 +11,17 @@ function nav(&$a) {
|
||||||
if(!(x($a->page,'nav')))
|
if(!(x($a->page,'nav')))
|
||||||
$a->page['nav'] = '';
|
$a->page['nav'] = '';
|
||||||
|
|
||||||
$base = z_root();
|
$a->page['htmlhead'] .= replace_macros(get_markup_template('nav_head.tpl'), array());
|
||||||
/**
|
|
||||||
|
/*
|
||||||
* Placeholder div for popup panel
|
* Placeholder div for popup panel
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$a->page['htmlhead'] .= <<< EOT
|
|
||||||
|
|
||||||
<script>$(document).ready(function() {
|
|
||||||
$("#search-text").search_autocomplete('$base/acl');
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
EOT;
|
|
||||||
$a->page['nav'] .= '<div id="panel" style="display: none;"></div>' ;
|
$a->page['nav'] .= '<div id="panel" style="display: none;"></div>' ;
|
||||||
|
|
||||||
$nav_info = nav_info($a);
|
$nav_info = nav_info($a);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Build the page
|
* Build the page
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -37,12 +31,13 @@ EOT;
|
||||||
'$baseurl' => $a->get_baseurl(),
|
'$baseurl' => $a->get_baseurl(),
|
||||||
'$sitelocation' => $nav_info['sitelocation'],
|
'$sitelocation' => $nav_info['sitelocation'],
|
||||||
'$nav' => $nav_info['nav'],
|
'$nav' => $nav_info['nav'],
|
||||||
'$banner' => $nav_info['banner'],
|
'$banner' => $nav_info['banner'],
|
||||||
'$emptynotifications' => t('Nothing new here'),
|
'$emptynotifications' => t('Nothing new here'),
|
||||||
'$userinfo' => $nav_info['userinfo'],
|
'$userinfo' => $nav_info['userinfo'],
|
||||||
'$sel' => $a->nav_sel,
|
'$sel' => $a->nav_sel,
|
||||||
'$apps' => $a->apps,
|
'$apps' => $a->apps,
|
||||||
'$clear_notifs' => t('Clear notifications')
|
'$clear_notifs' => t('Clear notifications'),
|
||||||
|
'$search_hint' => t('@name, !forum, #tags, content')
|
||||||
));
|
));
|
||||||
|
|
||||||
call_hooks('page_header', $a->page['nav']);
|
call_hooks('page_header', $a->page['nav']);
|
||||||
|
@ -53,7 +48,7 @@ function nav_info(&$a) {
|
||||||
|
|
||||||
$ssl_state = ((local_user()) ? true : false);
|
$ssl_state = ((local_user()) ? true : false);
|
||||||
|
|
||||||
/**
|
/*
|
||||||
*
|
*
|
||||||
* Our network is distributed, and as you visit friends some of the
|
* Our network is distributed, and as you visit friends some of the
|
||||||
* sites look exactly the same - it isn't always easy to know where you are.
|
* sites look exactly the same - it isn't always easy to know where you are.
|
||||||
|
@ -69,7 +64,7 @@ function nav_info(&$a) {
|
||||||
// nav links: array of array('href', 'text', 'extra css classes', 'title')
|
// nav links: array of array('href', 'text', 'extra css classes', 'title')
|
||||||
$nav = Array();
|
$nav = Array();
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Display login or logout
|
* Display login or logout
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -100,7 +95,7 @@ function nav_info(&$a) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* "Home" should also take you home from an authenticated remote profile connection
|
* "Home" should also take you home from an authenticated remote profile connection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -151,7 +146,7 @@ function nav_info(&$a) {
|
||||||
|
|
||||||
$nav['about'] = Array('friendica', t('Information'), "", t('Information about this friendica instance'));
|
$nav['about'] = Array('friendica', t('Information'), "", t('Information about this friendica instance'));
|
||||||
|
|
||||||
/**
|
/*
|
||||||
*
|
*
|
||||||
* The following nav links are only show to logged in users
|
* The following nav links are only show to logged in users
|
||||||
*
|
*
|
||||||
|
@ -195,7 +190,7 @@ function nav_info(&$a) {
|
||||||
$nav['contacts'] = array('contacts', t('Contacts'),"", t('Manage/edit friends and contacts'));
|
$nav['contacts'] = array('contacts', t('Contacts'),"", t('Manage/edit friends and contacts'));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/*
|
||||||
* Admin page
|
* Admin page
|
||||||
*/
|
*/
|
||||||
if (is_site_admin()){
|
if (is_site_admin()){
|
||||||
|
@ -206,7 +201,7 @@ function nav_info(&$a) {
|
||||||
$nav['navigation'] = array('navigation/', t('Navigation'), "", t('Site map'));
|
$nav['navigation'] = array('navigation/', t('Navigation'), "", t('Site map'));
|
||||||
|
|
||||||
|
|
||||||
/**
|
/*
|
||||||
*
|
*
|
||||||
* Provide a banner/logo/whatever
|
* Provide a banner/logo/whatever
|
||||||
*
|
*
|
||||||
|
@ -229,26 +224,26 @@ function nav_info(&$a) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* Set a menu item in navbar as selected
|
* Set a menu item in navbar as selected
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
function nav_set_selected($item){
|
function nav_set_selected($item){
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
$a->nav_sel = array(
|
$a->nav_sel = array(
|
||||||
'community' => null,
|
'community' => null,
|
||||||
'network' => null,
|
'network' => null,
|
||||||
'home' => null,
|
'home' => null,
|
||||||
'profiles' => null,
|
'profiles' => null,
|
||||||
'introductions' => null,
|
'introductions' => null,
|
||||||
'notifications' => null,
|
'notifications' => null,
|
||||||
'messages' => null,
|
'messages' => null,
|
||||||
'directory' => null,
|
'directory' => null,
|
||||||
'settings' => null,
|
'settings' => null,
|
||||||
'contacts' => null,
|
'contacts' => null,
|
||||||
'manage' => null,
|
'manage' => null,
|
||||||
'events' => null,
|
'events' => null,
|
||||||
'register' => null,
|
'register' => null,
|
||||||
);
|
);
|
||||||
$a->nav_sel[$item] = 'selected';
|
$a->nav_sel[$item] = 'selected';
|
||||||
}
|
}
|
||||||
|
|
|
@ -210,7 +210,6 @@ key { display: inline; background-color: #eee; color: #666; padding:0.2em; font-
|
||||||
.notify-unseen { background-color: #cceeFF; }
|
.notify-unseen { background-color: #cceeFF; }
|
||||||
|
|
||||||
/* autocomplete popup */
|
/* autocomplete popup */
|
||||||
|
|
||||||
ul.acpopup {
|
ul.acpopup {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -220,7 +219,6 @@ ul.acpopup {
|
||||||
}
|
}
|
||||||
nav .acpopup {
|
nav .acpopup {
|
||||||
width: 290px;
|
width: 290px;
|
||||||
margin-left: -35px;
|
|
||||||
max-height: 450px;
|
max-height: 450px;
|
||||||
max-width: 300px;
|
max-width: 300px;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$("#recip").name_autocomplete(baseurl + '/acl', '', false, function(data) {
|
$("#recip").name_autocomplete(baseurl + '/acl', 'm', false, function(data) {
|
||||||
$("#recip-complete").val(data.id);
|
$("#recip-complete").val(data.id);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
0
view/templates/nav_head.tpl
Normal file
0
view/templates/nav_head.tpl
Normal file
|
@ -43,7 +43,7 @@ nav a {
|
||||||
color: #737373;
|
color: #737373;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #search-box #search-text {
|
nav #nav-search-box #nav-search-text {
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,6 @@ nav ul li .menu-popup {
|
||||||
right: 0px;
|
right: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #search-box #search-text {
|
nav #nav-search-box #nav-search-text {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,7 @@ section {
|
||||||
top: 44px;
|
top: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #search-box #search-text {
|
nav #nav-search-box #nav-search-text {
|
||||||
background-color: initial;
|
background-color: initial;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
|
|
|
@ -146,7 +146,7 @@ section {
|
||||||
top: 44px;
|
top: 44px;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #search-box #search-text {
|
nav #nav-search-box #nav-search-text {
|
||||||
background-color: initial;
|
background-color: initial;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
border-width: 1px;
|
border-width: 1px;
|
||||||
|
|
|
@ -24,69 +24,69 @@ img {
|
||||||
}
|
}
|
||||||
|
|
||||||
#pending-update {
|
#pending-update {
|
||||||
float:right;
|
float:right;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
background-color: #FF0000;
|
background-color: #FF0000;
|
||||||
padding: 0em 0.3em;
|
padding: 0em 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.admin.linklist {
|
.admin.linklist {
|
||||||
border: 0px;
|
border: 0px;
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
list-style: none;
|
list-style: none;
|
||||||
margin-top: 0px;
|
margin-top: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.admin.link {
|
.admin.link {
|
||||||
list-style-position: inside;
|
list-style-position: inside;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
/* padding-left: 5px;
|
/* padding-left: 5px;
|
||||||
margin: 5px; */
|
margin: 5px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage dl {
|
#adminpage dl {
|
||||||
clear: left;
|
clear: left;
|
||||||
margin-bottom: 2px;
|
margin-bottom: 2px;
|
||||||
padding-bottom: 2px;
|
padding-bottom: 2px;
|
||||||
border-bottom: 1px solid black;
|
border-bottom: 1px solid black;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage dt {
|
#adminpage dt {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
float: left;
|
float: left;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage dd {
|
#adminpage dd {
|
||||||
margin-left: 200px;
|
margin-left: 200px;
|
||||||
}
|
}
|
||||||
#adminpage h3 {
|
#adminpage h3 {
|
||||||
border-bottom: 1px solid #898989;
|
border-bottom: 1px solid #898989;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage .submit {
|
#adminpage .submit {
|
||||||
clear:left;
|
clear:left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage #pluginslist {
|
#adminpage #pluginslist {
|
||||||
margin: 0px; padding: 0px;
|
margin: 0px; padding: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage .plugin {
|
#adminpage .plugin {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
display: block;
|
display: block;
|
||||||
/* border: 1px solid #888888; */
|
/* border: 1px solid #888888; */
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
clear: left;
|
clear: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage .toggleplugin {
|
#adminpage .toggleplugin {
|
||||||
float:left;
|
float:left;
|
||||||
margin-right: 1em;
|
margin-right: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adminpage table {width:100%; border-bottom: 1px solid #000000; margin: 5px 0px;}
|
#adminpage table {width:100%; border-bottom: 1px solid #000000; margin: 5px 0px;}
|
||||||
|
@ -641,7 +641,7 @@ nav ul li .menu-popup {
|
||||||
right: auto;
|
right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
nav #search-box #search-text {
|
nav #nav-search-box #nav-search-text {
|
||||||
/*background-image: url('icons/lupe.png');
|
/*background-image: url('icons/lupe.png');
|
||||||
background-repeat:no-repeat; */
|
background-repeat:no-repeat; */
|
||||||
padding-left:0px;
|
padding-left:0px;
|
||||||
|
@ -912,6 +912,10 @@ acpopup-mce {
|
||||||
color: #2d2d2d;
|
color: #2d2d2d;
|
||||||
max-height: 150px;
|
max-height: 150px;
|
||||||
}
|
}
|
||||||
|
nav .acpopup {
|
||||||
|
top: 31px !important;
|
||||||
|
margin-left: -23px
|
||||||
|
}
|
||||||
.acpopupitem {
|
.acpopupitem {
|
||||||
color: #2d2d2d;
|
color: #2d2d2d;
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
|
|
|
@ -80,9 +80,9 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{if $nav.search}}
|
{{if $nav.search}}
|
||||||
<li role="search" id="search-box">
|
<li role="search" id="nav-search-box">
|
||||||
<form method="get" action="{{$nav.search.0}}">
|
<form method="get" action="{{$nav.search.0}}">
|
||||||
<input accesskey="s" id="search-text" class="nav-menu-search" type="text" value="" name="search">
|
<input accesskey="s" id="nav-search-text" class="nav-menu-search" type="text" value="" name="search" placeholder=" {{$search_hint}}">
|
||||||
<select name="search-option">
|
<select name="search-option">
|
||||||
<option value="fulltext">{{$nav.searchoption.0}}</option>
|
<option value="fulltext">{{$nav.searchoption.0}}</option>
|
||||||
<option value="tags">{{$nav.searchoption.1}}</option>
|
<option value="tags">{{$nav.searchoption.1}}</option>
|
||||||
|
|
6
view/theme/vier/templates/nav_head.tpl
Normal file
6
view/theme/vier/templates/nav_head.tpl
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$("#nav-search-text").search_autocomplete(baseurl + '/acl');
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Reference in a new issue