aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Zotlabs/Lib/Apps.php1
-rw-r--r--Zotlabs/Module/Admin/Site.php8
-rw-r--r--Zotlabs/Module/Articles.php3
-rw-r--r--Zotlabs/Module/Connedit.php2
-rw-r--r--Zotlabs/Module/Defperms.php2
-rw-r--r--Zotlabs/Module/Item.php14
-rw-r--r--app/articles.apd2
-rwxr-xr-xboot.php2
-rw-r--r--include/bbcode.php15
-rw-r--r--include/features.php19
-rw-r--r--include/html2bbcode.php17
-rw-r--r--view/css/widgets.css8
-rw-r--r--view/js/main.js29
-rw-r--r--view/js/mod_connedit.js4
-rw-r--r--view/js/mod_defperms.js4
-rw-r--r--view/js/mod_settings.js4
-rwxr-xr-xview/tpl/abook_edit.tpl1
-rwxr-xr-xview/tpl/admin_site.tpl1
-rwxr-xr-xview/tpl/defperms.tpl1
-rw-r--r--view/tpl/notifications_widget.tpl30
-rwxr-xr-xview/tpl/register.tpl4
21 files changed, 114 insertions, 57 deletions
diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php
index 457b85b62..d2a307fd5 100644
--- a/Zotlabs/Lib/Apps.php
+++ b/Zotlabs/Lib/Apps.php
@@ -221,6 +221,7 @@ class Apps {
static public function translate_system_apps(&$arr) {
$apps = array(
'Apps' => t('Apps'),
+ 'Articles' => t('Articles'),
'Cards' => t('Cards'),
'Admin' => t('Site Admin'),
'Report Bug' => t('Report Bug'),
diff --git a/Zotlabs/Module/Admin/Site.php b/Zotlabs/Module/Admin/Site.php
index 50756c654..86558e93c 100644
--- a/Zotlabs/Module/Admin/Site.php
+++ b/Zotlabs/Module/Admin/Site.php
@@ -29,7 +29,7 @@ class Site {
$maximagesize = ((x($_POST,'maximagesize')) ? intval(trim($_POST['maximagesize'])) : 0);
$register_policy = ((x($_POST,'register_policy')) ? intval(trim($_POST['register_policy'])) : 0);
-
+ $minimum_age = ((x($_POST,'minimum_age')) ? intval(trim($_POST['minimum_age'])) : 13);
$access_policy = ((x($_POST,'access_policy')) ? intval(trim($_POST['access_policy'])) : 0);
$invite_only = ((x($_POST,'invite_only')) ? True : False);
$abandon_days = ((x($_POST,'abandon_days')) ? intval(trim($_POST['abandon_days'])) : 0);
@@ -66,7 +66,7 @@ class Site {
$techlevel_lock = ((x($_POST,'techlock')) ? intval($_POST['techlock']) : 0);
$imagick_path = ((x($_POST,'imagick_path')) ? trim($_POST['imagick_path']) : '');
$thumbnail_security = ((x($_POST,'thumbnail_security')) ? intval($_POST['thumbnail_security']) : 0);
- $force_queue = ((intval($_POST['force_queue']) > 0) ? intval($_POST['force_queue']) : 300);
+ $force_queue = ((intval($_POST['force_queue']) > 0) ? intval($_POST['force_queue']) : 3000);
$techlevel = null;
if(array_key_exists('techlevel', $_POST))
@@ -127,6 +127,7 @@ class Site {
set_config('system','maximagesize', $maximagesize);
set_config('system','register_policy', $register_policy);
+ set_config('system','minimum_age', $minimum_age);
set_config('system','invitation_only', $invite_only);
set_config('system','access_policy', $access_policy);
set_config('system','account_abandon_days', $abandon_days);
@@ -303,6 +304,7 @@ class Site {
'$maximagesize' => array('maximagesize', t("Maximum image size"), intval(get_config('system','maximagesize')), t("Maximum size in bytes of uploaded images. Default is 0, which means no limits.")),
'$register_policy' => array('register_policy', t("Does this site allow new member registration?"), get_config('system','register_policy'), "", $register_choices),
'$invite_only' => array('invite_only', t("Invitation only"), get_config('system','invitation_only'), t("Only allow new member registrations with an invitation code. Above register policy must be set to Yes.")),
+ '$minimum_age' => array('minimum_age', t("Minimum age"), (x(get_config('system','minimum_age'))?get_config('system','minimum_age'):13), t("Minimum age (in years) for who may register on this site.")),
'$access_policy' => array('access_policy', t("Which best describes the types of account offered by this hub?"), get_config('system','access_policy'), "This is displayed on the public server site list.", $access_choices),
'$register_text' => array('register_text', t("Register text"), htmlspecialchars(get_config('system','register_text'), ENT_QUOTES, 'UTF-8'), t("Will be displayed prominently on the registration page.")),
'$frontpage' => array('frontpage', t("Site homepage to show visitors (default: login box)"), get_config('system','frontpage'), t("example: 'public' to show public stream, 'page/sys/home' to show a system webpage called 'home' or 'include:home.html' to include a file.")),
@@ -326,7 +328,7 @@ class Site {
'$timeout' => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
'$delivery_interval' => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
'$delivery_batch_count' => array('delivery_batch_count', t('Deliveries per process'),(x(get_config('system','delivery_batch_count'))?get_config('system','delivery_batch_count'):1), t("Number of deliveries to attempt in a single operating system process. Adjust if necessary to tune system performance. Recommend: 1-5.")),
- '$force_queue' => array('force_queue', t("Queue Threshold"), get_config('system','force_queue_threshold',300), t("Always defer immediate delivery if queue contains more than this number of entries.")),
+ '$force_queue' => array('force_queue', t("Queue Threshold"), get_config('system','force_queue_threshold',3000), t("Always defer immediate delivery if queue contains more than this number of entries.")),
'$poll_interval' => array('poll_interval', t("Poll interval"), (x(get_config('system','poll_interval'))?get_config('system','poll_interval'):2), t("Delay background polling processes by this many seconds to reduce system load. If 0, use delivery interval.")),
'$imagick_path' => array('imagick_path', t("Path to ImageMagick convert program"), get_config('system','imagick_convert_path'), t("If set, use this program to generate photo thumbnails for huge images ( > 4000 pixels in either dimension), otherwise memory exhaustion may occur. Example: /usr/bin/convert")),
'$thumbnail_security' => array('thumbnail_security', t("Allow SVG thumbnails in file browser"), get_config('system','thumbnail_security',0), t("WARNING: SVG images may contain malicious code.")),
diff --git a/Zotlabs/Module/Articles.php b/Zotlabs/Module/Articles.php
index 25daca81d..e2e0fed5d 100644
--- a/Zotlabs/Module/Articles.php
+++ b/Zotlabs/Module/Articles.php
@@ -35,7 +35,7 @@ class Articles extends \Zotlabs\Web\Controller {
return;
}
- nav_set_selected(t('Cards'));
+ nav_set_selected(t('Articles'));
head_add_link([
'rel' => 'alternate',
@@ -102,6 +102,7 @@ class Articles extends \Zotlabs\Web\Controller {
'permissions' => $channel_acl,
'showacl' => (($is_owner) ? true : false),
'visitor' => true,
+ 'body' => '[summary][/summary]',
'hide_location' => false,
'hide_voting' => false,
'profile_uid' => intval($owner),
diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php
index e0511b0d3..8288886cd 100644
--- a/Zotlabs/Module/Connedit.php
+++ b/Zotlabs/Module/Connedit.php
@@ -866,7 +866,7 @@ class Connedit extends \Zotlabs\Web\Controller {
$o .= replace_macros($tpl, [
'$header' => (($self) ? t('Connection Default Permissions') : sprintf( t('Connection: %s'),$contact['xchan_name'])),
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('Connection requests will be approved without your interaction'), $yes_no),
- '$permcat' => [ 'permcat', t('Permission role'), '', '',$permcats ],
+ '$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ],
'$permcat_new' => t('Add permission role'),
'$permcat_enable' => feature_enabled(local_channel(),'permcats'),
'$addr' => $contact['xchan_addr'],
diff --git a/Zotlabs/Module/Defperms.php b/Zotlabs/Module/Defperms.php
index 9214331e4..422333a50 100644
--- a/Zotlabs/Module/Defperms.php
+++ b/Zotlabs/Module/Defperms.php
@@ -237,7 +237,7 @@ class Defperms extends \Zotlabs\Web\Controller {
$o .= replace_macros($tpl, [
'$header' => t('Connection Default Permissions'),
'$autoperms' => array('autoperms',t('Apply these permissions automatically'), ((get_pconfig(local_channel(),'system','autoperms')) ? 1 : 0), t('If enabled, connection requests will be approved without your interaction'), $yes_no),
- '$permcat' => [ 'permcat', t('Permission role'), '', '',$permcats ],
+ '$permcat' => [ 'permcat', t('Permission role'), '', '<span class="loading invisible">' . t('Loading') . '<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span></span>',$permcats ],
'$permcat_new' => t('Add permission role'),
'$permcat_enable' => feature_enabled(local_channel(),'permcats'),
'$section' => $section,
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php
index 6365230f8..ad829137a 100644
--- a/Zotlabs/Module/Item.php
+++ b/Zotlabs/Module/Item.php
@@ -504,7 +504,12 @@ class Item extends \Zotlabs\Web\Controller {
$body = z_input_filter($body,$mimetype,$execflag);
}
- // Verify ability to use html or php!!!
+
+ $arr = [ 'profile_uid' => $profile_uid, 'content' => $body, 'mimetype' => $mimetype ];
+ call_hooks('post_content',$arr);
+ $body = $arr['content'];
+ $mimetype = $arr['mimetype'];
+
$gacl = $acl->get();
$str_contact_allow = $gacl['allow_cid'];
@@ -516,13 +521,6 @@ class Item extends \Zotlabs\Web\Controller {
require_once('include/text.php');
- if($uid && $uid == $profile_uid && feature_enabled($uid,'markdown')) {
- require_once('include/markdown.php');
- $body = preg_replace_callback('/\[share(.*?)\]/ism','\share_shield',$body);
- $body = markdown_to_bb($body,true,['preserve_lf' => true]);
- $body = preg_replace_callback('/\[share(.*?)\]/ism','\share_unshield',$body);
-
- }
// BBCODE alert: the following functions assume bbcode input
// and will require alternatives for alternative content-types (text/html, text/markdown, text/plain, etc.)
diff --git a/app/articles.apd b/app/articles.apd
index 74e86415b..5a9f17e0f 100644
--- a/app/articles.apd
+++ b/app/articles.apd
@@ -1,4 +1,4 @@
-version: 1.1
+version: 1.2
url: $baseurl/articles/$nick
name: Articles
requires: local_channel, articles
diff --git a/boot.php b/boot.php
index bfe86f767..ece2150e1 100755
--- a/boot.php
+++ b/boot.php
@@ -51,7 +51,7 @@ require_once('include/attach.php');
require_once('include/bbcode.php');
define ( 'PLATFORM_NAME', 'hubzilla' );
-define ( 'STD_VERSION', '3.1.1' );
+define ( 'STD_VERSION', '3.1.2' );
define ( 'ZOT_REVISION', '1.3' );
define ( 'DB_UPDATE_VERSION', 1198 );
diff --git a/include/bbcode.php b/include/bbcode.php
index 775a91f9a..de32bd57a 100644
--- a/include/bbcode.php
+++ b/include/bbcode.php
@@ -428,6 +428,16 @@ function bb_spoilertag($match) {
return '<div onclick="openClose(\'opendiv-' . $rnd . '\'); return false;" class="fakelink">' . $openclose . '</div><blockquote id="opendiv-' . $rnd . '" style="display: none;">' . $text . '</blockquote>';
}
+function bb_summary($match) {
+ $rnd1 = mt_rand();
+ $rnd2 = mt_rand();
+ $rnd3 = mt_rand();
+ $rnd4 = mt_rand();
+
+ return $match[1] . '<div style="display: block;" id="opendiv-' . $rnd2 . '">' . $match[2] . '</div><div style="display: block;" id="opendiv-' . $rnd3 . '" onclick="openClose(\'opendiv-' . $rnd1 . '\'); openClose(\'opendiv-' . $rnd2 . '\'); openClose(\'opendiv-' . $rnd3 . '\'); openClose(\'opendiv-' . $rnd4 . '\'); return false;" class="fakelink">' . t('View article') . '</div><div style="display: none;" id="opendiv-' . $rnd4 . '" onclick="openClose(\'opendiv-' . $rnd1 . '\'); openClose(\'opendiv-' . $rnd2 . '\'); openClose(\'opendiv-' . $rnd3 . '\'); openClose(\'opendiv-' . $rnd4 . '\'); return false;" class="fakelink">' . t('View summary') . '</div><div id="opendiv-' . $rnd1 . '" style="display: none;">' . $match[3] . '</div>';
+}
+
+
function bb_definitionList($match) {
// $match[1] is the markup styles for the "terms" in the definition list.
// $match[2] is the content between the [dl]...[/dl] tags
@@ -1062,6 +1072,11 @@ function bbcode($Text, $options = []) {
$Text = preg_replace_callback("/\[code(.*?)\](.*?)\[\/code\]/ism", 'bb_code_options', $Text);
}
+
+ if(strpos($Text,'[/summary]') !== false) {
+ $Text = preg_replace_callback("/^(.*?)\[summary\](.*?)\[\/summary\](.*?)$/ism", 'bb_summary', $Text);
+ }
+
// Check for [spoiler] text
$endlessloop = 0;
while ((strpos($Text, "[/spoiler]")!== false) and (strpos($Text, "[spoiler]") !== false) and (++$endlessloop < 20)) {
diff --git a/include/features.php b/include/features.php
index 8601ff79e..36eb74a9d 100644
--- a/include/features.php
+++ b/include/features.php
@@ -126,7 +126,7 @@ function get_features($filtered = true) {
feature_level('cards',1),
],
-/* reserved, work in progress
+
[
'articles',
t('Articles'),
@@ -135,7 +135,7 @@ function get_features($filtered = true) {
get_config('feature_lock','articles'),
feature_level('articles',1),
],
-*/
+
[
'nav_channel_select',
t('Navigation Channel Select'),
@@ -374,15 +374,6 @@ function get_features($filtered = true) {
t('Post/Comment Tools'),
[
- 'markdown',
- t('Markdown'),
- t('Use markdown for editing posts'),
- false,
- get_config('feature_lock','markdown'),
- feature_level('markdown',2),
- ],
-
- [
'commtag',
t('Community Tagging'),
t('Ability to tag existing posts'),
@@ -490,6 +481,8 @@ function get_features($filtered = true) {
else {
$narr = $arr;
}
- call_hooks('get_features',$narr);
- return $narr;
+
+ $x = [ 'features' => $narr, 'filtered' => $filtered, 'techlevel' => $techlevel ];
+ call_hooks('get_features',$x);
+ return $x['features'];
}
diff --git a/include/html2bbcode.php b/include/html2bbcode.php
index f67231847..4166299db 100644
--- a/include/html2bbcode.php
+++ b/include/html2bbcode.php
@@ -188,13 +188,14 @@ function html2bbcode($message)
node2bbcode($doc, 'hr', array(), "[hr]", "");
- node2bbcode($doc, 'table', array(), "", "");
- node2bbcode($doc, 'tr', array(), "\n", "");
- node2bbcode($doc, 'td', array(), "\t", "");
- //node2bbcode($doc, 'table', array(), "[table]", "[/table]");
- //node2bbcode($doc, 'th', array(), "[th]", "[/th]");
- //node2bbcode($doc, 'tr', array(), "[tr]", "[/tr]");
- //node2bbcode($doc, 'td', array(), "[td]", "[/td]");
+// node2bbcode($doc, 'table', array(), "", "");
+// node2bbcode($doc, 'tr', array(), "\n", "");
+// node2bbcode($doc, 'td', array(), "\t", "");
+
+ node2bbcode($doc, 'table', array(), "[table]", "[/table]");
+ node2bbcode($doc, 'th', array(), "[th]", "[/th]");
+ node2bbcode($doc, 'tr', array(), "[tr]", "[/tr]");
+ node2bbcode($doc, 'td', array(), "[td]", "[/td]");
node2bbcode($doc, 'h1', array(), "\n\n[h1]", "[/h1]\n");
node2bbcode($doc, 'h2', array(), "\n\n[h2]", "[/h2]\n");
@@ -211,7 +212,7 @@ function html2bbcode($message)
node2bbcode($doc, 'video', array('src'=>'/(.+)/'), '[video]$1', '[/video]');
node2bbcode($doc, 'audio', array('src'=>'/(.+)/'), '[audio]$1', '[/audio]');
- node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]');
+// node2bbcode($doc, 'iframe', array('src'=>'/(.+)/'), '[iframe]$1', '[/iframe]');
node2bbcode($doc, 'code', array(), '[code]', '[/code]');
diff --git a/view/css/widgets.css b/view/css/widgets.css
index 76e829b04..576445dd6 100644
--- a/view/css/widgets.css
+++ b/view/css/widgets.css
@@ -178,6 +178,14 @@ a.wikilist {
max-height: 70vh;
overflow: auto;
}
+.notifications-textinput input {
+ font-family: FontAwesome, sans-serif;
+}
+
+
+.notifications-textinput {
+ padding: .75rem 0.85rem;
+}
.notification-content.collapsing {
overflow: hidden;
diff --git a/view/js/main.js b/view/js/main.js
index 77b8e91e7..52b836936 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -881,10 +881,11 @@ function notify_popup_loader(notifyType) {
/* notifications template - different for navbar and notifications widget */
var navbar_notifications_tpl= unescape($("#navbar-notifications-template[rel=template]").html());
var notifications_tpl= unescape($("#nav-notifications-template[rel=template]").html());
- var notifications_all = unescape($('<div>').append( $("#nav-" + notifyType + "-see-all").clone() ).html()); //outerHtml hack
- var notifications_mark = unescape($('<div>').append( $("#nav-" + notifyType + "-mark-all").clone() ).html()); //outerHtml hack
- var notifications_tt_only = unescape($('<div>').append( $("#tt-" + notifyType + "-only").clone() ).html()); //outerHtml hack
- var notifications_empty = unescape($("#nav-" + notifyType + "-menu").html());
+ //var notifications_all = unescape($('<div>').append( $("#nav-" + notifyType + "-see-all").clone() ).html()); //outerHtml hack
+ //var notifications_mark = unescape($('<div>').append( $("#nav-" + notifyType + "-mark-all").clone() ).html()); //outerHtml hack
+ //var notifications_tt_only = unescape($('<div>').append( $("#tt-" + notifyType + "-only").clone() ).html()); //outerHtml hack
+ //var notifications_cn_only = unescape($('<div>').append( $("#cn-" + notifyType + "-only").clone() ).html()); //outerHtml hack
+ //var notifications_empty = unescape($("#nav-" + notifyType + "-menu").html());
var notify_menu = $("#nav-" + notifyType + "-menu");
@@ -895,11 +896,13 @@ function notify_popup_loader(notifyType) {
window.location.href=window.location.href;
}
- $("#navbar-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only);
- $("#nav-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only);
+ //$("#navbar-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only + notifications_cn_only);
+ //$("#nav-" + notifyType + "-menu").html(notifications_all + notifications_mark + notifications_tt_only + notifications_cn_only);
$("." + notifyType + "-update").html(data.notify.length);
+ notify_menu.html('');
+
$(data.notify).each(function() {
html = navbar_notifications_tpl.format(this.notify_link,this.photo,this.name,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top);
$("#navbar-" + notifyType + "-menu").append(html);
@@ -915,11 +918,23 @@ function notify_popup_loader(notifyType) {
if($('#tt-' + notifyType + '-only').hasClass('active'))
$('#nav-' + notifyType + '-menu [data-thread_top=false]').hide();
+
+ var filter = $('#cn-' + notifyType + '-input').val();
+
+ if(filter) {
+ $('#nav-' + notifyType + '-menu .notification').each(function(i, el){
+ var cn = $(el).data('contact_name').toLowerCase();
+ if(cn.indexOf(filter) === -1)
+ $(this).addClass('d-none');
+ else
+ $(this).removeClass('d-none');
+ });
+ }
});
setTimeout(function() {
- if(notify_menu.hasClass('show')) {
+ if($('#nav-' + notifyType + '-sub').hasClass('show')) {
console.log('updating ' + notifyType + ' notifications...');
setTimeout(notify_popup_loader, updateInterval, notifyType);
}
diff --git a/view/js/mod_connedit.js b/view/js/mod_connedit.js
index 7100e0d07..34e9a3b21 100644
--- a/view/js/mod_connedit.js
+++ b/view/js/mod_connedit.js
@@ -19,7 +19,7 @@ $(document).ready(function() {
$('#id_permcat').change(function() {
- $('.loading-role-rotator').spin(true);
+ $('.loading').toggleClass('invisible');
var permName = $('#id_permcat').val();
loadAbookRole(permName);
});
@@ -128,7 +128,7 @@ function loadAbookRole(name) {
if(this.value)
$('#me_id_perms_' + this.name).attr('checked','checked');
});
- $('.loading-role-rotator').spin(false);
+ $('.loading').toggleClass('invisible');
});
}
diff --git a/view/js/mod_defperms.js b/view/js/mod_defperms.js
index c89142579..18ebe268e 100644
--- a/view/js/mod_defperms.js
+++ b/view/js/mod_defperms.js
@@ -1,7 +1,7 @@
$(document).ready(function() {
$('#id_permcat').change(function() {
- $('.loading-role-rotator').show();
+ $('.loading').toggleClass('invisible');
var permName = $('#id_permcat').val();
loadConnectionRole(permName);
});
@@ -25,7 +25,7 @@ function loadConnectionRole(name) {
if(this.value)
$('#id_perms_' + this.name).attr('checked','checked');
});
- $('.loading-role-rotator').hide();
+ $('.loading').toggleClass('invisible');
});
}
diff --git a/view/js/mod_settings.js b/view/js/mod_settings.js
index f9faa3d5c..d3392c748 100644
--- a/view/js/mod_settings.js
+++ b/view/js/mod_settings.js
@@ -19,7 +19,7 @@ $(document).ready(function() {
});
$('#id_permcat_list').change(function() {
- $('.loading-role-rotator').spin(true);
+ $('.loading').toggleClass('invisible');
var permName = $('#id_permcat').val();
loadPermcat(permName);
});
@@ -172,7 +172,7 @@ function loadPermcat(name) {
if(this.value)
$('#me_id_perms_' + this.name).attr('checked','checked');
});
- $('.loading-role-rotator').spin(false);
+ $('.loading').toggleClass('invisible');
});
}
diff --git a/view/tpl/abook_edit.tpl b/view/tpl/abook_edit.tpl
index 13b94a560..81c182e1b 100755
--- a/view/tpl/abook_edit.tpl
+++ b/view/tpl/abook_edit.tpl
@@ -485,7 +485,6 @@
</div>
{{if $permcat_enable}}
- <div class="loading-role-rotator"></div>
<a href="settings/permcats" class="pull-right"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
{{include file="field_select.tpl" field=$permcat}}
{{/if}}
diff --git a/view/tpl/admin_site.tpl b/view/tpl/admin_site.tpl
index 2b4e8c9f9..97c14b6e3 100755
--- a/view/tpl/admin_site.tpl
+++ b/view/tpl/admin_site.tpl
@@ -70,6 +70,7 @@
{{include file="field_input.tpl" field=$register_text}}
{{include file="field_select.tpl" field=$register_policy}}
{{include file="field_checkbox.tpl" field=$invite_only}}
+ {{include file="field_input.tpl" field=$minimum_age}}
{{include file="field_select.tpl" field=$access_policy}}
{{include file="field_input.tpl" field=$location}}
{{include file="field_input.tpl" field=$sellpage}}
diff --git a/view/tpl/defperms.tpl b/view/tpl/defperms.tpl
index f4a711957..5273ee91b 100755
--- a/view/tpl/defperms.tpl
+++ b/view/tpl/defperms.tpl
@@ -17,7 +17,6 @@
<p>{{$permnote_self}}</p>
</div>
{{if $permcat_enable}}
- <div class="loading-role-rotator spinner-wrapper"></div>
<a href="settings/permcats" class="pull-right"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
{{include file="field_select.tpl" field=$permcat}}
{{/if}}
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 9d2e08c41..9489e850c 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -65,6 +65,23 @@
$('#nav-{{$notification.type}}-menu [data-thread_top=false]').toggle();
$(this).toggleClass('active sticky-top');
});
+ $(document).on('keyup', '#cn-{{$notification.type}}-input', function(e) {
+ var val = $('#cn-{{$notification.type}}-input').val().toLowerCase();
+
+ if(val)
+ $('#cn-{{$notification.type}}-only').addClass('active sticky-top');
+ else
+ $('#cn-{{$notification.type}}-only').removeClass('active sticky-top');
+
+ $("#nav-{{$notification.type}}-menu .notification").each(function(i, el){
+ var cn = $(el).data('contact_name').toLowerCase();
+
+ if(cn.indexOf(val) === -1)
+ $(this).addClass('d-none');
+ else
+ $(this).removeClass('d-none');
+ });
+ });
{{/if}}
{{/foreach}}
@@ -90,7 +107,7 @@
</div>
<div id="notifications" class="navbar-nav" data-children=".nav-item">
<div id="nav-notifications-template" rel="template">
- <a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}" data-notify_id="{7}" data-thread_top="{8}">
+ <a class="list-group-item clearfix notification {5}" href="{0}" title="{2} {3}" data-b64mid="{6}" data-notify_id="{7}" data-thread_top="{8}" data-contact_name="{2}">
<img class="menu-img-3" data-src="{1}">
<span class="contactname">{2}</span>
<span class="dropdown-sub-text">{3}<br>{4}</span>
@@ -98,11 +115,11 @@
</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">
+ <a class="list-group-item" href="#nav-{{$notification.type}}-sub" title="{{$notification.title}}" data-toggle="collapse" data-parent="#notifications" rel="#nav-{{$notification.type}}-menu">
<i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}}
<span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span>
</a>
- <div id="nav-{{$notification.type}}-menu" class="collapse notification-content" rel="{{$notification.type}}">
+ <div id="nav-{{$notification.type}}-sub" class="collapse notification-content">
{{if $notification.viewall}}
<a class="list-group-item text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
<i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}
@@ -117,8 +134,13 @@
<div class="list-group-item cursor-pointer" id="tt-{{$notification.type}}-only">
<i class="fa fa-fw fa-filter"></i> {{$notification.filter.label}}
</div>
+ <div class="list-group-item notifications-textinput" id="cn-{{$notification.type}}-only">
+ <input id="cn-{{$notification.type}}-input" type="text" class="form-control form-control-sm" placeholder="&#xf0b0; Filter by name">
+ </div>
{{/if}}
- {{$loading}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
+ <div id="nav-{{$notification.type}}-menu" class="" rel="{{$notification.type}}">
+ {{$loading}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
+ </div>
</div>
</div>
{{/foreach}}
diff --git a/view/tpl/register.tpl b/view/tpl/register.tpl
index 493dba4c8..335d5f979 100755
--- a/view/tpl/register.tpl
+++ b/view/tpl/register.tpl
@@ -12,7 +12,9 @@
{{/if}}
{{if $registertext}}
- <div id="register-text" class="descriptive-paragraph">{{$registertext}}</div>
+ <div class="section-content-info-wrapper">
+ <div id="register-text" class="descriptive-paragraph">{{$registertext}}</div>
+ </div>
{{/if}}
{{if $invitations}}