Refactor widgets

- Move widget templates to subfolder
- Add new generic filter widget templates to replace category, network and filer filters
- Update styles
This commit is contained in:
Hypolite Petovan 2019-05-18 11:33:35 -04:00
parent 6cc376020e
commit 71ae8d07a6
37 changed files with 260 additions and 308 deletions

View file

@ -59,7 +59,7 @@ function cal_init(App $a)
$account_type = Contact::getAccountType($profile); $account_type = Contact::getAccountType($profile);
$tpl = Renderer::getMarkupTemplate("vcard-widget.tpl"); $tpl = Renderer::getMarkupTemplate("widget/vcard.tpl");
$vcard_widget = Renderer::replaceMacros($tpl, [ $vcard_widget = Renderer::replaceMacros($tpl, [
'$name' => $profile['name'], '$name' => $profile['name'],

View file

@ -47,7 +47,7 @@ function common_content(App $a)
$contact = DBA::selectFirst('contact', ['name', 'url', 'photo', 'uid', 'id'], ['self' => true, 'uid' => $uid]); $contact = DBA::selectFirst('contact', ['name', 'url', 'photo', 'uid', 'id'], ['self' => true, 'uid' => $uid]);
if (DBA::isResult($contact)) { if (DBA::isResult($contact)) {
$vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate("vcard-widget.tpl"), [ $vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate("widget/vcard.tpl"), [
'$name' => $contact['name'], '$name' => $contact['name'],
'$photo' => $contact['photo'], '$photo' => $contact['photo'],
'url' => 'contact/' . $cid 'url' => 'contact/' . $cid

View file

@ -61,7 +61,7 @@ function photos_init(App $a) {
$account_type = Contact::getAccountType($profile); $account_type = Contact::getAccountType($profile);
$tpl = Renderer::getMarkupTemplate("vcard-widget.tpl"); $tpl = Renderer::getMarkupTemplate("widget/vcard.tpl");
$vcard_widget = Renderer::replaceMacros($tpl, [ $vcard_widget = Renderer::replaceMacros($tpl, [
'$name' => $profile['name'], '$name' => $profile['name'],

View file

@ -49,7 +49,7 @@ function videos_init(App $a)
$account_type = Contact::getAccountType($profile); $account_type = Contact::getAccountType($profile);
$tpl = Renderer::getMarkupTemplate("vcard-widget.tpl"); $tpl = Renderer::getMarkupTemplate("widget/vcard.tpl");
$vcard_widget = Renderer::replaceMacros($tpl, [ $vcard_widget = Renderer::replaceMacros($tpl, [
'$name' => $profile['name'], '$name' => $profile['name'],

View file

@ -31,7 +31,7 @@ class Widget
*/ */
public static function follow($value = "") public static function follow($value = "")
{ {
return Renderer::replaceMacros(Renderer::getMarkupTemplate('follow.tpl'), array( return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/follow.tpl'), array(
'$connect' => L10n::t('Add New Contact'), '$connect' => L10n::t('Add New Contact'),
'$desc' => L10n::t('Enter address or web location'), '$desc' => L10n::t('Enter address or web location'),
'$hint' => L10n::t('Example: bob@example.com, http://example.com/barbara'), '$hint' => L10n::t('Example: bob@example.com, http://example.com/barbara'),
@ -74,7 +74,7 @@ class Widget
$aside = []; $aside = [];
$aside['$nv'] = $nv; $aside['$nv'] = $nv;
return Renderer::replaceMacros(Renderer::getMarkupTemplate('peoplefind.tpl'), $aside); return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/peoplefind.tpl'), $aside);
} }
/** /**
@ -120,6 +120,46 @@ class Widget
return $network_filter; return $network_filter;
} }
/**
* @param string $type
* @param string $title
* @param string $desc
* @param string $all
* @param string $baseUrl
* @param array $options
* @param string $selected
* @return string
* @throws \Exception
*/
public static function filter($type, $title, $desc, $all, $baseUrl, array $options, $selected = null)
{
$queryString = parse_url($baseUrl, PHP_URL_QUERY);
$queryArray = [];
if ($queryString) {
parse_str($queryString, $queryArray);
unset($queryArray[$type]);
if (count($queryArray)) {
$baseUrl = substr($baseUrl, 0, strpos($baseUrl, '?')) . '?' . http_build_query($queryArray) . '&';
} else {
$baseUrl = substr($baseUrl, 0, strpos($baseUrl, '?')) . '?';
}
} else {
$baseUrl = trim($baseUrl, '?') . '?';
}
return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/filter.tpl'), [
'$type' => $type,
'$title' => $title,
'$desc' => $desc,
'$selected' => $selected,
'$all_label' => $all,
'$options' => $options,
'$base' => $baseUrl,
]);
}
/** /**
* Return networks widget * Return networks widget
* *
@ -146,7 +186,7 @@ class Widget
$nets = array(); $nets = array();
while ($rr = DBA::fetch($r)) { while ($rr = DBA::fetch($r)) {
$nets[] = array('ref' => $rr['network'], 'name' => ContactSelector::networkToName($rr['network']), 'selected' => (($selected == $rr['network']) ? 'selected' : '' )); $nets[] = ['ref' => $rr['network'], 'name' => ContactSelector::networkToName($rr['network'])];
} }
DBA::close($r); DBA::close($r);
@ -154,14 +194,15 @@ class Widget
return ''; return '';
} }
return Renderer::replaceMacros(Renderer::getMarkupTemplate('nets.tpl'), array( return self::filter(
'$title' => L10n::t('Protocols'), 'nets',
'$desc' => '', L10n::t('Protocols'),
'$sel_all' => (($selected == '') ? 'selected' : ''), '',
'$all' => L10n::t('All Protocols'), L10n::t('All Protocols'),
'$nets' => $nets, $baseurl,
'$base' => $baseurl, $nets,
)); $selected
);
} }
/** /**
@ -183,25 +224,26 @@ class Widget
return; return;
} }
$matches = false; $matches = [];
$terms = array(); $terms = array();
$cnt = preg_match_all('/\[(.*?)\]/', $saved, $matches, PREG_SET_ORDER); $cnt = preg_match_all('/\[(.*?)\]/', $saved, $matches, PREG_SET_ORDER);
if ($cnt) { if ($cnt) {
foreach ($matches as $mtch) foreach ($matches as $mtch)
{ {
$unescaped = XML::escape(FileTag::decode($mtch[1])); $unescaped = XML::escape(FileTag::decode($mtch[1]));
$terms[] = array('name' => $unescaped, 'selected' => (($selected == $unescaped) ? 'selected' : '')); $terms[] = ['ref' => $unescaped, 'name' => $unescaped];
} }
} }
return Renderer::replaceMacros(Renderer::getMarkupTemplate('fileas_widget.tpl'), array( return self::filter(
'$title' => L10n::t('Saved Folders'), 'file',
'$desc' => '', L10n::t('Saved Folders'),
'$sel_all' => (($selected == '') ? 'selected' : ''), '',
'$all' => L10n::t('Everything'), L10n::t('Everything'),
'$terms' => $terms, $baseurl,
'$base' => $baseurl, $terms,
)); $selected
);
} }
/** /**
@ -225,25 +267,26 @@ class Widget
return; return;
} }
$matches = false; $matches = [];
$terms = array(); $terms = array();
$cnt = preg_match_all('/<(.*?)>/', $saved, $matches, PREG_SET_ORDER); $cnt = preg_match_all('/<(.*?)>/', $saved, $matches, PREG_SET_ORDER);
if ($cnt) { if ($cnt) {
foreach ($matches as $mtch) { foreach ($matches as $mtch) {
$unescaped = XML::escape(FileTag::decode($mtch[1])); $unescaped = XML::escape(FileTag::decode($mtch[1]));
$terms[] = array('name' => $unescaped, 'selected' => (($selected == $unescaped) ? 'selected' : '')); $terms[] = ['ref' => $unescaped, 'name' => $unescaped];
} }
} }
return Renderer::replaceMacros(Renderer::getMarkupTemplate('categories_widget.tpl'), array( return self::filter(
'$title' => L10n::t('Categories'), 'category',
'$desc' => '', L10n::t('Categories'),
'$sel_all' => (($selected == '') ? 'selected' : ''), '',
'$all' => L10n::t('Everything'), L10n::t('Everything'),
'$terms' => $terms, $baseurl,
'$base' => $baseurl, $terms,
)); $selected
);
} }
/** /**
@ -319,7 +362,7 @@ class Widget
$entries[] = $entry; $entries[] = $entry;
} }
$tpl = Renderer::getMarkupTemplate('remote_friends_common.tpl'); $tpl = Renderer::getMarkupTemplate('widget/remote_friends_common.tpl');
return Renderer::replaceMacros($tpl, [ return Renderer::replaceMacros($tpl, [
'$desc' => L10n::tt("%d contact in common", "%d contacts in common", $t), '$desc' => L10n::tt("%d contact in common", "%d contacts in common", $t),
'$base' => System::baseUrl(), '$base' => System::baseUrl(),

View file

@ -59,7 +59,7 @@ class CalendarExport
// of the profile page it should be the personal /events page. So we can use $a->user. // of the profile page it should be the personal /events page. So we can use $a->user.
$user = defaults($a->data['user'], 'nickname', $a->user['nickname']); $user = defaults($a->data['user'], 'nickname', $a->user['nickname']);
$tpl = Renderer::getMarkupTemplate("events_aside.tpl"); $tpl = Renderer::getMarkupTemplate("widget/events.tpl");
$return = Renderer::replaceMacros($tpl, [ $return = Renderer::replaceMacros($tpl, [
'$etitle' => L10n::t("Export"), '$etitle' => L10n::t("Export"),
'$export_ical' => L10n::t("Export calendar as ical"), '$export_ical' => L10n::t("Export calendar as ical"),

View file

@ -26,7 +26,7 @@ class ContactBlock
/** /**
* Get HTML for contact block * Get HTML for contact block
* *
* @template contact_block.tpl * @template widget/contacts.tpl
* @hook contact_block_end (contacts=>array, output=>string) * @hook contact_block_end (contacts=>array, output=>string)
* @return string * @return string
*/ */
@ -102,7 +102,7 @@ class ContactBlock
DBA::close($contact_ids_stmt); DBA::close($contact_ids_stmt);
} }
$tpl = Renderer::getMarkupTemplate('contact_block.tpl'); $tpl = Renderer::getMarkupTemplate('widget/contacts.tpl');
$o = Renderer::replaceMacros($tpl, [ $o = Renderer::replaceMacros($tpl, [
'$contacts' => $contacts_title, '$contacts' => $contacts_title,
'$nickname' => $profile['nickname'], '$nickname' => $profile['nickname'],

View file

@ -49,7 +49,7 @@ class TagCloud
$tags[] = $tag; $tags[] = $tag;
} }
$tpl = Renderer::getMarkupTemplate('tagblock_widget.tpl'); $tpl = Renderer::getMarkupTemplate('widget/tagcloud.tpl');
$o = Renderer::replaceMacros($tpl, [ $o = Renderer::replaceMacros($tpl, [
'$title' => L10n::t('Tags'), '$title' => L10n::t('Tags'),
'$tags' => $tags '$tags' => $tags

View file

@ -18,6 +18,8 @@ use Friendica\Core\System;
use Friendica\Core\Worker; use Friendica\Core\Worker;
use Friendica\Database\DBA; use Friendica\Database\DBA;
use Friendica\Model; use Friendica\Model;
use Friendica\Network\HTTPException\BadRequestException;
use Friendica\Network\HTTPException\NotFoundException;
use Friendica\Network\Probe; use Friendica\Network\Probe;
use Friendica\Util\DateTimeFormat; use Friendica\Util\DateTimeFormat;
use Friendica\Util\Proxy as ProxyUtils; use Friendica\Util\Proxy as ProxyUtils;
@ -30,102 +32,6 @@ use Friendica\Util\Strings;
*/ */
class Contact extends BaseModule class Contact extends BaseModule
{ {
public static function init()
{
$a = self::getApp();
if (!local_user()) {
return;
}
$nets = defaults($_GET, 'nets', '');
if (empty($a->page['aside'])) {
$a->page['aside'] = '';
}
$contact_id = null;
$contact = null;
// @TODO: Replace with parameter from router
if ($a->argc == 2 && intval($a->argv[1])
|| $a->argc == 3 && intval($a->argv[1]) && in_array($a->argv[2], ['posts', 'conversations'])
) {
$contact_id = intval($a->argv[1]);
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false]);
if (!DBA::isResult($contact)) {
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => 0, 'deleted' => false]);
}
// Don't display contacts that are about to be deleted
if ($contact['network'] == Protocol::PHANTOM) {
$contact = false;
}
}
if (DBA::isResult($contact)) {
if ($contact['self']) {
// @TODO: Replace with parameter from router
if (($a->argc == 3) && intval($a->argv[1]) && in_array($a->argv[2], ['posts', 'conversations'])) {
$a->internalRedirect('profile/' . $contact['nick']);
} else {
$a->internalRedirect('profile/' . $contact['nick'] . '?tab=profile');
}
}
$a->data['contact'] = $contact;
if (($contact['network'] != '') && ($contact['network'] != Protocol::DFRN)) {
$network_link = Strings::formatNetworkName($contact['network'], $contact['url']);
} else {
$network_link = '';
}
$vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate('vcard-widget.tpl'), [
'$name' => $contact['name'],
'$photo' => $contact['photo'],
'$url' => Model\Contact::MagicLink($contact['url']),
'$addr' => defaults($contact, 'addr', ''),
'$network_link' => $network_link,
'$network' => L10n::t('Network:'),
'$account_type' => Model\Contact::getAccountType($contact)
]);
$findpeople_widget = '';
$follow_widget = '';
$networks_widget = '';
} else {
$vcard_widget = '';
$networks_widget = Widget::networks('contact', $nets);
if (isset($_GET['add'])) {
$follow_widget = Widget::follow($_GET['add']);
} else {
$follow_widget = Widget::follow();
}
$findpeople_widget = Widget::findPeople();
}
if ($contact['uid'] != 0) {
$groups_widget = Model\Group::sidebarWidget('contact', 'group', 'full', 'everyone', $contact_id);
} else {
$groups_widget = null;
}
$a->page['aside'] .= Renderer::replaceMacros(Renderer::getMarkupTemplate('contacts-widget-sidebar.tpl'), [
'$vcard_widget' => $vcard_widget,
'$findpeople_widget' => $findpeople_widget,
'$follow_widget' => $follow_widget,
'$groups_widget' => $groups_widget,
'$networks_widget' => $networks_widget
]);
$tpl = Renderer::getMarkupTemplate('contacts-head.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$baseurl' => $a->getBaseURL(true),
]);
}
private static function batchActions(App $a) private static function batchActions(App $a)
{ {
if (empty($_POST['contact_batch']) || !is_array($_POST['contact_batch'])) { if (empty($_POST['contact_batch']) || !is_array($_POST['contact_batch'])) {
@ -353,7 +259,93 @@ class Contact extends BaseModule
public static function content($update = 0) public static function content($update = 0)
{ {
if (!local_user()) {
return Login::form($_SERVER['REQUET_URI']);
}
$a = self::getApp(); $a = self::getApp();
$nets = defaults($_GET, 'nets', '');
if (empty($a->page['aside'])) {
$a->page['aside'] = '';
}
$contact_id = null;
$contact = null;
// @TODO: Replace with parameter from router
if ($a->argc == 2 && intval($a->argv[1])
|| $a->argc == 3 && intval($a->argv[1]) && in_array($a->argv[2], ['posts', 'conversations'])
) {
$contact_id = intval($a->argv[1]);
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => local_user(), 'deleted' => false]);
if (!DBA::isResult($contact)) {
$contact = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => 0, 'deleted' => false]);
}
// Don't display contacts that are about to be deleted
if ($contact['network'] == Protocol::PHANTOM) {
$contact = false;
}
}
if (DBA::isResult($contact)) {
if ($contact['self']) {
// @TODO: Replace with parameter from router
if (($a->argc == 3) && intval($a->argv[1]) && in_array($a->argv[2], ['posts', 'conversations'])) {
$a->internalRedirect('profile/' . $contact['nick']);
} else {
$a->internalRedirect('profile/' . $contact['nick'] . '?tab=profile');
}
}
$a->data['contact'] = $contact;
if (($contact['network'] != '') && ($contact['network'] != Protocol::DFRN)) {
$network_link = Strings::formatNetworkName($contact['network'], $contact['url']);
} else {
$network_link = '';
}
$vcard_widget = Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/vcard.tpl'), [
'$name' => $contact['name'],
'$photo' => $contact['photo'],
'$url' => Model\Contact::magicLinkByContact($contact, $contact['url']),
'$addr' => defaults($contact, 'addr', ''),
'$network_link' => $network_link,
'$network' => L10n::t('Network:'),
'$account_type' => Model\Contact::getAccountType($contact)
]);
$findpeople_widget = '';
$follow_widget = '';
$networks_widget = '';
} else {
$vcard_widget = '';
$findpeople_widget = Widget::findPeople();
if (isset($_GET['add'])) {
$follow_widget = Widget::follow($_GET['add']);
} else {
$follow_widget = Widget::follow();
}
$networks_widget = Widget::networks($_SERVER['REQUEST_URI'], $nets);
}
if ($contact['uid'] != 0) {
$groups_widget = Model\Group::sidebarWidget('contact', 'group', 'full', 'everyone', $contact_id);
} else {
$groups_widget = null;
}
$a->page['aside'] .= $vcard_widget . $findpeople_widget . $follow_widget . $groups_widget . $networks_widget;
$tpl = Renderer::getMarkupTemplate('contacts-head.tpl');
$a->page['htmlhead'] .= Renderer::replaceMacros($tpl, [
'$baseurl' => $a->getBaseURL(true),
]);
$sort_type = 0; $sort_type = 0;
$o = ''; $o = '';
Nav::setSelected('contact'); Nav::setSelected('contact');
@ -366,7 +358,7 @@ class Contact extends BaseModule
if ($a->argc == 3) { if ($a->argc == 3) {
$contact_id = intval($a->argv[1]); $contact_id = intval($a->argv[1]);
if (!$contact_id) { if (!$contact_id) {
return; throw new BadRequestException();
} }
// @TODO: Replace with parameter from router // @TODO: Replace with parameter from router
@ -374,9 +366,7 @@ class Contact extends BaseModule
$orig_record = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => [0, local_user()], 'self' => false, 'deleted' => false]); $orig_record = DBA::selectFirst('contact', [], ['id' => $contact_id, 'uid' => [0, local_user()], 'self' => false, 'deleted' => false]);
if (!DBA::isResult($orig_record)) { if (!DBA::isResult($orig_record)) {
notice(L10n::t('Could not access contact record.') . EOL); throw new NotFoundException(L10n::t('Contact not found'));
$a->internalRedirect('contact');
return; // NOTREACHED
} }
if ($cmd === 'update' && ($orig_record['uid'] != 0)) { if ($cmd === 'update' && ($orig_record['uid'] != 0)) {
@ -398,7 +388,7 @@ class Contact extends BaseModule
info(($blocked ? L10n::t('Contact has been blocked') : L10n::t('Contact has been unblocked')) . EOL); info(($blocked ? L10n::t('Contact has been blocked') : L10n::t('Contact has been unblocked')) . EOL);
$a->internalRedirect('contact/' . $contact_id); $a->internalRedirect('contact/' . $contact_id);
return; // NOTREACHED // NOTREACHED
} }
if ($cmd === 'ignore') { if ($cmd === 'ignore') {
@ -408,7 +398,7 @@ class Contact extends BaseModule
info(($ignored ? L10n::t('Contact has been ignored') : L10n::t('Contact has been unignored')) . EOL); info(($ignored ? L10n::t('Contact has been ignored') : L10n::t('Contact has been unignored')) . EOL);
$a->internalRedirect('contact/' . $contact_id); $a->internalRedirect('contact/' . $contact_id);
return; // NOTREACHED // NOTREACHED
} }
if ($cmd === 'archive' && ($orig_record['uid'] != 0)) { if ($cmd === 'archive' && ($orig_record['uid'] != 0)) {
@ -419,7 +409,7 @@ class Contact extends BaseModule
} }
$a->internalRedirect('contact/' . $contact_id); $a->internalRedirect('contact/' . $contact_id);
return; // NOTREACHED // NOTREACHED
} }
if ($cmd === 'drop' && ($orig_record['uid'] != 0)) { if ($cmd === 'drop' && ($orig_record['uid'] != 0)) {
@ -459,7 +449,7 @@ class Contact extends BaseModule
info(L10n::t('Contact has been removed.') . EOL); info(L10n::t('Contact has been removed.') . EOL);
$a->internalRedirect('contact'); $a->internalRedirect('contact');
return; // NOTREACHED // NOTREACHED
} }
if ($cmd === 'posts') { if ($cmd === 'posts') {
return self::getPostsHTML($a, $contact_id); return self::getPostsHTML($a, $contact_id);
@ -664,30 +654,24 @@ class Contact extends BaseModule
return $arr['output']; return $arr['output'];
} }
$blocked = false;
$hidden = false;
$ignored = false;
$archived = false;
$all = false;
// @TODO: Replace with parameter from router // @TODO: Replace with parameter from router
if (($a->argc == 2) && ($a->argv[1] === 'all')) { $type = defaults($a->argv, 1, '');
$sql_extra = '';
$all = true; switch ($type) {
} elseif (($a->argc == 2) && ($a->argv[1] === 'blocked')) { case 'blocked':
$sql_extra = " AND `blocked` = 1 "; $sql_extra = " AND `blocked` = 1";
$blocked = true; break;
} elseif (($a->argc == 2) && ($a->argv[1] === 'hidden')) { case 'hidden':
$sql_extra = " AND `hidden` = 1 "; $sql_extra = " AND `hidden` = 1 AND `blocked` = 0";
$hidden = true; break;
} elseif (($a->argc == 2) && ($a->argv[1] === 'ignored')) { case 'ignored':
$sql_extra = " AND `readonly` = 1 "; $sql_extra = " AND `readonly` = 1 AND `blocked` = 0";
$ignored = true; break;
} elseif (($a->argc == 2) && ($a->argv[1] === 'archived')) { case 'archived':
$sql_extra = " AND `archive` = 1 "; $sql_extra = " AND `archive` = 1 AND `blocked` = 0";
$archived = true; break;
} else { default:
$sql_extra = " AND `blocked` = 0 "; $sql_extra = " AND `blocked` = 0";
} }
$sql_extra .= sprintf(" AND `network` != '%s' ", Protocol::PHANTOM); $sql_extra .= sprintf(" AND `network` != '%s' ", Protocol::PHANTOM);
@ -696,34 +680,18 @@ class Contact extends BaseModule
$nets = Strings::escapeTags(trim(defaults($_GET, 'nets' , ''))); $nets = Strings::escapeTags(trim(defaults($_GET, 'nets' , '')));
$tabs = [ $tabs = [
[
'label' => L10n::t('Suggestions'),
'url' => 'suggest',
'sel' => '',
'title' => L10n::t('Suggest potential friends'),
'id' => 'suggestions-tab',
'accesskey' => 'g',
],
[ [
'label' => L10n::t('All Contacts'), 'label' => L10n::t('All Contacts'),
'url' => 'contact/all', 'url' => 'contact',
'sel' => ($all) ? 'active' : '', 'sel' => !$type ? 'active' : '',
'title' => L10n::t('Show all contacts'), 'title' => L10n::t('Show all contacts'),
'id' => 'showall-tab', 'id' => 'showall-tab',
'accesskey' => 'l', 'accesskey' => 'l',
], ],
[
'label' => L10n::t('Unblocked'),
'url' => 'contact',
'sel' => ((!$all) && (!$blocked) && (!$hidden) && (!$search) && (!$nets) && (!$ignored) && (!$archived)) ? 'active' : '',
'title' => L10n::t('Only show unblocked contacts'),
'id' => 'showunblocked-tab',
'accesskey' => 'o',
],
[ [
'label' => L10n::t('Blocked'), 'label' => L10n::t('Blocked'),
'url' => 'contact/blocked', 'url' => 'contact/blocked',
'sel' => ($blocked) ? 'active' : '', 'sel' => $type == 'blocked' ? 'active' : '',
'title' => L10n::t('Only show blocked contacts'), 'title' => L10n::t('Only show blocked contacts'),
'id' => 'showblocked-tab', 'id' => 'showblocked-tab',
'accesskey' => 'b', 'accesskey' => 'b',
@ -731,7 +699,7 @@ class Contact extends BaseModule
[ [
'label' => L10n::t('Ignored'), 'label' => L10n::t('Ignored'),
'url' => 'contact/ignored', 'url' => 'contact/ignored',
'sel' => ($ignored) ? 'active' : '', 'sel' => $type == 'ignored' ? 'active' : '',
'title' => L10n::t('Only show ignored contacts'), 'title' => L10n::t('Only show ignored contacts'),
'id' => 'showignored-tab', 'id' => 'showignored-tab',
'accesskey' => 'i', 'accesskey' => 'i',
@ -739,7 +707,7 @@ class Contact extends BaseModule
[ [
'label' => L10n::t('Archived'), 'label' => L10n::t('Archived'),
'url' => 'contact/archived', 'url' => 'contact/archived',
'sel' => ($archived) ? 'active' : '', 'sel' => $type == 'archived' ? 'active' : '',
'title' => L10n::t('Only show archived contacts'), 'title' => L10n::t('Only show archived contacts'),
'id' => 'showarchived-tab', 'id' => 'showarchived-tab',
'accesskey' => 'y', 'accesskey' => 'y',
@ -747,7 +715,7 @@ class Contact extends BaseModule
[ [
'label' => L10n::t('Hidden'), 'label' => L10n::t('Hidden'),
'url' => 'contact/hidden', 'url' => 'contact/hidden',
'sel' => ($hidden) ? 'active' : '', 'sel' => $type == 'hidden' ? 'active' : '',
'title' => L10n::t('Only show hidden contacts'), 'title' => L10n::t('Only show hidden contacts'),
'id' => 'showhidden-tab', 'id' => 'showhidden-tab',
'accesskey' => 'h', 'accesskey' => 'h',
@ -755,7 +723,7 @@ class Contact extends BaseModule
[ [
'label' => L10n::t('Groups'), 'label' => L10n::t('Groups'),
'url' => 'group', 'url' => 'group',
'sel' => ($hidden) ? 'active' : '', 'sel' => '',
'title' => L10n::t('Organize your contact groups'), 'title' => L10n::t('Organize your contact groups'),
'id' => 'contactgroups-tab', 'id' => 'contactgroups-tab',
'accesskey' => 'e', 'accesskey' => 'e',
@ -809,9 +777,18 @@ class Contact extends BaseModule
} }
} }
switch ($type) {
case 'blocked': $header .= ' - ' . L10n::t('Blocked'); break;
case 'hidden': $header .= ' - ' . L10n::t('Hidden'); break;
case 'ignored': $header .= ' - ' . L10n::t('Ignored'); break;
case 'archived': $header .= ' - ' . L10n::t('Archived'); break;
}
$header .= $nets ? ' - ' . ContactSelector::networkToName($nets) : '';
$tpl = Renderer::getMarkupTemplate('contacts-template.tpl'); $tpl = Renderer::getMarkupTemplate('contacts-template.tpl');
$o .= Renderer::replaceMacros($tpl, [ $o .= Renderer::replaceMacros($tpl, [
'$header' => L10n::t('Contacts') . (($nets) ? ' - ' . ContactSelector::networkToName($nets) : ''), '$header' => $header,
'$tabs' => $t, '$tabs' => $t,
'$total' => $total, '$total' => $total,
'$search' => $search_hdr, '$search' => $search_hdr,

View file

@ -1,13 +0,0 @@
<div id="categories-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul class="categories-ul">
<li class="tool"><a href="{{$base}}" class="categories-link categories-all{{if $sel_all}} categories-selected{{/if}}">{{$all}}</a></li>
{{foreach $terms as $term}}
<li class="tool"><a href="{{$base}}?f=&category={{$term.name}}" class="categories-link{{if $term.selected}} categories-selected{{/if}}">{{$term.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -1,7 +0,0 @@
{{$vcard_widget nofilter}}
{{$findpeople_widget nofilter}}
{{$follow_widget nofilter}}
{{$groups_widget nofilter}}
{{$networks_widget nofilter}}

View file

@ -1,13 +0,0 @@
<div id="fileas-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul class="fileas-ul">
<li class="tool"><a href="{{$base}}" class="fileas-link fileas-all{{if $sel_all}} fileas-selected{{/if}}">{{$all}}</a></li>
{{foreach $terms as $term}}
<li class="tool"><a href="{{$base}}?f=&file={{$term.name}}" class="fileas-link{{if $term.selected}} fileas-selected{{/if}}">{{$term.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -1,11 +0,0 @@
<div id="nets-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<a href="{{$base}}" class="nets-link{{if $sel_all}} nets-selected{{/if}} nets-all">{{$all}}</a>
<ul role="menu" class="nets-ul">
{{foreach $nets as $net}}
<li role="menuitem" ><a href="{{$base}}?nets={{$net.ref}}" class="nets-link{{if $net.selected}} nets-selected{{/if}}">{{$net.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -2,7 +2,7 @@
<div id="contact-block"> <div id="contact-block">
<h3 class="contact-block-h4">{{$contacts}}</h3> <h3 class="contact-block-h4">{{$contacts}}</h3>
{{if $micropro}} {{if $micropro}}
<a class="allcontact-link" href="viewcontacts/{{$nickname}}">{{$viewcontacts}}</a> <a class="allcontact-link" href="profile/{{$nickname}}/contacts">{{$viewcontacts}}</a>
<div class='contact-block-content'> <div class='contact-block-content'>
{{foreach $micropro as $m}} {{foreach $micropro as $m}}
{{$m nofilter}} {{$m nofilter}}

View file

@ -0,0 +1,11 @@
<div id="{{$type}}-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="{{$type}}-desc">{{$desc nofilter}}</div>
<ul role="menu" class="{{$type}}-ul">
<li role="menuitem" {{if !$selected}}class="selected"{{/if}}><a href="{{$base}}" class="{{$type}}-link{{if !$selected}} {{$type}}-selected{{/if}} {{$type}}-all">{{$all_label}}</a></li>
{{foreach $options as $option}}
<li role="menuitem" {{if $selected == $option.ref}}class="selected"{{/if}}><a href="{{$base}}{{$type}}={{$option.ref}}" class="{{$type}}-link{{if $selected == $option.ref}} {{$type}}-selected{{/if}}">{{$option.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -153,7 +153,7 @@ input#acl-search {
background:#2e2f2e; background:#2e2f2e;
} }
.group-selected, .nets-selected, .fileas-selected, .categories-selected{ .widget .selected, .group-selected {
background:#2e2f2e; background:#2e2f2e;
} }

View file

@ -126,7 +126,7 @@ nav #site-location {
} }
.contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .profile-jot-text, .group-selected, .nets-selected, .fileas-selected, #profile-jot-submit, .categories-selected { .contact-entry-photo img, .profile-match-photo img, #photo-photo img, .directory-photo-img, .photo-album-photo, .photo-top-photo, .profile-jot-text, .group-selected, .widget .selected, #profile-jot-submit {
border-radius: 3px; border-radius: 3px;
-moz-border-radius: 3px; -moz-border-radius: 3px;
box-shadow: 4px 4px 3px 0 #444444; box-shadow: 4px 4px 3px 0 #444444;

View file

@ -386,7 +386,7 @@ div.wall-item-content-wrapper.shiny {
margin-bottom: 10px; margin-bottom: 10px;
} }
.group-selected, .nets-selected, .fileas-selected, .categories-selected, .forum-selected { .widget .selected, .group-selected, .forum-selected {
padding: 3px; padding: 3px;
-moz-border-radius: 3px; -moz-border-radius: 3px;
border-radius: 3px; border-radius: 3px;
@ -2124,11 +2124,11 @@ a.mail-list-link {
list-style: none; list-style: none;
} }
.nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul { .nets-ul, .fileas-ul, .category-ul, .datebrowse-ul {
list-style-type: none; list-style-type: none;
} }
.nets-ul li, .fileas-ul li, .categories-ul li, .datebrowse-ul li { .nets-ul li, .fileas-ul li, .category-ul li, .datebrowse-ul li {
margin-top: 10px; margin-top: 10px;
} }
@ -2139,11 +2139,11 @@ a.mail-list-link {
margin-left: 42px; margin-left: 42px;
} }
.fileas-link, .categories-link { .fileas-link, .category-link {
margin-left: 24px; margin-left: 24px;
} }
.fileas-all, .categories-all { .fileas-all, .category-all {
margin-left: 0px; margin-left: 0px;
} }

View file

@ -1,13 +0,0 @@
<div id="fileas-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul class="fileas-ul">
<li class="tool{{if $sel_all}} selected{{/if}}"><a href="{{$base}}" class="fileas-link fileas-all{{if $sel_all}} fileas-selected{{/if}}">{{$all}}</a></li>
{{foreach $terms as $term}}
<li class="tool{{if $term.selected}} selected{{/if}}"><a href="{{$base}}?f=&file={{$term.name}}" class="fileas-link{{if $term.selected}} fileas-selected{{/if}}">{{$term.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -1,11 +0,0 @@
<div id="nets-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul role="menu" class="nets-ul">
<li role="menuitem" {{if $sel_all}}class="selected"{{/if}}><a href="{{$base}}" class="nets-link{{if $sel_all}} nets-selected{{/if}} nets-all">{{$all}}</a></li>
{{foreach $nets as $net}}
<li role="menuitem" {{if $net.selected}}class="selected"{{/if}}><a href="{{$base}}?nets={{$net.ref}}" class="nets-link{{if $net.selected}} nets-selected{{/if}}">{{$net.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -2,17 +2,17 @@
<div id="contact-block"> <div id="contact-block">
<h3 class="contact-block-h4 pull-left">{{$contacts}}</h3> <h3 class="contact-block-h4 pull-left">{{$contacts}}</h3>
{{if $micropro}} {{if $micropro}}
<a class="pull-right widget-action faded-icon" id="contact-block-view-contacts" href="viewcontacts/{{$nickname}}"> <a class="pull-right widget-action faded-icon" id="contact-block-view-contacts" href="profile/{{$nickname}}/contacts">
<i class="fa fa-eye" aria-hidden="true"></i> <i class="fa fa-eye" aria-hidden="true"></i>
<span class="sr-only">{{$viewcontacts}}</span> <span class="sr-only">{{$viewcontacts}}</span>
</a> </a>
<div class='contact-block-content'> <div class='contact-block-content'>
{{foreach $micropro as $m}} {{foreach $micropro as $m}}
{{$m nofilter}} {{$m nofilter}}
{{/foreach}} {{/foreach}}
</div> </div>
{{/if}} {{/if}}
</div> </div>
<div class="clear"></div> <div class="clear"></div>

View file

@ -1,12 +0,0 @@
<div id="fileas-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul class="fileas-ul">
<li class="tool {{if $sel_all}}selected{{/if}}"><a href="{{$base}}" class="fileas-link fileas-all">{{$all}}</a></li>
{{foreach $terms as $term}}
<li class="tool {{if $term.selected}}selected{{/if}}"><a href="{{$base}}?f=&file={{$term.name}}" class="fileas-link">{{$term.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -1,12 +0,0 @@
<div id="nets-sidebar" class="widget">
<h3>{{$title}}</h3>
<div id="nets-desc">{{$desc nofilter}}</div>
<ul class="nets-ul">
<li class="tool {{if $sel_all}}selected{{/if}}"><a href="{{$base}}" class="nets-link nets-all">{{$all}}</a>
{{foreach $nets as $net}}
<li class="tool {{if $net.selected}}selected{{/if}}"><a href="{{$base}}?f=&nets={{$net.ref}}" class="nets-link">{{$net.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -0,0 +1,14 @@
<div id="{{$type}}-sidebar" class="widget">
<h3>{{$title}}</h3>
{{if $desc}}
<div id="{{$type}}-desc">{{$desc nofilter}}</div>
{{/if}}
<ul class="{{$type}}-ul">
<li class="tool {{if !$selected}}selected{{/if}}"><a href="{{$base}}" class="{{$type}}-link {{$type}}-all">{{$all_label}}</a>
{{foreach $options as $option}}
<li class="tool {{if $selected == $option.ref}}selected{{/if}}"><a href="{{$base}}{{$type}}={{$option.ref}}" class="{{$type}}-link">{{$option.name}}</a></li>
{{/foreach}}
</ul>
</div>

View file

@ -962,10 +962,9 @@ li.widget-list {
top: 1px; top: 1px;
} }
.group-selected,
.nets-selected, .widget .selected,
.fileas-selected, .group-selected {
.categories-selected {
padding-bottom: 0px; padding-bottom: 0px;
padding-left: 2px; padding-left: 2px;
padding-right: 2px; padding-right: 2px;
@ -1006,13 +1005,13 @@ ul .sidebar-group-li .icon {
width: 12px; width: 12px;
} }
.nets-ul, .fileas-ul, .categories-ul, .datebrowse-ul { .nets-ul, .fileas-ul, .category-ul, .datebrowse-ul {
list-style-type: none; list-style-type: none;
} }
.nets-ul li, .nets-ul li,
.fileas-ul li, .fileas-ul li,
.categories-ul li, .category-ul li,
.datebrowse-link { .datebrowse-link {
} }
@ -1029,12 +1028,12 @@ ul .sidebar-group-li .icon {
} }
.fileas-link, .fileas-link,
.categories-link { .category-link {
margin-left: 0px; margin-left: 0px;
} }
.fileas-all, .fileas-all,
.categories-all { .category-all {
margin-left: 0px; margin-left: 0px;
} }
@ -4627,7 +4626,7 @@ hr.line-dots {
#birthday-notice {} #birthday-notice {}
#nav-notifications-template {} #nav-notifications-template {}
#categories-sidebar {} #category-sidebar {}
#nets-desc {} #nets-desc {}
#status-tab {} #status-tab {}
#page-footer {} #page-footer {}

View file

@ -448,7 +448,7 @@ pre code {
/* color: #000; */ /* color: #000; */
} }
.group-selected, .nets-selected, .fileas-selected, .forum-selected { .widget .selected, .forum-selected {
font-weight: bold; font-weight: bold;
} }

View file

@ -39,7 +39,7 @@
{{/if}} {{/if}}
{{if $nv}} {{if $nv}}
{{include file='peoplefind.tpl' nv=$nv}} {{include file='widget/peoplefind.tpl' nv=$nv}}
{{/if}} {{/if}}
{{if $lastusers_title}} {{if $lastusers_title}}