rework autocomplete: some cleanup and docu

This commit is contained in:
rabuzarus 2016-01-24 19:56:23 +01:00
parent 39a849c113
commit d0ade828c0
13 changed files with 107 additions and 103 deletions

View File

@ -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;

View File

@ -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`

View File

@ -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';
} }

View File

@ -184,7 +184,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;
@ -194,7 +193,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;

View File

@ -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);
}); });
}); });

View File

View 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;
} }

View File

@ -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;
} }

View File

@ -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;

View File

@ -24,7 +24,7 @@ nav .nav-notify {
padding: 1px 3px; padding: 1px 3px;
border-radius: 5px 5px 5px 5px; border-radius: 5px 5px 5px 5px;
} }
// -----
nav .nav-menu-icon .nav-notify { nav .nav-menu-icon .nav-notify {
top: 0px; top: 0px;
} }
@ -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;

View File

@ -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: 1p solid #000000; margin: 5px 0px;} #adminpage table {width:100%; border-bottom: 1p solid #000000; margin: 5px 0px;}
@ -642,7 +642,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;

View File

@ -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>

View File

@ -0,0 +1,6 @@
<script>
$(document).ready(function() {
$("#nav-search-text").search_autocomplete(baseurl + '/acl');
});
</script>