diff options
37 files changed, 436 insertions, 84 deletions
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index c4f4038dc..f13fbe362 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -383,6 +383,13 @@ class Apps { $install_action = (($installed) ? t('Update') : t('Install')); $icon = ((strpos($papp['photo'],'icon:') === 0) ? substr($papp['photo'],5) : ''); + if($mode === 'navbar') { + return replace_macros(get_markup_template('app_nav.tpl'),array( + '$app' => $papp, + '$icon' => $icon, + )); + } + return replace_macros(get_markup_template('app.tpl'),array( '$app' => $papp, '$icon' => $icon, diff --git a/Zotlabs/Lib/ThreadStream.php b/Zotlabs/Lib/ThreadStream.php index d7a898704..436723f8c 100644 --- a/Zotlabs/Lib/ThreadStream.php +++ b/Zotlabs/Lib/ThreadStream.php @@ -68,7 +68,7 @@ class ThreadStream { // pull some trickery which allows us to re-invoke this function afterward // it's an ugly hack so @FIXME $this->writable = perm_is_allowed($this->profile_owner,$ob_hash,'post_comments'); - $this->uploadable = false; + $this->uploadable = perm_is_allowed($this->profile_owner,$ob_hash,'write_storage'); break; case 'page': $this->profile_owner = \App::$profile['uid']; diff --git a/Zotlabs/Module/Bookmarks.php b/Zotlabs/Module/Bookmarks.php index e62f5ce96..e147ffe6c 100644 --- a/Zotlabs/Module/Bookmarks.php +++ b/Zotlabs/Module/Bookmarks.php @@ -8,7 +8,7 @@ class Bookmarks extends \Zotlabs\Web\Controller { if(! local_channel()) return; - nav_set_selected(t('View Bookmarks')); + nav_set_selected('View Bookmarks'); $item_id = intval($_REQUEST['item']); $burl = trim($_REQUEST['burl']); diff --git a/Zotlabs/Module/Cdav.php b/Zotlabs/Module/Cdav.php index abaec26a6..77052f97c 100644 --- a/Zotlabs/Module/Cdav.php +++ b/Zotlabs/Module/Cdav.php @@ -824,7 +824,7 @@ class Cdav extends \Zotlabs\Web\Controller { } if(argv(1) === 'calendar') { - nav_set_selected(t('CalDAV')); + nav_set_selected('CalDAV'); $caldavBackend = new \Sabre\CalDAV\Backend\PDO($pdo); $calendars = $caldavBackend->getCalendarsForUser($principalUri); } @@ -1025,7 +1025,7 @@ class Cdav extends \Zotlabs\Web\Controller { if(argv(1) === 'addressbook') { - nav_set_selected(t('CardDAV')); + nav_set_selected('CardDAV'); $carddavBackend = new \Sabre\CardDAV\Backend\PDO($pdo); $addressbooks = $carddavBackend->getAddressBooksForUser($principalUri); } diff --git a/Zotlabs/Module/Channel.php b/Zotlabs/Module/Channel.php index 8550c69cd..508d2b57a 100644 --- a/Zotlabs/Module/Channel.php +++ b/Zotlabs/Module/Channel.php @@ -94,7 +94,7 @@ class Channel extends \Zotlabs\Web\Controller { } else { if(\App::$profile['profile_uid'] == local_channel()) { - nav_set_selected(t('Channel Home')); + nav_set_selected('Channel Home'); } } diff --git a/Zotlabs/Module/Chat.php b/Zotlabs/Module/Chat.php index 138ca1cb5..378c9f4dd 100644 --- a/Zotlabs/Module/Chat.php +++ b/Zotlabs/Module/Chat.php @@ -91,7 +91,7 @@ class Chat extends \Zotlabs\Web\Controller { if(local_channel()) { $channel = \App::get_channel(); - nav_set_selected(t('My Chatrooms')); + nav_set_selected('My Chatrooms'); } $ob = \App::get_observer(); diff --git a/Zotlabs/Module/Connections.php b/Zotlabs/Module/Connections.php index 6ad1e9528..f42ff9b84 100644 --- a/Zotlabs/Module/Connections.php +++ b/Zotlabs/Module/Connections.php @@ -30,7 +30,7 @@ class Connections extends \Zotlabs\Web\Controller { return login(); } - nav_set_selected(t('Connections')); + nav_set_selected('Connections'); $blocked = false; $hidden = false; diff --git a/Zotlabs/Module/Directory.php b/Zotlabs/Module/Directory.php index 6268e99c6..caf0190ae 100644 --- a/Zotlabs/Module/Directory.php +++ b/Zotlabs/Module/Directory.php @@ -77,7 +77,7 @@ class Directory extends \Zotlabs\Web\Controller { $pubforums = get_directory_setting($observer, 'pubforums'); $o = ''; - nav_set_selected(t('Directory')); + nav_set_selected('Directory'); if(x($_POST,'search')) $search = notags(trim($_POST['search'])); diff --git a/Zotlabs/Module/Events.php b/Zotlabs/Module/Events.php index 0541f5e9b..33c8b8249 100644 --- a/Zotlabs/Module/Events.php +++ b/Zotlabs/Module/Events.php @@ -272,7 +272,7 @@ class Events extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Events')); + nav_set_selected('Events'); if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { $r = q("update event set dismissed = 1 where id = %d and uid = %d", diff --git a/Zotlabs/Module/Help.php b/Zotlabs/Module/Help.php index f3cc3aa5f..f1b1acaef 100644 --- a/Zotlabs/Module/Help.php +++ b/Zotlabs/Module/Help.php @@ -15,7 +15,7 @@ require_once('include/help.php'); class Help extends \Zotlabs\Web\Controller { function get() { - nav_set_selected(t('Help')); + nav_set_selected('Help'); if($_REQUEST['search']) { $o .= '<div id="help-content" class="generic-content-wrapper">'; diff --git a/Zotlabs/Module/Invite.php b/Zotlabs/Module/Invite.php index bbd98150d..0bcd1c1fa 100644 --- a/Zotlabs/Module/Invite.php +++ b/Zotlabs/Module/Invite.php @@ -95,7 +95,7 @@ class Invite extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Invite')); + nav_set_selected('Invite'); $tpl = get_markup_template('invite.tpl'); $invonly = false; diff --git a/Zotlabs/Module/Lang.php b/Zotlabs/Module/Lang.php index 84776c3ea..0e5d85d05 100644 --- a/Zotlabs/Module/Lang.php +++ b/Zotlabs/Module/Lang.php @@ -5,7 +5,7 @@ namespace Zotlabs\Module; class Lang extends \Zotlabs\Web\Controller { function get() { - nav_set_selected(t('Language')); + nav_set_selected('Language'); return lang_selector(); } diff --git a/Zotlabs/Module/Mail.php b/Zotlabs/Module/Mail.php index e5509961a..12f3b8152 100644 --- a/Zotlabs/Module/Mail.php +++ b/Zotlabs/Module/Mail.php @@ -140,7 +140,7 @@ class Mail extends \Zotlabs\Web\Controller { function get() { $o = ''; - nav_set_selected(t('Mail')); + nav_set_selected('Mail'); if(! local_channel()) { notice( t('Permission denied.') . EOL); diff --git a/Zotlabs/Module/Mood.php b/Zotlabs/Module/Mood.php index 85c8a3042..ad29ec7e8 100644 --- a/Zotlabs/Module/Mood.php +++ b/Zotlabs/Module/Mood.php @@ -117,7 +117,7 @@ class Mood extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Mood')); + nav_set_selected('Mood'); $parent = ((x($_GET,'parent')) ? intval($_GET['parent']) : '0'); diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index 2b5584c35..ee736ff42 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -154,7 +154,7 @@ class Network extends \Zotlabs\Web\Controller { )); } - nav_set_selected(t('Activity')); + nav_set_selected('Grid'); $channel_acl = array( 'allow_cid' => $channel['channel_allow_cid'], diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index 2ca9bfe50..caef45d98 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -555,7 +555,7 @@ class Photos extends \Zotlabs\Web\Controller { $sql_extra = permissions_sql($owner_uid,get_observer_hash(),'photo'); $sql_attach = permissions_sql($owner_uid,get_observer_hash(),'attach'); - nav_set_selected(t('Photos')); + nav_set_selected('Photos'); $o = ""; diff --git a/Zotlabs/Module/Poke.php b/Zotlabs/Module/Poke.php index 0bd1187c7..d13ec5ced 100644 --- a/Zotlabs/Module/Poke.php +++ b/Zotlabs/Module/Poke.php @@ -150,7 +150,7 @@ class Poke extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Poke')); + nav_set_selected('Poke'); $name = ''; $id = ''; diff --git a/Zotlabs/Module/Probe.php b/Zotlabs/Module/Probe.php index 859bed315..2e65f107c 100644 --- a/Zotlabs/Module/Probe.php +++ b/Zotlabs/Module/Probe.php @@ -8,7 +8,7 @@ class Probe extends \Zotlabs\Web\Controller { function get() { - nav_set_selected(t('Remote Diagnostics')); + nav_set_selected('Remote Diagnostics'); $o .= '<h3>Probe Diagnostic</h3>'; diff --git a/Zotlabs/Module/Rpost.php b/Zotlabs/Module/Rpost.php index e716d1330..5d2f0d7e8 100644 --- a/Zotlabs/Module/Rpost.php +++ b/Zotlabs/Module/Rpost.php @@ -61,7 +61,7 @@ class Rpost extends \Zotlabs\Web\Controller { return login(); } - nav_set_selected(t('Post')); + nav_set_selected('Post'); // If we have saved rpost session variables, but nothing in the current $_REQUEST, recover the saved variables diff --git a/Zotlabs/Module/Search.php b/Zotlabs/Module/Search.php index e1d35b879..37e9a336f 100644 --- a/Zotlabs/Module/Search.php +++ b/Zotlabs/Module/Search.php @@ -22,7 +22,7 @@ class Search extends \Zotlabs\Web\Controller { if($load) $_SESSION['loadtime'] = datetime_convert(); - nav_set_selected(t('Search')); + nav_set_selected('Search'); require_once("include/bbcode.php"); require_once('include/security.php'); diff --git a/Zotlabs/Module/Suggest.php b/Zotlabs/Module/Suggest.php index c3f4a6d5a..f79e4e245 100644 --- a/Zotlabs/Module/Suggest.php +++ b/Zotlabs/Module/Suggest.php @@ -29,7 +29,7 @@ class Suggest extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Suggest Channels')); + nav_set_selected('Suggest Channels'); $_SESSION['return_url'] = z_root() . '/' . \App::$cmd; diff --git a/Zotlabs/Module/Webpages.php b/Zotlabs/Module/Webpages.php index e449a790f..97ec55ba3 100644 --- a/Zotlabs/Module/Webpages.php +++ b/Zotlabs/Module/Webpages.php @@ -35,7 +35,7 @@ class Webpages extends \Zotlabs\Web\Controller { return; } - nav_set_selected(t('Webpages')); + nav_set_selected('Webpages'); $which = argv(1); diff --git a/Zotlabs/Module/Wiki.php b/Zotlabs/Module/Wiki.php index fe2bfbdfb..d6a01af11 100644 --- a/Zotlabs/Module/Wiki.php +++ b/Zotlabs/Module/Wiki.php @@ -76,7 +76,7 @@ class Wiki extends \Zotlabs\Web\Controller { $wiki_owner = true; - nav_set_selected(t('Wiki')); + nav_set_selected('Wiki'); // Obtain the default permission settings of the channel $owner_acl = array( diff --git a/Zotlabs/Render/Comanche.php b/Zotlabs/Render/Comanche.php index d126cb3da..ca664cba6 100644 --- a/Zotlabs/Render/Comanche.php +++ b/Zotlabs/Render/Comanche.php @@ -121,6 +121,11 @@ class Comanche { if($cnt) \App::$layout['theme'] = trim($matches[1]); + $cnt = preg_match("/\[navbar\](.*?)\[\/navbar\]/ism", $s, $matches); + if($cnt) + \App::$layout['navbar'] = trim($matches[1]); + + $cnt = preg_match_all("/\[webpage\](.*?)\[\/webpage\]/ism", $s, $matches, PREG_SET_ORDER); if($cnt) { // only the last webpage definition is used if there is more than one diff --git a/Zotlabs/Storage/Browser.php b/Zotlabs/Storage/Browser.php index 9b7e9ad8e..6f6f4a292 100644 --- a/Zotlabs/Storage/Browser.php +++ b/Zotlabs/Storage/Browser.php @@ -244,7 +244,7 @@ class Browser extends DAV\Browser\Plugin { $a = false; - nav_set_selected(t('Files')); + nav_set_selected('Files'); \App::$page['content'] = $html; load_pdl(); @@ -2090,17 +2090,21 @@ function construct_page() { $installing = false; + $navbar = get_config('system','navbar','nav'); + if(App::$profile_uid) { + $navbar = get_pconfig(App::$profile_uid,'system','navbar',$navbar); + } + + if($comanche && App::$layout['navbar']) { + $navbar = App::$layout['navbar']; + } + if (App::$module == 'setup') { $installing = true; } else { - nav($a); + nav($navbar); } - if ($comanche) { - if (App::$layout['nav']) { - App::$page['nav'] = get_custom_nav(App::$layout['nav']); - } - } $current_theme = Zotlabs\Render\Theme::current(); diff --git a/doc/member/member_guide.bb b/doc/member/member_guide.bb index 0a2d11a88..0794f24d3 100644 --- a/doc/member/member_guide.bb +++ b/doc/member/member_guide.bb @@ -634,6 +634,15 @@ This will select the theme named "suckerberg" and select the "pas The condensed notation isn't part of Comanche itself but is recognised by $Projectname platform as a theme specifier. +[h4]Navbar[/h4] + +[code] + [navbar]tucson[/navbar] +[/code] + +Use the 'tucson' navbar template and CSS rules. By default the 'nav' navbar template will be used. + + [h4]Regions[/h4] Each region has a name, as noted above. You will specify the region of interest using a 'region' tag, which includes the name. Any content you wish placed in this region should be placed between the opening region tag and the closing tag. diff --git a/include/nav.php b/include/nav.php index 6b56c9aee..3da67ffd1 100644 --- a/include/nav.php +++ b/include/nav.php @@ -6,7 +6,7 @@ require_once('include/security.php'); require_once('include/menu.php'); -function nav() { +function nav($template = 'nav') { /** * @@ -103,12 +103,12 @@ EOT; $nav['logout'] = ['logout',t('Logout'), "", t('End this session'),'logout_nav_btn']; // user menu - $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['active'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn']; + $nav['usermenu'][] = ['profile/' . $channel['channel_address'], t('View Profile'), ((\App::$nav_sel['name'] == 'Profile') ? 'active' : ''), t('Your profile page'),'profile_nav_btn']; if(feature_enabled(local_channel(),'multi_profiles')) - $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['active'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn']; + $nav['usermenu'][] = ['profiles', t('Edit Profiles'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : '') , t('Manage/Edit profiles'),'profiles_nav_btn']; else - $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['active'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn']; + $nav['usermenu'][] = ['profiles/' . $prof[0]['id'], t('Edit Profile'), ((\App::$nav_sel['name'] == 'Profiles') ? 'active' : ''), t('Edit your profile'),'profiles_nav_btn']; } else { @@ -233,6 +233,15 @@ EOT; // turned off until somebody discovers this and figures out a good location for it. $powered_by = ''; + $active_app = q("SELECT app_url FROM app WHERE app_channel = %d AND app_name = '%s' LIMIT 1", + intval($channel['channel_id']), + dbesc(\App::$nav_sel['raw_name']) + ); + + if($active_app) { + $url = $active_app[0]['app_url']; + } + //app bin if($is_owner) { if(get_pconfig(local_channel(), 'system','initial_import_system_apps') === false) { @@ -258,16 +267,33 @@ EOT; $syslist = Zlib\Apps::app_order(local_channel(),$syslist); foreach($syslist as $app) { - if(\App::$nav_sel['active'] == $app['name']) + if(\App::$nav_sel['name'] == $app['name']) $app['active'] = true; - if($is_owner) + if($is_owner) { $nav_apps[] = Zlib\Apps::app_render($app,'nav'); - elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false) + if(strpos($app['categories'],'navbar_' . $template)) { + $navbar_apps[] = Zlib\Apps::app_render($app,'navbar'); + } + } + elseif(! $is_owner && strpos($app['requires'], 'local_channel') === false) { $nav_apps[] = Zlib\Apps::app_render($app,'nav'); + if(strpos($app['categories'],'navbar_' . $template)) { + $navbar_apps[] = Zlib\Apps::app_render($app,'navbar'); + } + } + } + + $c = theme_include('navbar_' . $template . '.css'); + $tpl = get_markup_template('navbar_' . $template . '.tpl'); + + if($c && $tpl) { + head_add_css('navbar_' . $template . '.css'); } - $tpl = get_markup_template('nav.tpl'); + if(! $tpl) { + $tpl = get_markup_template('nav.tpl'); + } App::$page['nav'] .= replace_macros($tpl, array( '$baseurl' => z_root(), @@ -280,18 +306,19 @@ EOT; '$userinfo' => $x['usermenu'], '$localuser' => local_channel(), '$is_owner' => $is_owner, - '$sel' => App::$nav_sel, + '$sel' => App::$nav_sel, '$powered_by' => $powered_by, '$help' => t('@name, #tag, ?doc, content'), '$pleasewait' => t('Please wait...'), '$nav_apps' => $nav_apps, + '$navbar_apps' => $navbar_apps, '$channel_menu' => get_config('system','channel_menu'), '$channel_thumb' => ((App::$profile) ? App::$profile['thumb'] : ''), '$channel_apps' => $channel_apps, '$addapps' => t('Add Apps'), '$orderapps' => t('Arrange Apps'), '$sysapps_toggle' => t('Toggle System Apps'), - '$loc' => $myident + '$url' => $url )); if(x($_SESSION, 'reload_avatar') && $observer) { @@ -314,7 +341,10 @@ EOT; * */ function nav_set_selected($item){ - App::$nav_sel['active'] = $item; + App::$nav_sel['raw_name'] = $item; + $item = ['name' => $item]; + Zlib\Apps::translate_system_apps($item); + App::$nav_sel['name'] = $item['name']; } @@ -490,7 +520,6 @@ function channel_apps($is_owner = false, $nickname = null) { '$tabs' => $arr['tabs'], '$name' => App::$profile['channel_name'], '$thumb' => App::$profile['thumb'], - '$channel_menu' => get_config('system','channel_menu') ] ); } diff --git a/view/js/main.js b/view/js/main.js index 186cefbd0..6557b1d8e 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -445,10 +445,10 @@ function NavUpdate() { updateCountsOnly = false; if(data.network || data.home || data.intros || data.register || data.mail || data.all_events || data.notify || data.files || data.pubs) { - $('#notifications-btn').css('opacity', 1); + $('#notifications-btn, #notifications-btn-1').css('opacity', 1); } else { - $('#notifications-btn').css('opacity', 0.5); + $('#notifications-btn, #notifications-btn-1').css('opacity', 0.5); $('#navbar-collapse-1').removeClass('show'); } diff --git a/view/php/default.php b/view/php/default.php index 444e24197..b180a6eb8 100644 --- a/view/php/default.php +++ b/view/php/default.php @@ -15,7 +15,7 @@ <div id="page-footer"></div> <div id="pause"></div> </section> - <aside id="region_3" class="d-none d-xl-table-cell"><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></aside> + <aside id="region_3" class="d-none d-xl-table-cell"><div id="right_aside_spacer"><div id="right_aside_wrapper"><?php if(x($page,'right_aside')) echo $page['right_aside']; ?></div></div></aside> </main> <footer><?php if(x($page,'footer')) echo $page['footer']; ?></footer> </body> diff --git a/view/theme/redbasic/css/style.css b/view/theme/redbasic/css/style.css index de6f8dac1..2e8d71954 100644 --- a/view/theme/redbasic/css/style.css +++ b/view/theme/redbasic/css/style.css @@ -161,6 +161,10 @@ nav { filter:alpha(opacity=$nav_percent_min_opacity); } +#nav-app-link { + white-space: nowrap; +} + #powered-by { font-size: 0.5rem; position: absolute; @@ -1454,6 +1458,10 @@ blockquote { background-color: $nav_bg !important; } +.navbar { + z-index:1030; +} + .navbar-dark .navbar-nav .nav-link, .usermenu i { color: $nav_icon_colour; diff --git a/view/theme/redbasic/js/redbasic.js b/view/theme/redbasic/js/redbasic.js index c67c67a51..3fa9d2a76 100644 --- a/view/theme/redbasic/js/redbasic.js +++ b/view/theme/redbasic/js/redbasic.js @@ -22,13 +22,13 @@ $(document).ready(function() { parent: 'main', spacer: '#left_aside_spacer' }); + $('#right_aside_wrapper').stick_in_parent({ + offset_top: parseInt($('#region_3').css('padding-top')), + parent: 'main', + spacer: '#right_aside_spacer' + }); } - if(($(window).width() < 767) && ($('#left_aside_wrapper .widget, #left_aside_wrapper .vcard').length > 0)) - $('#expand-aside').show(); - else - $('#expand-aside').hide(); - $('#expand-aside').on('click', toggleAside); $('section').on('click', function() { @@ -64,8 +64,14 @@ $(document).ready(function() { } }); + var notifications_parent = $('#notifications')[0].parentElement.id; $('#notifications-btn-1').click(function() { - $('#region_3').toggleClass('fs'); + if($('#notifications').hasClass('fs')) + $('#notifications').prependTo('#' + notifications_parent); + else + $('#notifications').prependTo('body'); + + $('#notifications').toggleClass('fs'); if($('#navbar-collapse-2').hasClass('show')){ $('#navbar-collapse-2').removeClass('show'); } diff --git a/view/tpl/app_nav.tpl b/view/tpl/app_nav.tpl new file mode 100644 index 000000000..1ee5adb70 --- /dev/null +++ b/view/tpl/app_nav.tpl @@ -0,0 +1 @@ +<a class="navbar-app nav-link{{if $app.active}} active{{/if}}" href="{{$app.url}}" title="{{$app.name}}" >{{if $icon}}<i class="generic-icons-nav fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" />{{/if}}</a> diff --git a/view/tpl/nav.tpl b/view/tpl/nav.tpl index a19fa15a1..d2bd20f8f 100755 --- a/view/tpl/nav.tpl +++ b/view/tpl/nav.tpl @@ -22,7 +22,7 @@ <a class="dropdown-item{{if $usermenu.2}} active{{/if}}" href="{{$usermenu.0}}" title="{{$usermenu.3}}" role="menuitem" id="{{$usermenu.4}}">{{$usermenu.1}}</a> {{/foreach}} {{if $nav.manage}} - <a class="dropdown-item{{if $sel.active == Manage}} active{{/if}}" href="{{$nav.manage.0}}" title="{{$nav.manage.3}}" role="menuitem" id="{{$nav.manage.4}}">{{$nav.manage.1}}</a> + <a class="dropdown-item{{if $sel.name == Manage}} active{{/if}}" href="{{$nav.manage.0}}" title="{{$nav.manage.3}}" role="menuitem" id="{{$nav.manage.4}}">{{$nav.manage.1}}</a> {{/if}} {{if $nav.channels}} {{foreach $nav.channels as $chan}} @@ -34,11 +34,11 @@ {{/if}} {{if $nav.settings}} <div class="dropdown-divider"></div> - <a class="dropdown-item{{if $sel.active == Settings}} active{{/if}}" href="{{$nav.settings.0}}" title="{{$nav.settings.3}}" role="menuitem" id="{{$nav.settings.4}}">{{$nav.settings.1}}</a> + <a class="dropdown-item{{if $sel.name == Settings}} active{{/if}}" href="{{$nav.settings.0}}" title="{{$nav.settings.3}}" role="menuitem" id="{{$nav.settings.4}}">{{$nav.settings.1}}</a> {{/if}} {{if $nav.admin}} <div class="dropdown-divider"></div> - <a class="dropdown-item{{if $sel.active == Admin}} active{{/if}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}" role="menuitem" id="{{$nav.admin.4}}">{{$nav.admin.1}}</a> + <a class="dropdown-item{{if $sel.name == Admin}} active{{/if}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}" role="menuitem" id="{{$nav.admin.4}}">{{$nav.admin.1}}</a> {{/if}} {{if $nav.logout}} <div class="dropdown-divider"></div> @@ -53,6 +53,9 @@ </div> {{/if}} </div> +<div class="navbar-nav mr-auto"> + <div><a id="nav-app-link" href="{{$url}}" class="nav-link">{{$sel.name}}</a></div> +</div> {{/if}} <div class="navbar-toggler-right"> {{if $nav.help.6}} @@ -60,7 +63,7 @@ <i class="fa fa-question-circle"></i> </button> {{/if}} - <button id="expand-aside" type="button" class="navbar-toggler border-0" data-toggle="offcanvas" data-target="#region_1"> + <button id="expand-aside" type="button" class="d-md-none navbar-toggler border-0" data-toggle="offcanvas" data-target="#region_1"> <i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i> </button> {{if ! $experimental_notif}} @@ -212,9 +215,7 @@ {{/if}} </ul> {{else}} - <div class="navbar-nav mr-auto"> - <div class="text-white">{{$sel.active}}</div> - </div> + <div class="navbar-text mr-auto d-none d-xl-flex"></div> {{/if}} <div id="banner" class="navbar-text d-none d-xl-flex">{{$banner}}</div> @@ -252,6 +253,7 @@ {{foreach $channel_apps as $channel_app}} {{$channel_app}} {{/foreach}} + <div class="dropdown-divider"></div> <div class="dropdown-header sys-apps-toggle" onclick="$('#dropdown-menu').click(function(e) { e.stopPropagation(); }); openClose('sys_apps');"> {{$sysapps_toggle}} </div> diff --git a/view/tpl/navbar_tucson.tpl b/view/tpl/navbar_tucson.tpl new file mode 100755 index 000000000..ace22a880 --- /dev/null +++ b/view/tpl/navbar_tucson.tpl @@ -0,0 +1,296 @@ +{{if $nav.login && !$userinfo}} +<div class="d-xl-none pt-1 pb-1"> + <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-toggle="modal" data-target="#nav-login"> + {{$nav.loginmenu.1.1}} + </a> + {{if $nav.register}} + <a class="btn btn-warning btn-sm text-dark" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}" > + {{$nav.register.1}} + </a> + {{/if}} +</div> +{{/if}} +{{if $userinfo}} +<div class="dropdown usermenu"> + <div class="fakelink" data-toggle="dropdown"> + <img id="avatar" src="{{$userinfo.icon}}" alt="{{$userinfo.name}}"> + <i class="fa fa-caret-down"></i> + </div> + {{if $is_owner}} + <div class="dropdown-menu"> + {{foreach $nav.usermenu as $usermenu}} + <a class="dropdown-item{{if $usermenu.2}} active{{/if}}" href="{{$usermenu.0}}" title="{{$usermenu.3}}" role="menuitem" id="{{$usermenu.4}}">{{$usermenu.1}}</a> + {{/foreach}} + {{if $nav.manage}} + <a class="dropdown-item{{if $sel.active == Manage}} active{{/if}}" href="{{$nav.manage.0}}" title="{{$nav.manage.3}}" role="menuitem" id="{{$nav.manage.4}}">{{$nav.manage.1}}</a> + {{/if}} + {{if $nav.channels}} + {{foreach $nav.channels as $chan}} + <a class="dropdown-item" href="manage/{{$chan.channel_id}}" title="{{$chan.channel_name}}" role="menuitem"><i class="fa fa-circle{{if $localuser == $chan.channel_id}} text-success{{else}} invisible{{/if}}"></i> {{$chan.channel_name}}</a> + {{/foreach}} + {{/if}} + {{if $nav.profiles}} + <a class="dropdown-item" href="{{$nav.profiles.0}}" title="{{$nav.profiles.3}}" role="menuitem" id="{{$nav.profiles.4}}">{{$nav.profiles.1}}</a> + {{/if}} + {{if $nav.settings}} + <div class="dropdown-divider"></div> + <a class="dropdown-item{{if $sel.active == Settings}} active{{/if}}" href="{{$nav.settings.0}}" title="{{$nav.settings.3}}" role="menuitem" id="{{$nav.settings.4}}">{{$nav.settings.1}}</a> + {{/if}} + {{if $nav.logout}} + <div class="dropdown-divider"></div> + <a class="dropdown-item" href="{{$nav.logout.0}}" title="{{$nav.logout.3}}" role="menuitem" id="{{$nav.logout.4}}">{{$nav.logout.1}}</a> + {{/if}} + </div> + {{/if}} + {{if ! $is_owner}} + <div class="dropdown-menu" role="menu" aria-labelledby="avatar"> + <a class="dropdown-item" href="{{$nav.rusermenu.0}}" role="menuitem">{{$nav.rusermenu.1}}</a> + <a class="dropdown-item" href="{{$nav.rusermenu.2}}" role="menuitem">{{$nav.rusermenu.3}}</a> + </div> + {{/if}} +</div> +{{/if}} +<div class="navbar-toggler-right"> + {{if $nav.help.6}} + <button id="context-help-btn" class="navbar-toggler border-0" type="button" onclick="contextualHelp(); return false;"> + <i class="fa fa-question-circle"></i> + </button> + {{/if}} + <button id="expand-aside" type="button" class="navbar-toggler border-0" data-toggle="offcanvas" data-target="#region_1"> + <i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i> + </button> + {{if ! $experimental_notif}} + {{if $localuser || $nav.pubs}} + <button id="notifications-btn" type="button" class="navbar-toggler border-0 text-white" data-toggle="collapse" data-target="#navbar-collapse-1"> + <i class="fa fa-exclamation-circle"></i> + </button> + {{/if}} + {{else}} + {{if $localuser || $nav.pubs}} + <button id="notifications-btn-1" type="button" class="navbar-toggler border-0 text-white"> + <i class="fa fa-exclamation-circle"></i> + </button> + {{/if}} + {{/if}} + <button id="menu-btn" class="navbar-toggler border-0" type="button" data-toggle="collapse" data-target="#navbar-collapse-2"> + <i class="fa fa-bars"></i> + </button> +</div> +<div class="collapse navbar-collapse" id="navbar-collapse-1"> + {{if ! $experimental_notif}} + <ul class="navbar-nav mr-auto"> + {{if $nav.network}} + <li class="nav-item dropdown network-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.network.3}}" id="{{$nav.network.4}}" data-toggle="dropdown" rel="#nav-network-menu"> + <i class="fa fa-fw fa-th"></i> + <span class="badge badge-pill badge-secondary network-update"></span> + </a> + <div id="nav-network-menu" class="dropdown-menu" rel="network"> + <a class="dropdown-item" id="nav-network-see-all" href="{{$nav.network.all.0}}">{{$nav.network.all.1}}</a> + <a class="dropdown-item" id="nav-network-mark-all" href="#" onclick="markRead('network'); return false;">{{$nav.network.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.home}} + <li class="nav-item dropdown home-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.home.3}}" id="{{$nav.home.4}}" data-toggle="dropdown" rel="#nav-home-menu"> + <i class="fa fa-fw fa-home"></i> + <span class="badge badge-pill badge-danger home-update"></span> + </a> + <div id="nav-home-menu" class="dropdown-menu" rel="home"> + <a class="dropdown-item" id="nav-home-see-all" href="{{$nav.home.all.0}}">{{$nav.home.all.1}}</a> + <a class="dropdown-item" id="nav-home-mark-all" href="#" onclick="markRead('home'); return false;">{{$nav.home.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.messages}} + <li class="nav-item dropdown mail-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.messages.3}}" id="{{$nav.messages.4}}" data-toggle="dropdown" rel="#nav-mail-menu"> + <i class="fa fa-fw fa-envelope"></i> + <span class="badge badge-pill badge-danger mail-update"></span> + </a> + <div id="nav-mail-menu" class="dropdown-menu" rel="messages"> + <a class="dropdown-item" id="nav-messages-see-all" href="{{$nav.messages.all.0}}">{{$nav.messages.all.1}}</a> + <a class="dropdown-item" id="nav-messages-mark-all" href="#" onclick="markRead('messages'); return false;">{{$nav.messages.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.all_events}} + <li class="nav-item dropdown all_events-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.all_events.3}}" id="{{$nav.all_events.4}}" data-toggle="dropdown" rel="#nav-all_events-menu"> + <i class="fa fa-fw fa-calendar"></i> + <span class="badge badge-pill badge-secondary all_events-update"></span> + </a> + <div id="nav-all_events-menu" class="dropdown-menu" rel="all_events"> + <a class="dropdown-item" id="nav-all_events-see-all" href="{{$nav.all_events.all.0}}">{{$nav.all_events.all.1}}</a> + <a class="dropdown-item" id="nav-all_events-mark-all" href="#" onclick="markRead('all_events'); return false;">{{$nav.all_events.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.intros}} + <li class="nav-item dropdown intros-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.intros.3}}" id="{{$nav.intros.4}}" data-toggle="dropdown" rel="#nav-intros-menu"> + <i class="fa fa-fw fa-users"></i> + <span class="badge badge-pill badge-danger intros-update"></span> + </a> + <div id="nav-intros-menu" class="dropdown-menu" rel="intros"> + <a class="dropdown-item" id="nav-intros-see-all" href="{{$nav.intros.all.0}}">{{$nav.intros.all.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.registrations}} + <li class="nav-item dropdown register-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.registrations.3}}" id="{{$nav.registrations.4}}" data-toggle="dropdown" rel="#nav-register-menu"> + <i class="fa fa-fw fa-user-o"></i> + <span class="badge badge-pill badge-danger register-update"></span> + </a> + <div id="nav-register-menu" class="dropdown-menu" rel="register"> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.notifications}} + <li class="nav-item dropdown notify-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.notifications.1}}" id="{{$nav.notifications.4}}" data-toggle="dropdown" rel="#nav-notify-menu"> + <i class="fa fa-fw fa-exclamation"></i> + <span class="badge badge-pill badge-danger notify-update"></span> + </a> + <div id="nav-notify-menu" class="dropdown-menu" rel="notify"> + <a class="dropdown-item" id="nav-notify-see-all" href="{{$nav.notifications.all.0}}">{{$nav.notifications.all.1}}</a> + <a class="dropdown-item" id="nav-notify-mark-all" href="#" onclick="markRead('notify'); return false;">{{$nav.notifications.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.files}} + <li class="nav-item dropdown files-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.files.3}}" id="{{$nav.files.4}}" data-toggle="dropdown" rel="#nav-files-menu"> + <i class="fa fa-fw fa-folder"></i> + <span class="badge badge-pill badge-danger files-update"></span> + </a> + <div id="nav-files-menu" class="dropdown-menu" rel="files"> + {{$emptynotifications}} + </div> + </li> + {{/if}} + {{if $nav.login && !$userinfo}} + <li class="nav-item d-none d-xl-flex"> + <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}" data-toggle="modal" data-target="#nav-login">{{$nav.loginmenu.1.1}}</a> + </li> + {{/if}} + {{if $nav.register}} + <li class="nav-item {{$nav.register.2}} d-none d-xl-flex"> + <a class="nav-link" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}">{{$nav.register.1}}</a> + </li> + {{/if}} + {{if $nav.alogout}} + <li class="nav-item {{$nav.alogout.2}} d-none d-xl-flex"> + <a class="nav-link" href="{{$nav.alogout.0}}" title="{{$nav.alogout.3}}" id="{{$nav.alogout.4}}">{{$nav.alogout.1}}</a> + </li> + {{/if}} + {{if $nav.pubs}} + <li class="nav-item dropdown pubs-button" style="display: none;"> + <a class="nav-link" href="#" title="{{$nav.pubs.3}}" id="{{$nav.pubs.4}}" data-toggle="dropdown" rel="#nav-pubs-menu"> + <i class="fa fa-fw fa-globe"></i> + <span class="badge badge-pill badge-secondary pubs-update"></span> + </a> + <div id="nav-pubs-menu" class="dropdown-menu" rel="pubs"> + <a class="dropdown-item" id="nav-pubs-see-all" href="{{$nav.pubs.all.0}}">{{$nav.pubs.all.1}}</a> + <a class="dropdown-item" id="nav-pubs-mark-all" href="#" onclick="markRead('pubs'); return false;">{{$nav.pubs.mark.1}}</a> + {{$emptynotifications}} + </div> + </li> + {{/if}} + </ul> + {{/if}} + + <div id="banner" class="navbar-text d-none d-xl-flex">{{$banner}}</div> + + + <ul id="nav-right" class="navbar-nav ml-auto d-none d-xl-flex"> + {{if $navbar_apps}} + {{foreach $navbar_apps as $navbar_app}} + <li class="nav-navbar-apps"> + {{$navbar_app}} + </li> + {{/foreach}} + {{/if}} + <li class="nav-item collapse clearfix" id="nav-search"> + <form class="form-inline" method="get" action="search" role="search"> + <input class="form-control form-control-sm mt-1 mr-2" id="nav-search-text" type="text" value="" placeholder=" {{$help}}" name="search" title="{{$nav.search.3}}" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/> + </form> + <div id="nav-search-spinner" class="spinner-wrapper"> + <div class="spinner s"></div> + </div> + </li> + <li class="nav-item" id="nav-search-btn"> + <a class="nav-link" href="#nav-search" title="{{$nav.search.3}}" onclick="openMenu('nav-search'); closeMenu('nav-search-btn'); $('#nav-search-text').focus(); return false;"><i class="fa fa-fw fa-search"></i></a> + </li> + {{if $nav.help.6}} + <li class="nav-item dropdown {{$sel.help}}"> + <a class="nav-link {{$nav.help.2}}" target="hubzilla-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}" id="{{$nav.help.4}}" onclick="contextualHelp(); return false;"><i class="fa fa-fw fa-question-circle"></i></a> + </li> + {{/if}} + {{if $channel_apps.0}} + <li class="nav-item dropdown" id="channel-menu"> + <a class="nav-link" href="#" data-toggle="dropdown"><img src="{{$channel_thumb}}" style="height:14px; width:14px;position:relative; top:-2px;" /></a> + <div id="dropdown-menu" class="dropdown-menu dropdown-menu-right"> + {{foreach $channel_apps as $channel_app}} + {{$channel_app}} + {{/foreach}} + </div> + </li> + {{/if}} + <li class="nav-item dropdown" id="app-menu"> + <a class="nav-link" href="#" data-toggle="dropdown"><i class="fa fa-fw fa-bars"></i></a> + <div id="dropdown-menu" class="dropdown-menu dropdown-menu-right"> + {{foreach $nav_apps as $nav_app}} + {{$nav_app}} + {{/foreach}} + {{if $is_owner}} + <div class="dropdown-divider"></div> + <a class="dropdown-item" href="/apps"><i class="generic-icons-nav fa fa-fw fa-plus-circle"></i>{{$addapps}}</a> + <a class="dropdown-item" href="/apporder"><i class="generic-icons-nav fa fa-fw fa-sort"></i>{{$orderapps}}</a> + {{/if}} + </div> + </li> + </ul> +</div> +<div class="collapse d-xl-none" id="navbar-collapse-2"> + <div class="navbar-nav mr-auto"> + {{if $channel_apps.0}} + {{foreach $channel_apps as $channel_app}} + {{$channel_app|replace:'dropdown-item':'nav-link'}} + {{/foreach}} + <div class="dropdown-header sys-apps-toggle" onclick="openClose('sys-apps-collapsed');"> + {{$sysapps_toggle}} + </div> + <div id="sys-apps-collapsed" style="display:none;"> + {{/if}} + {{foreach $nav_apps as $nav_app}} + {{$nav_app|replace:'dropdown-item':'nav-link'}} + {{/foreach}} + {{if $channel_apps.0}} + </div> + {{/if}} + {{if $is_owner}} + <div class="dropdown-divider"></div> + <a class="nav-link" href="/apps"><i class="generic-icons-nav fa fa-fw fa-plus-circle"></i>{{$addapps}}</a> + <a class="nav-link" href="/apporder"><i class="generic-icons-nav fa fa-fw fa-sort"></i>{{$orderapps}}</a> + {{/if}} + </div> +</div> +{{if $nav.help.6}} +<div id="contextual-help-content" class="contextual-help-content"> + {{$nav.help.5}} + <div class="float-right"> + <a class="btn btn-primary btn-sm" target="hubzilla-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}"><i class="fa fa-question"></i> {{$fulldocs}}</a> + <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a> + </div> +</div> +{{/if}} diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl index 83174b3a1..3323422d6 100644 --- a/view/tpl/notifications_widget.tpl +++ b/view/tpl/notifications_widget.tpl @@ -1,13 +1,6 @@ <style> - #notifications { - position: fixed; - top: 4.5rem; - width: 266px; - padding: 0 .5rem; - } - .notification-content { - max-height: 50vh; + max-height: 70vh; overflow: auto; } @@ -19,30 +12,25 @@ position: fixed; top: 0px; left: 0px; - display: block !important; + padding: 4.5rem .5rem 0 .5rem; background-color: white; width: 100%; max-width: 100%; height: 100vh; - z-index: 1020; - } - - .fs #notifications { - position: relative; - width: 100%; - top: 0px; + z-index: 1030; } </style> -<div id="nav-notifications-template" rel="template"> - <a class="dropdown-item clearfix dropdown-notification {5}" href="{0}" title="{2} {3}"> - <img class="menu-img-3" data-src="{1}"> - <span class="contactname">{2}</span> - <span class="dropdown-sub-text">{3}<br>{4}</span> - </a> -</div> + <div id="notifications" class="navbar-nav" data-children=".nav-item"> + <div id="nav-notifications-template" rel="template"> + <a class="dropdown-item clearfix dropdown-notification {5}" href="{0}" title="{2} {3}"> + <img class="menu-img-3" data-src="{1}"> + <span class="contactname">{2}</span> + <span class="dropdown-sub-text">{3}<br>{4}</span> + </a> + </div> {{foreach $notifications as $notification}} <div class="collapse {{$notification.type}}-button"> <a class="list-group-item" href="#nav-{{$notification.type}}-menu" title="{{$notification.title}}" data-toggle="collapse" data-parent="#notifications" rel="#nav-{{$notification.type}}-menu"> diff --git a/view/tpl/profile_tabs.tpl b/view/tpl/profile_tabs.tpl index b59135209..72e98ae82 100644 --- a/view/tpl/profile_tabs.tpl +++ b/view/tpl/profile_tabs.tpl @@ -2,6 +2,3 @@ {{foreach $tabs as $tab}} <a class="dropdown-item{{if $tab.sel}} {{$tab.sel}}{{/if}}" href="{{$tab.url}}"{{if $tab.title}} title="{{$tab.title}}"{{/if}}><i class="fa fa-fw fa-{{$tab.icon}} generic-icons-nav"></i>{{$tab.label}}</a> {{/foreach}} -{{if ! $channel_menu}} -<div class="dropdown-divider"></div> -{{/if}}
\ No newline at end of file |