aboutsummaryrefslogtreecommitdiffstats
path: root/view/tpl
diff options
context:
space:
mode:
Diffstat (limited to 'view/tpl')
-rw-r--r--view/tpl/abook_edit.tpl270
-rw-r--r--view/tpl/acl_selector.tpl10
-rw-r--r--view/tpl/admin_accounts.tpl4
-rw-r--r--view/tpl/admin_plugins.tpl8
-rw-r--r--view/tpl/admin_plugins_addrepo.tpl2
-rw-r--r--view/tpl/admin_profiles.tpl2
-rw-r--r--view/tpl/admin_queue.tpl2
-rw-r--r--view/tpl/admin_settings_features.tpl4
-rw-r--r--view/tpl/admin_site.tpl32
-rw-r--r--view/tpl/album_edit.tpl8
-rw-r--r--view/tpl/alt_pager.tpl4
-rw-r--r--view/tpl/app.tpl71
-rw-r--r--view/tpl/app_create.tpl2
-rw-r--r--view/tpl/app_inline.tpl26
-rw-r--r--view/tpl/app_install.tpl13
-rw-r--r--view/tpl/app_nav.tpl2
-rw-r--r--view/tpl/app_nav_pinned.tpl9
-rw-r--r--view/tpl/app_order.tpl3
-rw-r--r--view/tpl/attach_edit.tpl8
-rw-r--r--view/tpl/blocklist.tpl2
-rw-r--r--view/tpl/cal_calendar.tpl2
-rw-r--r--view/tpl/cdav_addressbook.tpl128
-rw-r--r--view/tpl/cdav_calendar.tpl64
-rw-r--r--view/tpl/cdav_widget_addressbook.tpl16
-rw-r--r--view/tpl/cdav_widget_calendar.tpl42
-rw-r--r--view/tpl/channel.tpl6
-rw-r--r--view/tpl/channel_import.tpl2
-rw-r--r--view/tpl/channel_rename.tpl2
-rw-r--r--view/tpl/channels.tpl2
-rw-r--r--view/tpl/chat.tpl30
-rw-r--r--view/tpl/chatroom_new.tpl4
-rw-r--r--view/tpl/chatroomlist.tpl2
-rw-r--r--view/tpl/chatrooms.tpl8
-rw-r--r--view/tpl/cloud_actionspanel.tpl14
-rw-r--r--view/tpl/cloud_directory.tpl44
-rw-r--r--view/tpl/cloud_header.tpl2
-rw-r--r--view/tpl/comment_item.tpl10
-rw-r--r--view/tpl/common_friends.tpl2
-rw-r--r--view/tpl/common_tabs.tpl4
-rw-r--r--view/tpl/connection_template.tpl36
-rw-r--r--view/tpl/connections.tpl34
-rw-r--r--view/tpl/connstatus.tpl2
-rw-r--r--view/tpl/contact_edit.tpl133
-rw-r--r--view/tpl/contact_edit_header.tpl9
-rw-r--r--view/tpl/contact_edit_modal.tpl155
-rw-r--r--view/tpl/contact_edit_tools.tpl14
-rw-r--r--view/tpl/contact_slider.tpl2
-rw-r--r--view/tpl/conv_frame.tpl3
-rw-r--r--view/tpl/conv_item.tpl52
-rw-r--r--view/tpl/conv_list.tpl44
-rw-r--r--view/tpl/conversation.tpl6
-rw-r--r--view/tpl/cover_photo.tpl2
-rw-r--r--view/tpl/defperms.tpl2
-rw-r--r--view/tpl/directory_header.tpl8
-rw-r--r--view/tpl/direntry.tpl2
-rw-r--r--view/tpl/dreport.tpl4
-rw-r--r--view/tpl/edpost_head.tpl2
-rw-r--r--view/tpl/email_validation.tpl2
-rw-r--r--view/tpl/event_form.tpl16
-rw-r--r--view/tpl/events-js.tpl4
-rw-r--r--view/tpl/events_cal-js.tpl2
-rw-r--r--view/tpl/events_tools_side.tpl2
-rw-r--r--view/tpl/field_acheckbox.tpl41
-rw-r--r--view/tpl/field_checkbox.tpl6
-rw-r--r--view/tpl/field_colorinput.tpl2
-rw-r--r--view/tpl/field_combobox.tpl2
-rw-r--r--view/tpl/field_custom.tpl2
-rw-r--r--view/tpl/field_duration.qmc.tpl2
-rw-r--r--view/tpl/field_input.tpl4
-rw-r--r--view/tpl/field_intcheckbox.tpl4
-rw-r--r--view/tpl/field_password.tpl2
-rw-r--r--view/tpl/field_radio.tpl2
-rw-r--r--view/tpl/field_select.tpl4
-rw-r--r--view/tpl/field_select_disabled.tpl2
-rw-r--r--view/tpl/field_select_grouped.tpl2
-rw-r--r--view/tpl/field_select_raw.tpl2
-rw-r--r--view/tpl/field_textarea.tpl2
-rw-r--r--view/tpl/field_themeselect.tpl2
-rw-r--r--view/tpl/field_yesno.tpl10
-rw-r--r--view/tpl/filer_dialog.tpl5
-rw-r--r--view/tpl/follow.tpl4
-rw-r--r--view/tpl/generic_addon_settings.tpl4
-rw-r--r--view/tpl/generic_modal.tpl4
-rw-r--r--view/tpl/group_edit.tpl11
-rw-r--r--view/tpl/group_selection.tpl14
-rw-r--r--view/tpl/group_side.tpl4
-rw-r--r--view/tpl/groupeditor.tpl4
-rw-r--r--view/tpl/head.tpl1
-rw-r--r--view/tpl/help.tpl6
-rw-r--r--view/tpl/hq.tpl4
-rw-r--r--view/tpl/hq_controls.tpl13
-rw-r--r--view/tpl/import_progress.tpl42
-rw-r--r--view/tpl/invite.tpl6
-rw-r--r--view/tpl/item_categories.tpl2
-rw-r--r--view/tpl/item_filer.tpl2
-rw-r--r--view/tpl/jot-header.tpl10
-rw-r--r--view/tpl/jot.tpl42
-rw-r--r--view/tpl/layoutlist.tpl2
-rw-r--r--view/tpl/locmanage.tpl28
-rw-r--r--view/tpl/login.tpl20
-rw-r--r--view/tpl/mail_conv.tpl16
-rw-r--r--view/tpl/mail_display.tpl2
-rw-r--r--view/tpl/menuedit.tpl4
-rw-r--r--view/tpl/menulist.tpl2
-rw-r--r--view/tpl/message_side.tpl2
-rw-r--r--view/tpl/messages_widget.tpl139
-rw-r--r--view/tpl/micropro_card.tpl2
-rw-r--r--view/tpl/mitemedit.tpl4
-rw-r--r--view/tpl/mitemlist.tpl4
-rw-r--r--view/tpl/mood_content.tpl2
-rw-r--r--view/tpl/msg-header.tpl5
-rw-r--r--view/tpl/myapps.tpl6
-rw-r--r--view/tpl/nav_login.tpl4
-rw-r--r--view/tpl/navbar_default.tpl626
-rw-r--r--view/tpl/navbar_tucson.tpl410
-rw-r--r--view/tpl/new_channel.tpl12
-rw-r--r--view/tpl/notes.tpl113
-rw-r--r--view/tpl/notifications.tpl2
-rw-r--r--view/tpl/notifications_widget.tpl581
-rw-r--r--view/tpl/notify.tpl2
-rw-r--r--view/tpl/pdledit_gui.tpl243
-rw-r--r--view/tpl/pdledit_gui_item.tpl18
-rw-r--r--view/tpl/pdledit_gui_templates.tpl11
-rw-r--r--view/tpl/peoplefind.tpl6
-rw-r--r--view/tpl/permcats.tpl98
-rw-r--r--view/tpl/permcats_widget.tpl27
-rw-r--r--view/tpl/photo_album.tpl4
-rw-r--r--view/tpl/photo_album_portfolio.tpl2
-rw-r--r--view/tpl/photo_albums.tpl2
-rw-r--r--view/tpl/photo_item.tpl2
-rw-r--r--view/tpl/photo_view.tpl38
-rw-r--r--view/tpl/photos_recent.tpl4
-rw-r--r--view/tpl/photos_upload.tpl21
-rw-r--r--view/tpl/pinned_item.tpl30
-rw-r--r--view/tpl/poke_content.tpl4
-rw-r--r--view/tpl/privacy_groups.tpl21
-rw-r--r--view/tpl/profile_advanced.tpl19
-rw-r--r--view/tpl/profile_edit.tpl76
-rw-r--r--view/tpl/profile_listing_header.tpl2
-rw-r--r--view/tpl/profile_photo.tpl288
-rw-r--r--view/tpl/profile_tabs.tpl2
-rw-r--r--view/tpl/profile_vcard.tpl142
-rw-r--r--view/tpl/prv_message.tpl107
-rw-r--r--view/tpl/rating_slider.tpl2
-rw-r--r--view/tpl/regate.tpl2
-rw-r--r--view/tpl/removeaccount.tpl2
-rw-r--r--view/tpl/removeme.tpl2
-rw-r--r--view/tpl/rmagic.tpl2
-rw-r--r--view/tpl/search_item.tpl28
-rw-r--r--view/tpl/searchbox.tpl10
-rw-r--r--view/tpl/settings.tpl85
-rw-r--r--view/tpl/settings_account.tpl2
-rw-r--r--view/tpl/settings_display.tpl13
-rw-r--r--view/tpl/settings_features.tpl4
-rw-r--r--view/tpl/settings_privacy.tpl56
-rw-r--r--view/tpl/sharedwithme.tpl2
-rw-r--r--view/tpl/suggest_widget.tpl2
-rw-r--r--view/tpl/thing_edit.tpl2
-rw-r--r--view/tpl/thing_input.tpl2
-rw-r--r--view/tpl/tokens.tpl58
-rw-r--r--view/tpl/uexport.tpl61
-rw-r--r--view/tpl/usermenu.tpl2
-rw-r--r--view/tpl/viewcontact_template.tpl2
-rw-r--r--view/tpl/webpage_export_list.tpl4
-rw-r--r--view/tpl/webpage_import.tpl4
-rw-r--r--view/tpl/webpagelist.tpl4
-rw-r--r--view/tpl/website_portation_tools.tpl16
-rw-r--r--view/tpl/widget_menu.tpl10
-rw-r--r--view/tpl/widget_menu_count.tpl13
-rw-r--r--view/tpl/wiki.tpl52
-rw-r--r--view/tpl/wiki_page_list.tpl2
-rw-r--r--view/tpl/wiki_page_not_found.tpl2
-rw-r--r--view/tpl/wikilist.tpl14
-rw-r--r--view/tpl/xchan_vcard.tpl16
-rw-r--r--view/tpl/xrd_host.tpl13
-rw-r--r--view/tpl/xrd_person.tpl38
176 files changed, 3414 insertions, 1939 deletions
diff --git a/view/tpl/abook_edit.tpl b/view/tpl/abook_edit.tpl
index 6ff7bffcd..28631ed68 100644
--- a/view/tpl/abook_edit.tpl
+++ b/view/tpl/abook_edit.tpl
@@ -1,12 +1,12 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $notself}}
- <div class="pull-right">
+ <div class="float-end">
<div class="btn-group">
- <button id="connection-dropdown" class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <button id="connection-dropdown" class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
</button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dLabel">
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dLabel">
<a class="dropdown-item" href="{{$tools.view.url}}" title="{{$tools.view.title}}">{{$tools.view.label}}</a>
<a class="dropdown-item" href="{{$tools.recent.url}}" title="{{$tools.recent.title}}">{{$tools.recent.label}}</a>
{{if $tools.fetchvc}}
@@ -24,14 +24,16 @@
{{if $abook_prev || $abook_next}}
<div class="btn-group">
<a href="connedit/{{$abook_prev}}{{if $section}}?f=&section={{$section}}{{/if}}" class="btn btn-outline-secondary btn-sm{{if ! $abook_prev}} disabled{{/if}}" ><i class="fa fa-backward"></i></a>
+ {{if $sections}}
<div class="btn-group" >
- <button class="btn btn-outline-secondary btn-sm{{if $is_pending}} disabled{{/if}}" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-bars"></i></button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dLabel">
+ <button class="btn btn-outline-secondary btn-sm{{if $is_pending}} disabled{{/if}}" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><i class="fa fa-bars"></i></button>
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dLabel">
{{foreach $sections as $s}}
<a class="dropdown-item" href="{{$s.url}}" title="{{$s.title}}">{{$s.label}}</a>
{{/foreach}}
</div>
</div>
+ {{/if}}
<a href="connedit/{{$abook_next}}{{if $section}}?f=&section={{$section}}{{/if}}" class="btn btn-outline-secondary btn-sm{{if ! $abook_next}} disabled{{/if}}" ><i class="fa fa-forward"></i></a>
</div>
{{/if}}
@@ -40,6 +42,65 @@
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper-np">
+ <form id="abook-edit-form" action="connedit/{{$contact_id}}" method="post" >
+
+ <input type="hidden" name="contact_id" value="{{$contact_id}}">
+ <input type="hidden" name="section" value="{{$section}}">
+
+ <div class="section-content-wrapper">
+ <a href="permcats/{{$permcat_value}}" class="float-end"><i class="fa fa-external-link"></i>&nbsp;{{$permcat_new}}</a>
+ {{include file="field_select.tpl" field=$permcat}}
+ <button type="button" class="btn btn-outline-secondary float-end" data-bs-toggle="modal" data-bs-target="#perms_modal">Permissions</button>
+ <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
+ <div class="modal" id="perms_modal" tabindex="-1" aria-labelledby="perms_modal_label" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <div class="modal-title h3" id="perms_modal_label">Permissions Overview</div>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+
+ <table class="table table-hover table-sm">
+ <thead>
+ <tr>
+ <th scope="col">Permission</th>
+ <th scope="col">{{$them}}</th>
+ <th scope="col">{{$me}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{foreach $perms as $perm}}
+ <tr>
+ <td>{{$perm.1}}</td>
+ <td>
+ {{if $perm.2}}
+ <i class="fa fa-check text-success"></i>
+ {{else}}
+ <i class="fa fa-times text-danger"></i>
+ {{/if}}
+ </td>
+ <td>
+ {{if $perm.3}}
+ <i class="fa fa-check text-success"></i>
+ {{else}}
+ <i class="fa fa-times text-danger"></i>
+ {{/if}}
+ </td>
+ </tr>
+ {{/foreach}}
+
+ </tbody>
+ </table>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+
{{if $notself}}
{{foreach $tools as $tool}}
{{if $tool.info}}
@@ -52,7 +113,7 @@
{{/foreach}}
<div class="section-content-info-wrapper">
<div>
- {{$addr_text}} <strong>'{{if $addr}}{{$addr}}{{else}}{{$primeurl}}{{/if}}'</strong>
+ {{$addr_text}} <strong>'{{if $addr}}{{$addr}}{{else}}{{$primeurl}}{{/if}}'</strong>
</div>
{{if $locstr}}
<div>
@@ -73,49 +134,25 @@
</div>
{{/if}}
- <form id="abook-edit-form" action="connedit/{{$contact_id}}" method="post" >
-
- <input type="hidden" name="contact_id" value="{{$contact_id}}">
- <input type="hidden" name="section" value="{{$section}}">
-
<div class="panel-group" id="contact-edit-tools" role="tablist" aria-multiselectable="true">
{{if $notself}}
- {{if $is_pending}}
- <div class="panel">
- <div class="section-subtitle-wrapper" role="tab" id="pending-tool">
- <h3>
- <a data-toggle="collapse" data-parent="#contact-edit-tools" href="#pending-tool-collapse" aria-expanded="true" aria-controls="pending-tool-collapse">
- {{$pending_label}}
- </a>
- </h3>
- </div>
- <div id="pending-tool-collapse" class="panel-collapse collapse show" role="tabpanel" aria-labelledby="pending-tool">
- <div class="section-content-tools-wrapper">
- {{include file="field_checkbox.tpl" field=$unapproved}}
- <div class="settings-submit-wrapper" >
- <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
- </div>
- </div>
- </div>
- </div>
- {{/if}}
{{if ! $is_pending}}
- <div id="template-form-vcard-org" class="form-group form-vcard-org">
- <div class="form-group form-vcard-org">
+ <div id="template-form-vcard-org" class="mb-3 form-vcard-org">
+ <div class="mb-3 form-vcard-org">
<input type="text" name="org" value="" placeholder="{{$org_label}}">
<i data-remove="vcard-org" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
- <div id="template-form-vcard-title" class="form-group form-vcard-title">
- <div class="form-group form-vcard-title">
+ <div id="template-form-vcard-title" class="mb-3 form-vcard-title">
+ <div class="mb-3 form-vcard-title">
<input type="text" name="title" value="" placeholder="{{$title_label}}">
<i data-remove="vcard-title" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
- <div id="template-form-vcard-tel" class="form-group form-vcard-tel">
+ <div id="template-form-vcard-tel" class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value="CELL">{{$mobile}}</option>
<option value="HOME">{{$home}}</option>
@@ -126,7 +163,7 @@
<i data-remove="vcard-tel" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-email" class="form-group form-vcard-email">
+ <div id="template-form-vcard-email" class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -136,7 +173,7 @@
<i data-remove="vcard-email" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-impp" class="form-group form-vcard-impp">
+ <div id="template-form-vcard-impp" class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -146,7 +183,7 @@
<i data-remove="vcard-impp" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-url" class="form-group form-vcard-url">
+ <div id="template-form-vcard-url" class="mb-3 form-vcard-url">
<select name="url_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -156,8 +193,8 @@
<i data-remove="vcard-url" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-adr" class="form-group form-vcard-adr">
- <div class="form-group">
+ <div id="template-form-vcard-adr" class="mb-3 form-vcard-adr">
+ <div class="mb-3">
<select name="adr_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -166,30 +203,30 @@
<label>{{$adr_label}}</label>
<i data-remove="vcard-adr" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$po_box}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$extra}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$street}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$locality}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$region}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$zip_code}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$country}}">
</div>
</div>
- <div id="template-form-vcard-note" class="form-group form-vcard-note">
+ <div id="template-form-vcard-note" class="mb-3 form-vcard-note">
<label>{{$note_label}}</label>
<i data-remove="vcard-note" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
<textarea name="note" class="form-control"></textarea>
@@ -197,8 +234,8 @@
<div class="section-content-wrapper-np">
<div id="vcard-cancel-{{$vcard.id}}" class="vcard-cancel vcard-cancel-btn" data-id="{{$vcard.id}}" data-action="cancel"><i class="fa fa-close"></i></div>
- <div id="vcard-add-field-{{$vcard.id}}" class="dropdown pull-right vcard-add-field">
- <button data-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
+ <div id="vcard-add-field-{{$vcard.id}}" class="dropdown float-end vcard-add-field">
+ <button data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
<ul class="dropdown-menu">
<li class="add-vcard-org"{{if $vcard.org}} style="display: none"{{/if}}><a href="#" data-add="vcard-org" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$org_label}}</a></li>
<li class="add-vcard-title"{{if $vcard.title}} style="display: none"{{/if}}><a href="#" data-add="vcard-title" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$title_label}}</a></li>
@@ -222,10 +259,10 @@
</div>
<div id="vcard-info-{{$vcard.id}}" class="vcard-info section-content-wrapper">
- <div class="vcard-org form-group">
+ <div class="vcard-org mb-3">
<div class="form-vcard-org-wrapper">
{{if $vcard.org}}
- <div class="form-group form-vcard-org">
+ <div class="mb-3 form-vcard-org">
<input type="text" name="org" value="{{$vcard.org}}" size="{{$vcard.org|count_characters:true}}" placeholder="{{$org_label}}">
<i data-remove="vcard-org" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
@@ -233,10 +270,10 @@
</div>
</div>
- <div class="vcard-title form-group">
+ <div class="vcard-title mb-3">
<div class="form-vcard-title-wrapper">
{{if $vcard.title}}
- <div class="form-group form-vcard-title">
+ <div class="mb-3 form-vcard-title">
<input type="text" name="title" value="{{$vcard.title}}" size="{{$vcard.title|count_characters:true}}" placeholder="{{$title_label}}">
<i data-remove="vcard-title" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
@@ -245,11 +282,11 @@
</div>
- <div class="vcard-tel form-group">
+ <div class="vcard-tel mb-3">
<div class="form-vcard-tel-wrapper">
{{if $vcard.tels}}
{{foreach $vcard.tels as $tel}}
- <div class="form-group form-vcard-tel">
+ <div class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value=""{{if $tel.type.0 != 'CELL' && $tel.type.0 != 'HOME' && $tel.type.0 != 'WORK' && $tel.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$tel.type.1}}</option>
<option value="CELL"{{if $tel.type.0 == 'CELL'}} selected="selected"{{/if}}>{{$mobile}}</option>
@@ -266,11 +303,11 @@
</div>
- <div class="vcard-email form-group">
+ <div class="vcard-email mb-3">
<div class="form-vcard-email-wrapper">
{{if $vcard.emails}}
{{foreach $vcard.emails as $email}}
- <div class="form-group form-vcard-email">
+ <div class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value=""{{if $email.type.0 != 'HOME' && $email.type.0 != 'WORK' && $email.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$email.type.1}}</option>
<option value="HOME"{{if $email.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -285,11 +322,11 @@
</div>
</div>
- <div class="vcard-impp form-group">
+ <div class="vcard-impp mb-3">
<div class="form-vcard-impp-wrapper">
{{if $vcard.impps}}
{{foreach $vcard.impps as $impp}}
- <div class="form-group form-vcard-impp">
+ <div class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value=""{{if $impp.type.0 != 'HOME' && $impp.type.0 != 'WORK' && $impp.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$impp.type.1}}</option>
<option value="HOME"{{if $impp.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -304,11 +341,11 @@
</div>
</div>
- <div class="vcard-url form-group">
+ <div class="vcard-url mb-3">
<div class="form-vcard-url-wrapper">
{{if $vcard.urls}}
{{foreach $vcard.urls as $url}}
- <div class="form-group form-vcard-url">
+ <div class="mb-3 form-vcard-url">
<select name="url_type[]">
<option value=""{{if $url.type.0 != 'HOME' && $url.type.0 != 'WORK' && $url.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$url.type.1}}</option>
<option value="HOME"{{if $url.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -323,12 +360,12 @@
</div>
</div>
- <div class="vcard-adr form-group">
+ <div class="vcard-adr mb-3">
<div class="form-vcard-adr-wrapper">
{{if $vcard.adrs}}
{{foreach $vcard.adrs as $adr}}
- <div class="form-group form-vcard-adr">
- <div class="form-group">
+ <div class="mb-3 form-vcard-adr">
+ <div class="mb-3">
<label>{{$adr_label}}</label>
<select name="adr_type[]">
<option value=""{{if $adr.type.0 != 'HOME' && $adr.type.0 != 'WORK' && $adr.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$adr.type.1}}</option>
@@ -338,25 +375,25 @@
</select>
<i data-remove="vcard-adr" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.0}}" size="{{$adr.address.0|count_characters:true}}" placeholder="{{$po_box}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.1}}" size="{{$adr.address.1|count_characters:true}}" placeholder="{{$extra}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.2}}" size="{{$adr.address.2|count_characters:true}}" placeholder="{{$street}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.3}}" size="{{$adr.address.3|count_characters:true}}" placeholder="{{$locality}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.4}}" size="{{$adr.address.4|count_characters:true}}" placeholder="{{$region}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.5}}" size="{{$adr.address.5|count_characters:true}}" placeholder="{{$zip_code}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.6}}" size="{{$adr.address.6|count_characters:true}}" placeholder="{{$country}}">
</div>
</div>
@@ -365,7 +402,7 @@
</div>
</div>
- <div class="vcard-note form-group form-vcard-note">
+ <div class="vcard-note mb-3 form-vcard-note">
<div class="form-vcard-note-wrapper">
{{if $vcard.note}}
<label>{{$note_label}}</label>
@@ -387,7 +424,7 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="affinity-tool">
<h3>
- <a data-toggle="collapse" data-parent="#contact-edit-tools" href="#affinity-tool-collapse" aria-expanded="true" aria-controls="affinity-tool-collapse">
+ <a data-bs-toggle="collapse" data-bs-parent="#contact-edit-tools" href="#affinity-tool-collapse" aria-expanded="true" aria-controls="affinity-tool-collapse">
{{$affinity}}
</a>
</h3>
@@ -395,13 +432,13 @@
<div id="affinity-tool-collapse" class="panel-collapse collapse{{if $section == 'affinity'}} show{{/if}}" role="tabpanel" aria-labelledby="affinity-tool">
<div class="section-content-tools-wrapper">
{{if $slide}}
- <div class="form-group"><strong>{{$lbl_slider}}</strong></div>
+ <div class="mb-3"><strong>{{$lbl_slider}}</strong></div>
{{$slide}}
<input id="contact-closeness-mirror" type="hidden" name="closeness" value="{{$close}}" />
{{/if}}
{{if $multiprofs}}
- <div class="form-group">
+ <div class="mb-3">
<strong>{{$lbl_vis2}}</strong>
{{$profile_select}}
</div>
@@ -418,7 +455,7 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="fitert-tool">
<h3>
- <a data-toggle="collapse" data-parent="#contact-edit-tools" href="#fitert-tool-collapse" aria-expanded="true" aria-controls="fitert-tool-collapse">
+ <a data-bs-toggle="collapse" data-bs-parent="#contact-edit-tools" href="#fitert-tool-collapse" aria-expanded="true" aria-controls="fitert-tool-collapse">
{{$connfilter_label}}
</a>
</h3>
@@ -438,85 +475,6 @@
<input type="hidden" name="{{$excl.0}}" value="{{$excl.2}}" />
{{/if}}
- {{if $rating}}
- <div class="panel">
- <div class="section-subtitle-wrapper" role="tab" id="rating-tool">
- <h3>
- <a data-toggle="collapse" data-parent="#contact-edit-tools" href="#rating-tool-collapse" aria-expanded="true" aria-controls="rating-tool-collapse">
- {{$lbl_rating}}
- </a>
- </h3>
- </div>
- <div id="rating-tool-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="rating-tool">
- <div class="section-content-tools-wrapper">
- <div class="section-content-warning-wrapper">
- {{$rating_info}}
- </div>
- <div class="form-group"><strong>{{$lbl_rating_label}}</strong></div>
- {{$rating}}
- {{include file="field_textarea.tpl" field=$rating_text}}
- <input id="contact-rating-mirror" type="hidden" name="rating" value="{{$rating_val}}" />
- <div class="settings-submit-wrapper" >
- <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
- </div>
- </div>
- </div>
- </div>
- {{/if}}
-
- {{/if}}
-
- {{if ! $is_pending}}
- <div class="panel">
- {{if $notself}}
- <div class="section-subtitle-wrapper" role="tab" id="perms-tool">
- <h3>
- <a data-toggle="collapse" data-parent="#contact-edit-tools" href="#perms-tool-collapse" aria-expanded="true" aria-controls="perms-tool-collapse">
- {{$permlbl}}
- </a>
- </h3>
- </div>
- {{/if}}
- <div id="perms-tool-collapse" class="panel-collapse collapse{{if $self || $section === 'perms'}} show{{/if}}" role="tabpanel" aria-labelledby="perms-tool">
- <div class="section-content-tools-wrapper">
- <div class="section-content-warning-wrapper">
- {{if $notself}}{{$permnote}}{{/if}}
- {{if $self}}{{$permnote_self}}{{/if}}
- </div>
-
- {{if $permcat_enable}}
- <a href="permcats" class="pull-right"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
- {{include file="field_select.tpl" field=$permcat}}
- {{/if}}
-
- <table id="perms-tool-table" class=form-group>
- <tr>
- <td></td>
- {{if $notself}}
- <td class="abook-them">{{$them}}</td>
- {{/if}}
- <td colspan="2" class="abook-me">{{$me}}</td>
- </tr>
- {{foreach $perms as $prm}}
- {{include file="field_acheckbox.tpl" field=$prm}}
- {{/foreach}}
- </table>
-
- {{if $self}}
- <div>
- <div class="section-content-info-wrapper">
- {{$autolbl}}
- </div>
- {{include file="field_checkbox.tpl" field=$autoperms}}
- </div>
- {{/if}}
-
- <div class="settings-submit-wrapper" >
- <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
- </div>
- </div>
- </div>
- </div>
{{/if}}
</div>
</form>
diff --git a/view/tpl/acl_selector.tpl b/view/tpl/acl_selector.tpl
index c58a345e5..bc33b8b6f 100644
--- a/view/tpl/acl_selector.tpl
+++ b/view/tpl/acl_selector.tpl
@@ -9,14 +9,14 @@
<a target="hubzilla-help" href="{{$helpUrl}}" class="contextual-help-tool" title="Help and documentation"><i class="fa fa-fw fa-question"></i></a>
{{/if}}
</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="section-content-wrapper">
{{if $aclModalDesc}}
<div id="acl-dialog-description" class="section-content-info-wrapper">{{$aclModalDesc}}</div>
{{/if}}
<label for="acl-select">{{if $aclModalDesc}}<i class="fa fa-send-o"></i> {{/if}}{{$select_label}}</label>
- <select id="acl-select" name="optionsRadios" class="form-control form-group">
+ <select id="acl-select" name="optionsRadios" class="form-control mb-3">
<option id="acl-showall" value="public" {{$public_selected}}>{{$showall}}</option>
<option id="acl-onlyme" value="onlyme" {{$justme_selected}}>{{$onlyme}}</option>
{{$groups}}
@@ -26,7 +26,7 @@
</select>
{{if $showallOrigin}}
- <div id="acl-info" class="form-group">
+ <div id="acl-info" class="mb-3">
<i class="fa fa-info-circle"></i>&nbsp;{{$showallOrigin}}
</div>
{{/if}}
@@ -50,7 +50,7 @@
</div>
</div>
<div class="modal-footer clear">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$aclModalDismiss}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$aclModalDismiss}}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
@@ -58,7 +58,7 @@
</form>
<script>
// compatibility issue with bootstrap v4
- //$('[data-toggle="popover"]').popover(); // Init the popover, if present
+ //$('[data-bs-toggle="popover"]').popover(); // Init the popover, if present
if(typeof acl=="undefined"){
acl = new ACL(
diff --git a/view/tpl/admin_accounts.tpl b/view/tpl/admin_accounts.tpl
index f4865f7a0..78a68a8a1 100644
--- a/view/tpl/admin_accounts.tpl
+++ b/view/tpl/admin_accounts.tpl
@@ -36,7 +36,7 @@
{{/foreach}}
</tbody>
</table>
- <div class="float-right">
+ <div class="float-end">
<a id="zar2sat" class="btn btn-sm btn-primary" href="javascript:;">{{$sel_tall}}</a>
<a id="zar2aas" class="zar2xas btn btn-sm btn-success" href="javascript:;"><i class="fa fa-check"></i> {{$sel_aprv}}</a>
<a id="zar2das" class="zar2xas btn btn-sm btn-danger" href="javascript:;"><i class="fa fa-close"></i> {{$sel_deny}}</a>
@@ -46,7 +46,7 @@
{{$no_pending}}
</div>
{{/if}}
- <div class="float-left">
+ <div class="float-start">
<a class="btn btn-sm btn-link" href="{{$get_all_link}}">{{$get_all}}</a>
</div>
<div class="clearfix"></div>
diff --git a/view/tpl/admin_plugins.tpl b/view/tpl/admin_plugins.tpl
index d8e1a6711..7d413d085 100644
--- a/view/tpl/admin_plugins.tpl
+++ b/view/tpl/admin_plugins.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $allowManageRepos}}
- <div class="pull-right">
+ <div class="float-end">
<button class="btn btn-success btn-sm" onclick="openClose('form');">{{$managerepos}}</button>
</div>
{{/if}}
@@ -20,13 +20,13 @@
{{foreach $addonrepos as $repo}}
<tr>
<td style="width: 70%;">
- <span class="pull-left">{{$repo.name}}</span><span id="update-message-{{$repo.name}}" style="margin-left: 20px;"></span>
+ <span class="float-start">{{$repo.name}}</span><span id="update-message-{{$repo.name}}" style="margin-left: 20px;"></span>
</td>
<td style="width: 15%;">
- <button class="btn btn-sm btn-primary pull-right" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-download'></i>&nbsp;{{$repoUpdateButton}}</button>
+ <button class="btn btn-sm btn-primary float-end" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-download'></i>&nbsp;{{$repoUpdateButton}}</button>
</td>
<td style="width: 15%;">
- <button class="btn btn-sm btn-danger pull-right" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-trash-o'></i>&nbsp;{{$repoRemoveButton}}</button>
+ <button class="btn btn-sm btn-danger float-end" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-trash-o'></i>&nbsp;{{$repoRemoveButton}}</button>
</td>
<div class="clear"></div>
</td></tr>
diff --git a/view/tpl/admin_plugins_addrepo.tpl b/view/tpl/admin_plugins_addrepo.tpl
index de7b465bb..e0e271d5a 100644
--- a/view/tpl/admin_plugins_addrepo.tpl
+++ b/view/tpl/admin_plugins_addrepo.tpl
@@ -3,7 +3,7 @@
<p class="descriptive-text">{{$desc}}</p>
{{include file="field_input.tpl" field=$repoURL}}
{{include file="field_input.tpl" field=$repoName}}
- <div class="btn-group pull-right">
+ <div class="btn-group float-end">
<button id="add-plugin-repo-submit" class="btn btn-primary" type="submit" name="submit" onclick="adminPluginsAddRepo(); return false;">{{$submit}}</button>
</div>
</form>
diff --git a/view/tpl/admin_profiles.tpl b/view/tpl/admin_profiles.tpl
index b3bb687c0..1df3f5492 100644
--- a/view/tpl/admin_profiles.tpl
+++ b/view/tpl/admin_profiles.tpl
@@ -1,5 +1,5 @@
<div class="generic-content-wrapper">
-<div class="section-title-wrapper"><a title="{{$new}}" class="btn btn-primary btn-sm pull-right" href="admin/profs/new"><i class="fa fa-plus-circle"></i>&nbsp;{{$new}}</a><h2>{{$title}}</h2>
+<div class="section-title-wrapper"><a title="{{$new}}" class="btn btn-primary btn-sm float-end" href="admin/profs/new"><i class="fa fa-plus-circle"></i>&nbsp;{{$new}}</a><h2>{{$title}}</h2>
<div class="clear"></div>
</div>
diff --git a/view/tpl/admin_queue.tpl b/view/tpl/admin_queue.tpl
index 9d3d848c9..1587bff47 100644
--- a/view/tpl/admin_queue.tpl
+++ b/view/tpl/admin_queue.tpl
@@ -7,7 +7,7 @@
{{foreach $entries as $e}}
-<tr><td>{{$e.total}}</td><td>{{$e.outq_posturl}}</td><td>{{$e.priority}}</td>{{if $expert}}<td><a href="admin/queue?f=&drophub={{$e.eurl}}" title="{{$nukehub}}" class="btn btn-outline-secondary"><i class="fa fa-times"></i><a></td><td><a href="admin/queue?f=&emptyhub={{$e.eurl}}" title="{{$empty}}" class="btn btn-outline-secondary"><i class="fa fa-trash-o"></i></a></td>{{/if}}</tr>
+<tr><td>{{$e.total}}</td><td>{{$e.outq_posturl}}</td><td>{{$e.priority}}</td>{{if $expert}}<td><a href="admin/queue?f=&drophub={{$e.eurl}}" title="{{$nukehub}}" class="btn btn-outline-secondary"><i class="fa fa-times"></i><a></td><td><a href="admin/queue?f=&emptyhub={{$e.eurl}}" title="{{$empty}}" class="btn btn-outline-secondary"><i class="fa fa-trash-o"></i></a></td><td><a href="admin/queue?f=&deliverhub={{$e.eurl}}" title="{{$deliverhub}}" class="btn btn-outline-secondary"><i class="fa fa-refresh"></i><a></td>{{/if}}</tr>
{{/foreach}}
</table>
diff --git a/view/tpl/admin_settings_features.tpl b/view/tpl/admin_settings_features.tpl
index 86f978e08..6c5c2c245 100644
--- a/view/tpl/admin_settings_features.tpl
+++ b/view/tpl/admin_settings_features.tpl
@@ -9,12 +9,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="{{$g}}-settings-title">
<h3>
- <a data-toggle="collapse" data-target="#{{$g}}-settings-content" href="#" aria-expanded="true" aria-controls="{{$g}}-settings-collapse">
+ <a data-bs-toggle="collapse" data-bs-target="#{{$g}}-settings-content" href="#" aria-expanded="true" aria-controls="{{$g}}-settings-collapse">
{{$f.0}}
</a>
</h3>
</div>
- <div id="{{$g}}-settings-content" class="panel-collapse collapse{{if $g == 'general'}} show{{/if}}" data-parent="#settings" role="tabpanel" aria-labelledby="{{$g}}-settings-title">
+ <div id="{{$g}}-settings-content" class="panel-collapse collapse{{if $g == 'general'}} show{{/if}}" data-bs-parent="#settings" role="tabpanel" aria-labelledby="{{$g}}-settings-title">
<div class="section-content-tools-wrapper">
{{foreach $f.1 as $fcat}}
{{include file="field_checkbox.tpl" field=$fcat.0}}
diff --git a/view/tpl/admin_site.tpl b/view/tpl/admin_site.tpl
index 5d51932eb..fa942baff 100644
--- a/view/tpl/admin_site.tpl
+++ b/view/tpl/admin_site.tpl
@@ -1,6 +1,6 @@
<div id="adminpage" class="generic-content-wrapper-styled">
<h1>{{$title}} - {{$page}}</h1>
-
+
<form action="{{$baseurl}}/admin/site" method="post">
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
@@ -24,14 +24,14 @@
{{if $directory_server}}
{{include file="field_select.tpl" field=$directory_server}}
{{/if}}
-
+
<div class="submit">
<input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}" />
</div>
-
+
<h3>{{$registration}}</h3>
{{include file="field_input.tpl" field=$register_text}}
- {{include file="field_select_grouped.tpl" field=$role}}
+ {{include file="field_select.tpl" field=$role}}
{{include file="field_select.tpl" field=$register_policy}}
{{** include file="field_checkbox.tpl" field=$register_wo_email **}}
{{include file="register_duty.tpl" field=$register_duty}}
@@ -61,11 +61,11 @@
{{include file="field_textarea.tpl" field=$incl}}
{{include file="field_textarea.tpl" field=$excl}}
{{include file="field_input.tpl" field=$abandon_days}}
-
+
<div class="submit">
- <input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}" /></div>
+ <input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}" />
</div>
-
+
<h3>{{$advanced}}</h3>
{{include file="field_checkbox.tpl" field=$sse_enabled}}
{{include file="field_input.tpl" field=$imagick_path}}
@@ -80,29 +80,29 @@
{{include file="field_input.tpl" field=$default_expire_days}}
{{include file="field_input.tpl" field=$active_expire_days}}
-
+
<div class="submit">
<input type="submit" name="page_site" class="btn btn-primary" value="{{$submit}}" />
</div>
-
+
</form>
</div>
-{{*
+{{*
COMMENTS for this template:
hilmar, 2020.01
script placed at the end
*}}
<script>
$(function(){
-
+
$("#cnftheme").colorbox({
width: 800,
onLoad: function(){
var theme = $("#id_theme :selected").val();
$("#cnftheme").attr('href',"{{$baseurl}}/admin/themes/"+theme);
- },
+ },
onComplete: function(){
- $(this).colorbox.resize();
+ $(this).colorbox.resize();
$("#colorbox form").submit(function(e){
var url = $(this).attr('action');
// can't get .serialize() to work...
@@ -114,16 +114,16 @@
data[$(this).attr('name')] = $(this).children(":selected").val();
});
console.log(":)", url, data);
-
+
$.post(url, data, function(data) {
if(timer) clearTimeout(timer);
updateInit();
$.colorbox.close();
})
-
+
return false;
});
-
+
}
});
});
diff --git a/view/tpl/album_edit.tpl b/view/tpl/album_edit.tpl
index f5495f149..95a6a7b14 100644
--- a/view/tpl/album_edit.tpl
+++ b/view/tpl/album_edit.tpl
@@ -1,6 +1,6 @@
<div id="photo-album-edit-wrapper" class="section-content-tools-wrapper">
<form name="photo-album-edit-form" id="photo-album-edit-form" action="photos/{{$nickname}}/album/{{$hexalbum}}" method="post" >
- <div class="form-group">
+ <div class="mb-3">
<label id="photo-album-edit-name-label" for="photo-album-edit-name">{{$nametext}}</label>
<input type="text" name="albumname" placeholder="{{$name_placeholder}}" value="{{$album}}" class="form-control" list="dl-album-edit" />
<datalist id="dl-album-edit">
@@ -11,9 +11,9 @@
{{/foreach}}
</datalist>
</div>
- <div class="form-group">
- <button id="photo-album-edit-submit" type="submit" name="submit" class="btn btn-primary btn-sm pull-right" />{{$submit}}</button>
- <button id="photo-album-edit-drop" type="submit" name="dropalbum" value="{{$dropsubmit}}" class="btn btn-danger btn-sm pull-left" onclick="return confirmDelete();" />{{$dropsubmit}}</button>
+ <div class="mb-3">
+ <button id="photo-album-edit-submit" type="submit" name="submit" class="btn btn-primary btn-sm float-end" />{{$submit}}</button>
+ <button id="photo-album-edit-drop" type="submit" name="dropalbum" value="{{$dropsubmit}}" class="btn btn-danger btn-sm float-start" onclick="return confirmDelete();" />{{$dropsubmit}}</button>
</div>
</form>
<div id="photo-album-edit-end" class="clear"></div>
diff --git a/view/tpl/alt_pager.tpl b/view/tpl/alt_pager.tpl
index b46dc7662..23d57327c 100644
--- a/view/tpl/alt_pager.tpl
+++ b/view/tpl/alt_pager.tpl
@@ -1,4 +1,4 @@
<div class="pager">
-{{if $has_less}}<a href="{{$url}}&page={{$prevpage}}" class="pager-prev">{{$less}}</a>{{/if}}
-{{if $has_more}}{{if $has_less}}&nbsp;|&nbsp;{{/if}}<a href="{{$url}}&page={{$nextpage}}" class="pager-next">{{$more}}</a>{{/if}}
+{{if $has_less}}<a href="{{$url}}{{$url_appendix}}page={{$prevpage}}" class="pager-prev">{{$less}}</a>{{/if}}
+{{if $has_more}}{{if $has_less}}&nbsp;|&nbsp;{{/if}}<a href="{{$url}}{{$url_appendix}}page={{$nextpage}}" class="pager-next">{{$more}}</a>{{/if}}
</div>
diff --git a/view/tpl/app.tpl b/view/tpl/app.tpl
index 774b75b31..f3f6ae58b 100644
--- a/view/tpl/app.tpl
+++ b/view/tpl/app.tpl
@@ -1,38 +1,41 @@
-{{if ! ($navapps || $order)}}
-<div class="app-container">
- <div class="app-detail{{if $deleted}} app-deleted{{/if}}">
- <a href="{{$app.url}}"{{if $app.target}} target="{{$app.target}}"{{/if}}{{if $app.desc}} title="{{$app.desc}}{{if $app.price}} ({{$app.price}}){{/if}}"{{else}}title="{{$app.name}}"{{/if}}>{{if $icon}}<i class="app-icon fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="80" height="80" />{{/if}}
- <div class="app-name" style="text-align:center;">{{$app.name}}</div>
- </a>
- </div>
- {{if $app.type !== 'system'}}
- {{if $purchase}}
- <div class="app-purchase">
- <a href="{{$app.page}}" class="btn btn-outline-secondary" title="{{$purchase}}" ><i class="fa fa-external"></i></a>
+<div class="section-subtitle-wrapper clearfix">
+ <div class="float-end">
+ {{if $app.type !== 'system'}}
+ {{if $purchase}}
+ <div class="app-purchase">
+ <a href="{{$app.page}}" class="btn btn-outline-secondary" title="{{$purchase}}" ><i class="fa fa-external"></i></a>
+ </div>
+ {{/if}}
+ {{if $action_label || $update || $delete || $feature}}
+ <div class="app-tools">
+ <form action="{{$hosturl}}appman" method="post">
+ <input type="hidden" name="papp" value="{{$app.papp}}" />
+ {{if $action_label}}<button type="submit" name="install" value="{{$action_label}}" class="btn btn-{{if $installed}}outline-secondary{{else}}success{{/if}} btn-sm" title="{{$action_label}}" ><i class="fa fa-fw {{if $installed}}fa-refresh{{else}}fa-arrow-circle-o-down{{/if}}" ></i> {{$action_label}}</button>{{/if}}
+ {{if $edit}}<input type="hidden" name="appid" value="{{$app.guid}}" /><button type="submit" name="edit" value="{{$edit}}" class="btn btn-outline-secondary btn-sm" title="{{$edit}}" ><i class="fa fa-fw fa-pencil" ></i></button>{{/if}}
+ {{if $delete}}<button type="submit" name="delete" value="{{if $deleted}}{{$undelete}}{{else}}{{$delete}}{{/if}}" class="btn btn-outline-secondary btn-sm" title="{{if $deleted}}{{$undelete}}{{else}}{{$delete}}{{/if}}" ><i class="fa fa-fw fa-trash-o drop-icons"></i></button>{{/if}}
+ {{if $settings_url}}<a href="{{$settings_url}}/?f=&rpath={{$rpath}}" class="btn btn-outline-secondary btn-sm"><i class="fa fa-fw fa-cog"></i></a>{{/if}}
+ {{if $feature}}<button type="submit" name="feature" value="nav_featured_app" class="btn btn-outline-secondary btn-sm" title="{{if $featured}}{{$remove}}{{else}}{{$add}}{{/if}}"><i class="fa fa-fw fa-star{{if $featured}} text-warning{{/if}}"></i></button>{{/if}}
+ {{if $pin}}<button type="submit" name="pin" value="nav_pinned_app" class="btn btn-outline-secondary btn-sm" title="{{if $pinned}}{{$remove_nav}}{{else}}{{$add_nav}}{{/if}}"><i class="fa fa-fw fa-thumb-tack{{if $pinned}} text-success{{/if}}"></i></button>{{/if}}
+ </form>
+ </div>
+ {{/if}}
+ {{/if}}
</div>
- {{/if}}
- {{if $action_label || $update || $delete || $feature}}
- <div class="text-center app-tools">
- <form action="{{$hosturl}}appman" method="post">
- <input type="hidden" name="papp" value="{{$app.papp}}" />
- {{if $action_label}}<button type="submit" name="install" value="{{$action_label}}" class="btn btn-outline-{{if $installed}}secondary{{else}}success{{/if}} btn-sm" title="{{$action_label}}" ><i class="fa fa-fw {{if $installed}}fa-refresh{{else}}fa-arrow-circle-o-down{{/if}}" ></i> {{$action_label}}</button>{{/if}}
- {{if $edit}}<input type="hidden" name="appid" value="{{$app.guid}}" /><button type="submit" name="edit" value="{{$edit}}" class="btn btn-outline-secondary btn-sm" title="{{$edit}}" ><i class="fa fa-fw fa-pencil" ></i></button>{{/if}}
- {{if $delete}}<button type="submit" name="delete" value="{{if $deleted}}{{$undelete}}{{else}}{{$delete}}{{/if}}" class="btn btn-outline-secondary btn-sm" title="{{if $deleted}}{{$undelete}}{{else}}{{$delete}}{{/if}}" ><i class="fa fa-fw fa-trash-o drop-icons"></i></button>{{/if}}
- {{if $feature}}<button type="submit" name="feature" value="nav_featured_app" class="btn btn-outline-secondary btn-sm" title="{{if $featured}}{{$remove}}{{else}}{{$add}}{{/if}}"><i class="fa fa-fw fa-star{{if $featured}} text-warning{{/if}}"></i></button>{{/if}}
- {{if $pin}}<button type="submit" name="pin" value="nav_pinned_app" class="btn btn-outline-secondary btn-sm" title="{{if $pinned}}{{$remove_nav}}{{else}}{{$add_nav}}{{/if}}"><i class="fa fa-fw fa-thumb-tack{{if $pinned}} text-success{{/if}}"></i></button>{{/if}}
- {{if $settings_url}}<a href="{{$settings_url}}/?f=&rpath={{$rpath}}" class="btn btn-outline-secondary btn-sm"><i class="fa fa-fw fa-cog"></i></a>{{/if}}
- </form>
+ <h3>{{$app.name}}{{if $app.price}} ({{$app.price}}){{/if}}</h3>
+</div>
+<div class="section-content-tools-wrapper container">
+ <div class="{{if $deleted}} app-deleted{{/if}} mb-3">
+ <a class="app-icon app-link" href="{{$app.url}}"{{if $app.target}} target="{{$app.target}}"{{/if}}{{if $installed}} data-papp="{{$app.papp}}" data-icon="{{$icon}}" data-url="{{$app.url}}" data-name="{{$app.name}}"{{/if}}>
+ {{if $icon}}
+ <i class="app-icon fa fa-fw fa-{{$icon}}"></i>
+ {{else}}
+ <img src="{{$app.photo}}" width="80" height="80" />
+ {{/if}}
+ </a>
+ <div class="app-info">
+ {{if $app.desc}}{{$app.desc}}{{/if}}
+ </div>
</div>
- {{/if}}
- {{/if}}
</div>
-{{/if}}
-{{if $navapps}}
-<a class="dropdown-item{{if $app.active}} active{{/if}}" href="{{$app.url}}">{{if $icon}}<i class="generic-icons-nav fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" style="margin-right:9px;"/>{{/if}}{{$app.name}}</a>
-{{/if}}
-{{if $order}}
-<a href="{{$hosturl}}appman/{{$app.guid}}/moveup{{if $mode == 'nav-order-pinned'}}/nav_pinned_app{{else}}/nav_featured_app{{/if}}" class="btn btn-outline-secondary btn-sm" style="margin-bottom: 5px;"><i class="generic-icons-nav fa fa-fw fa-arrow-up"></i></a>
-<a href="{{$hosturl}}appman/{{$app.guid}}/movedown{{if $mode == 'nav-order-pinned'}}/nav_pinned_app{{else}}/nav_featured_app{{/if}}" class="btn btn-outline-secondary btn-sm" style="margin-bottom: 5px;"><i class="generic-icons-nav fa fa-fw fa-arrow-down"></i></a>
-{{if $icon}}<i class="generic-icons-nav fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" style="margin-right:9px;"/>{{/if}}{{$app.name}}<br>
-{{/if}}
+
diff --git a/view/tpl/app_create.tpl b/view/tpl/app_create.tpl
index 5075ce5e2..0a455d07f 100644
--- a/view/tpl/app_create.tpl
+++ b/view/tpl/app_create.tpl
@@ -33,7 +33,7 @@
{{include file="field_textarea.tpl" field=$embed}}
{{/if}}
- <button class="btn btn-primary float-right" type="submit" name="submit" value="{{$submit}}">{{$submit}}</button>
+ <button class="btn btn-primary float-end" type="submit" name="submit" value="{{$submit}}">{{$submit}}</button>
</form>
</div>
diff --git a/view/tpl/app_inline.tpl b/view/tpl/app_inline.tpl
new file mode 100644
index 000000000..fc3675380
--- /dev/null
+++ b/view/tpl/app_inline.tpl
@@ -0,0 +1,26 @@
+<h3 class="mb-3">{{$app.name}}{{if $app.price}} ({{$app.price}}){{/if}}</h3>
+<a class="app-icon" href="{{$app.url}}" >
+ {{if $icon}}
+ <i class="app-icon fa fa-fw fa-{{$icon}} mb-3"></i>
+ {{else}}
+ <img src="{{$app.photo}}" width="80" height="80" class="mb-3" />
+ {{/if}}
+</a>
+<div class="mb-3">
+ {{if $app.desc}}{{$app.desc}}{{/if}}
+</div>
+{{if $action_label}}
+<div class="app-tools">
+ <form action="{{$hosturl}}appman" method="post">
+ <input type="hidden" name="papp" value="{{$app.papp}}" />
+ {{if $action_label}}
+ <button type="submit" name="install" value="{{$action_label}}" class="btn btn-{{if $installed}}outline-secondary{{else}}success{{/if}} btn-sm" title="{{$action_label}}" ><i class="fa fa-fw {{if $installed}}fa-refresh{{else}}fa-arrow-circle-o-down{{/if}}" ></i> {{$action_label}}</button>
+ {{/if}}
+ {{if $purchase && $app.type !== 'system'}}
+ <a href="{{$app.page}}" class="btn btn-sm btn-link" title="{{$purchase}}" ><i class="fa fa-external-link"></i></a>
+ {{/if}}
+ </form>
+</div>
+{{/if}}
+
+
diff --git a/view/tpl/app_install.tpl b/view/tpl/app_install.tpl
new file mode 100644
index 000000000..16b89d350
--- /dev/null
+++ b/view/tpl/app_install.tpl
@@ -0,0 +1,13 @@
+<div>
+ <h2>{{$papp.name}}</h2>
+</div>
+<div class="mb-3">
+ {{$papp.desc}}
+</div>
+<form action="appman" method="post">
+ <input type="hidden" name="papp" value="{{$papp.papp}}" />
+ <input type="hidden" name="return_path" value="{{$return_path}}" />
+ <button type="submit" name="install" value="install" class="btn btn-success">
+ <i class="fa fa-fw fa-arrow-circle-o-down"></i> {{$install}}
+ </button>
+</form>
diff --git a/view/tpl/app_nav.tpl b/view/tpl/app_nav.tpl
index 817c74763..c3a7bc8b6 100644
--- a/view/tpl/app_nav.tpl
+++ b/view/tpl/app_nav.tpl
@@ -1 +1 @@
-<a class="navbar-app nav-link{{if $app.active}} active{{/if}}" href="{{$app.url}}" title="{{$app.name}}" >{{if $icon}}<i class="fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" />{{/if}}<span class="d-lg-none">{{$app.name}}</span></a>
+<a class="dropdown-item{{if $app.active}} active{{/if}}" href="{{$app.url}}" data-papp="{{$app.papp}}" data-icon="{{$icon}}" data-url="{{$app.url}}" data-name="{{$app.name}}">{{if $icon}}<i class="generic-icons-nav fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" style="margin-right:9px;"/>{{/if}}{{$app.name}}</a>
diff --git a/view/tpl/app_nav_pinned.tpl b/view/tpl/app_nav_pinned.tpl
new file mode 100644
index 000000000..bf942dd48
--- /dev/null
+++ b/view/tpl/app_nav_pinned.tpl
@@ -0,0 +1,9 @@
+<a class="navbar-app nav-link{{if $app.active}} active{{/if}}" href="{{$app.url}}" title="{{$app.name}}">
+ {{if $icon}}
+ <i class="fa fa-fw fa-{{$icon}}"></i>
+ <span class="d-lg-none">{{$app.name}}</span>
+ {{else}}
+ <img src="{{$app.photo}}" width="16" height="16" />
+ <div class="d-lg-none d-inline-block" style="margin-left: 9px">{{$app.name}}</div>
+ {{/if}}
+</a>
diff --git a/view/tpl/app_order.tpl b/view/tpl/app_order.tpl
new file mode 100644
index 000000000..53c770cb7
--- /dev/null
+++ b/view/tpl/app_order.tpl
@@ -0,0 +1,3 @@
+<a href="{{$hosturl}}appman/{{$app.guid}}/moveup{{if $mode == 'nav-order-pinned'}}/nav_pinned_app{{else}}/nav_featured_app{{/if}}" class="btn btn-outline-secondary btn-sm" style="margin-bottom: 5px;"><i class="generic-icons-nav fa fa-fw fa-arrow-up"></i></a>
+<a href="{{$hosturl}}appman/{{$app.guid}}/movedown{{if $mode == 'nav-order-pinned'}}/nav_pinned_app{{else}}/nav_featured_app{{/if}}" class="btn btn-outline-secondary btn-sm" style="margin-bottom: 5px;"><i class="generic-icons-nav fa fa-fw fa-arrow-down"></i></a>
+{{if $icon}}<i class="generic-icons-nav fa fa-fw fa-{{$icon}}"></i>{{else}}<img src="{{$app.photo}}" width="16" height="16" style="margin-right:9px;"/>{{/if}}{{$app.name}}<br>
diff --git a/view/tpl/attach_edit.tpl b/view/tpl/attach_edit.tpl
index 62442ff7a..0de4404ec 100644
--- a/view/tpl/attach_edit.tpl
+++ b/view/tpl/attach_edit.tpl
@@ -5,7 +5,7 @@
<input type="hidden" name="fileid" value="{{$file.id}}" />
{{if !$isadir}}{{include file="field_checkbox.tpl" field=$notify}}{{/if}}
{{if $isadir}}{{include file="field_checkbox.tpl" field=$recurse}}{{/if}}
- <div id="attach-edit-tools-share" class="btn-group form-group">
+ <div id="attach-edit-tools-share" class="btn-group mb-3">
{{if !$isadir}}
<a href="/rpost?attachment=[attachment]{{$file.hash}},{{$file.revision}}[/attachment]" id="attach-btn" class="btn btn-outline-secondary btn-sm" title="{{$attach_btn_title}}">
<i class="fa fa-share-square-o jot-icons"></i>
@@ -15,15 +15,15 @@
<i class="fa fa-link jot-icons"></i>
</button>
</div>
- <div id="attach-edit-perms" class="btn-group pull-right">
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" title="{{$permset}}" type="button">
+ <div id="attach-edit-perms" class="btn-group float-end">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$permset}}" type="button">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}} jot-icons"></i>
</button>
<button id="dbtn-submit" class="btn btn-primary btn-sm" type="submit" name="submit">
{{$submit}}
</button>
</div>
- <div id="link-code" class="form-group">
+ <div id="link-code" class="mb-3">
<label for="">{{$cpldesc}}</label>
<input type="text" class="form-control" id="linkpasteinput" name="cutpasteextlink" value="{{$cloudpath}}" onclick="this.select();"/>
</div>
diff --git a/view/tpl/blocklist.tpl b/view/tpl/blocklist.tpl
index 7f400bba2..0d859166e 100644
--- a/view/tpl/blocklist.tpl
+++ b/view/tpl/blocklist.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $editor}}
- <div class="pull-right">
+ <div class="float-end">
<button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('block-editor');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
</div>
{{/if}}
diff --git a/view/tpl/cal_calendar.tpl b/view/tpl/cal_calendar.tpl
index 93ebaa235..a928e98f6 100644
--- a/view/tpl/cal_calendar.tpl
+++ b/view/tpl/cal_calendar.tpl
@@ -87,7 +87,7 @@ function updateSize() {
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="float-right">
+ <div class="float-end">
<div class="btn-group">
<button id="prev-btn" class="btn btn-outline-secondary btn-sm" title="{{$prev}}"><i class="fa fa-backward"></i></button>
<button id="today-btn" class="btn btn-outline-secondary btn-sm" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="fa fa-bullseye" style="display: none; width: 1rem;"></i></button>
diff --git a/view/tpl/cdav_addressbook.tpl b/view/tpl/cdav_addressbook.tpl
index 587a95caa..ab0b43ffc 100644
--- a/view/tpl/cdav_addressbook.tpl
+++ b/view/tpl/cdav_addressbook.tpl
@@ -69,21 +69,21 @@ $(document).ready(function() {
});
</script>
-<div id="template-form-vcard-org" class="form-group form-vcard-org">
- <div class="form-group form-vcard-org">
+<div id="template-form-vcard-org" class="mb-3 form-vcard-org">
+ <div class="mb-3 form-vcard-org">
<input type="text" name="org" value="" placeholder="{{$org_label}}">
<i data-remove="vcard-org" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
-<div id="template-form-vcard-title" class="form-group form-vcard-title">
- <div class="form-group form-vcard-title">
+<div id="template-form-vcard-title" class="mb-3 form-vcard-title">
+ <div class="mb-3 form-vcard-title">
<input type="text" name="title" value="" placeholder="{{$title_label}}">
<i data-remove="vcard-title" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
-<div id="template-form-vcard-tel" class="form-group form-vcard-tel">
+<div id="template-form-vcard-tel" class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value="CELL">{{$mobile}}</option>
<option value="HOME">{{$home}}</option>
@@ -94,7 +94,7 @@ $(document).ready(function() {
<i data-remove="vcard-tel" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
-<div id="template-form-vcard-email" class="form-group form-vcard-email">
+<div id="template-form-vcard-email" class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -104,7 +104,7 @@ $(document).ready(function() {
<i data-remove="vcard-email" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
-<div id="template-form-vcard-impp" class="form-group form-vcard-impp">
+<div id="template-form-vcard-impp" class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -114,7 +114,7 @@ $(document).ready(function() {
<i data-remove="vcard-impp" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
-<div id="template-form-vcard-url" class="form-group form-vcard-url">
+<div id="template-form-vcard-url" class="mb-3 form-vcard-url">
<select name="url_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -124,8 +124,8 @@ $(document).ready(function() {
<i data-remove="vcard-url" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
-<div id="template-form-vcard-adr" class="form-group form-vcard-adr">
- <div class="form-group">
+<div id="template-form-vcard-adr" class="mb-3 form-vcard-adr">
+ <div class="mb-3">
<select name="adr_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -134,30 +134,30 @@ $(document).ready(function() {
<label>{{$adr_label}}</label>
<i data-remove="vcard-adr" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$po_box}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$extra}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$street}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$locality}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$region}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$zip_code}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="" value="" placeholder="{{$country}}">
</div>
</div>
-<div id="template-form-vcard-note" class="form-group form-vcard-note">
+<div id="template-form-vcard-note" class="mb-3 form-vcard-note">
<label>{{$note_label}}</label>
<i data-remove="vcard-note" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
<textarea name="note" class="form-control"></textarea>
@@ -165,15 +165,15 @@ $(document).ready(function() {
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <button type="button" class="btn btn-success btn-sm float-right" onclick="openClose('create_form')"><i class="fa fa-plus-circle"></i> {{$add_card}}</button>
+ <button type="button" class="btn btn-success btn-sm float-end" onclick="openClose('create_form')"><i class="fa fa-plus-circle"></i> {{$add_card}}</button>
<h2>{{$displayname}}</h2>
</div>
<div id="create_form" class="section-content-tools-wrapper">
<form id="card_form_new" method="post" action="">
<input type="hidden" name="target" value="{{$id}}">
- <div class="dropdown pull-right">
- <button data-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown float-end">
+ <button data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item add-vcard-org add-field" style="display: none" href="#" data-add="vcard-org" data-id="new">{{$org_label}}</a>
<a class="dropdown-item add-vcard-title add-field" style="display: none" href="#" data-add="vcard-title" data-id="new">{{$title_label}}</a>
<a class="dropdown-item add-vcard-tel add-field" href="#" data-add="vcard-tel" data-id="new">{{$tel_label}}</a>
@@ -185,35 +185,35 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-fn-create form-group">
+ <div class="vcard-fn-create mb-3">
<div class="form-vcard-fn-wrapper">
- <div class="form-group form-vcard-fn">
+ <div class="mb-3 form-vcard-fn">
<div class="vcard-nophoto"><i class="fa fa-user"></i></div><input type="text" name="fn" value="" placeholder="{{$name_label}}">
</div>
</div>
</div>
- <div class="vcard-org form-group">
+ <div class="vcard-org mb-3">
<div class="form-vcard-org-wrapper">
- <div class="form-group form-vcard-org">
+ <div class="mb-3 form-vcard-org">
<input type="text" name="org" value="" placeholder="{{$org_label}}">
<i data-remove="vcard-org" data-id="new" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
</div>
- <div class="vcard-title form-group">
+ <div class="vcard-title mb-3">
<div class="form-vcard-title-wrapper">
- <div class="form-group form-vcard-title">
+ <div class="mb-3 form-vcard-title">
<input type="text" name="title" value="" placeholder="{{$title_label}}">
<i data-remove="vcard-title" data-id="new" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
</div>
</div>
- <div class="vcard-tel form-group">
+ <div class="vcard-tel mb-3">
<div class="form-vcard-tel-wrapper">
- <div class="form-group form-vcard-tel">
+ <div class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value="CELL">{{$mobile}}</option>
<option value="HOME">{{$home}}</option>
@@ -227,9 +227,9 @@ $(document).ready(function() {
</div>
- <div class="vcard-email form-group">
+ <div class="vcard-email mb-3">
<div class="form-vcard-email-wrapper">
- <div class="form-group form-vcard-email">
+ <div class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -241,27 +241,27 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-impp form-group">
+ <div class="vcard-impp mb-3">
<div class="form-vcard-impp-wrapper">
</div>
</div>
- <div class="vcard-url form-group">
+ <div class="vcard-url mb-3">
<div class="form-vcard-url-wrapper">
</div>
</div>
- <div class="vcard-adr form-group">
+ <div class="vcard-adr mb-3">
<div class="form-vcard-adr-wrapper">
</div>
</div>
- <div class="vcard-note form-group">
+ <div class="vcard-note mb-3">
<div class="form-vcard-note-wrapper">
</div>
</div>
- <button type="submit" name="create" value="create_card" class="btn btn-primary btn-sm pull-right">{{$create}}</button>
+ <button type="submit" name="create" value="create_card" class="btn btn-primary btn-sm float-end">{{$create}}</button>
<button type="button" class="btn btn-outline-secondary btn-sm" onclick="openClose('create_form')">{{$cancel}}</button>
<div class="clear"></div>
</form>
@@ -273,9 +273,9 @@ $(document).ready(function() {
<input type="hidden" name="uri" value="{{$card.uri}}">
<div class="section-content-wrapper-np">
<div id="vcard-cancel-{{$card.id}}" class="vcard-cancel vcard-cancel-btn" data-id="{{$card.id}}" data-action="cancel"><i class="fa fa-close"></i></div>
- <div id="vcard-add-field-{{$card.id}}" class="dropdown pull-right vcard-add-field">
- <button data-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div id="vcard-add-field-{{$card.id}}" class="dropdown float-end vcard-add-field">
+ <button data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item add-vcard-org add-field"{{if $card.org}} style="display: none"{{/if}} href="#" data-add="vcard-org" data-id="{{$card.id}}">{{$org_label}}</a>
<a class="dropdown-item add-vcard-title add-field"{{if $card.title}} style="display: none"{{/if}} href="#" data-add="vcard-title" data-id="{{$card.id}}">{{$title_label}}</a>
<a class="dropdown-item add-vcard-tel add-field" href="#" data-add="vcard-tel" data-id="{{$card.id}}">{{$tel_label}}</a>
@@ -298,10 +298,10 @@ $(document).ready(function() {
</div>
<div id="vcard-info-{{$card.id}}" class="vcard-info section-content-wrapper">
- <div class="vcard-org form-group">
+ <div class="vcard-org mb-3">
<div class="form-vcard-org-wrapper">
{{if $card.org}}
- <div class="form-group form-vcard-org">
+ <div class="mb-3 form-vcard-org">
<input type="text" name="org" value="{{$card.org}}" size="{{$card.org|count_characters:true}}" placeholder="{{$org_label}}">
<i data-remove="vcard-org" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
@@ -309,10 +309,10 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-title form-group">
+ <div class="vcard-title mb-3">
<div class="form-vcard-title-wrapper">
{{if $card.title}}
- <div class="form-group form-vcard-title">
+ <div class="mb-3 form-vcard-title">
<input type="text" name="title" value="{{$card.title}}" size="{{$card.title|count_characters:true}}" placeholder="{{$title_label}}">
<i data-remove="vcard-title" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
@@ -321,11 +321,11 @@ $(document).ready(function() {
</div>
- <div class="vcard-tel form-group">
+ <div class="vcard-tel mb-3">
<div class="form-vcard-tel-wrapper">
{{if $card.tels}}
{{foreach $card.tels as $tel}}
- <div class="form-group form-vcard-tel">
+ <div class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value=""{{if $tel.type.0 != 'CELL' && $tel.type.0 != 'HOME' && $tel.type.0 != 'WORK' && $tel.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$tel.type.1}}</option>
<option value="CELL"{{if $tel.type.0 == 'CELL'}} selected="selected"{{/if}}>{{$mobile}}</option>
@@ -342,11 +342,11 @@ $(document).ready(function() {
</div>
- <div class="vcard-email form-group">
+ <div class="vcard-email mb-3">
<div class="form-vcard-email-wrapper">
{{if $card.emails}}
{{foreach $card.emails as $email}}
- <div class="form-group form-vcard-email">
+ <div class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value=""{{if $email.type.0 != 'HOME' && $email.type.0 != 'WORK' && $email.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$email.type.1}}</option>
<option value="HOME"{{if $email.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -361,11 +361,11 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-impp form-group">
+ <div class="vcard-impp mb-3">
<div class="form-vcard-impp-wrapper">
{{if $card.impps}}
{{foreach $card.impps as $impp}}
- <div class="form-group form-vcard-impp">
+ <div class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value=""{{if $impp.type.0 != 'HOME' && $impp.type.0 != 'WORK' && $impp.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$impp.type.1}}</option>
<option value="HOME"{{if $impp.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -380,11 +380,11 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-url form-group">
+ <div class="vcard-url mb-3">
<div class="form-vcard-url-wrapper">
{{if $card.urls}}
{{foreach $card.urls as $url}}
- <div class="form-group form-vcard-url">
+ <div class="mb-3 form-vcard-url">
<select name="url_type[]">
<option value=""{{if $url.type.0 != 'HOME' && $url.type.0 != 'WORK' && $url.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$url.type.1}}</option>
<option value="HOME"{{if $url.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -399,12 +399,12 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-adr form-group">
+ <div class="vcard-adr mb-3">
<div class="form-vcard-adr-wrapper">
{{if $card.adrs}}
{{foreach $card.adrs as $adr}}
- <div class="form-group form-vcard-adr">
- <div class="form-group">
+ <div class="mb-3 form-vcard-adr">
+ <div class="mb-3">
<label>{{$adr_label}}</label>
<select name="adr_type[]">
<option value=""{{if $adr.type.0 != 'HOME' && $adr.type.0 != 'WORK' && $adr.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$adr.type.1}}</option>
@@ -414,25 +414,25 @@ $(document).ready(function() {
</select>
<i data-remove="vcard-adr" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.0}}" size="{{$adr.address.0|count_characters:true}}" placeholder="{{$po_box}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.1}}" size="{{$adr.address.1|count_characters:true}}" placeholder="{{$extra}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.2}}" size="{{$adr.address.2|count_characters:true}}" placeholder="{{$street}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.3}}" size="{{$adr.address.3|count_characters:true}}" placeholder="{{$locality}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.4}}" size="{{$adr.address.4|count_characters:true}}" placeholder="{{$region}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.5}}" size="{{$adr.address.5|count_characters:true}}" placeholder="{{$zip_code}}">
</div>
- <div class="form-group">
+ <div class="mb-3">
<input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.6}}" size="{{$adr.address.6|count_characters:true}}" placeholder="{{$country}}">
</div>
</div>
@@ -441,7 +441,7 @@ $(document).ready(function() {
</div>
</div>
- <div class="vcard-note form-group form-vcard-note">
+ <div class="vcard-note mb-3 form-vcard-note">
<div class="form-vcard-note-wrapper">
{{if $card.note}}
<label>{{$note_label}}</label>
@@ -452,7 +452,7 @@ $(document).ready(function() {
</div>
- <button type="submit" name="update" value="update_card" class="btn btn-primary btn-sm pull-right">{{$update}}</button>
+ <button type="submit" name="update" value="update_card" class="btn btn-primary btn-sm float-end">{{$update}}</button>
<button type="submit" name="delete" value="delete_card" class="btn btn-danger btn-sm">{{$delete}}</button>
<button type="button" class="btn btn-outline-secondary btn-sm vcard-cancel-btn" data-id="{{$card.id}}" data-action="cancel">{{$cancel}}</button>
<div class="clear"></div>
diff --git a/view/tpl/cdav_calendar.tpl b/view/tpl/cdav_calendar.tpl
index 28cd11b2e..2d6853513 100644
--- a/view/tpl/cdav_calendar.tpl
+++ b/view/tpl/cdav_calendar.tpl
@@ -24,16 +24,16 @@ $(document).ready(function() {
calendar = new FullCalendar.Calendar(calendarEl, {
plugins: [ 'interaction', 'dayGrid', 'timeGrid', 'list' ],
eventSources: [ {{$sources}} ],
-
+
timeZone: '{{$timezone}}',
locale: '{{$lang}}',
eventTextColor: 'white',
header: false,
-
+
height: 'auto',
-
+
firstDay: {{$first_day}},
defaultView: default_view,
@@ -59,7 +59,7 @@ $(document).ready(function() {
allDayText: aStr['allday'],
snapDuration: '00:05:00',
-
+
dateClick: function(info) {
if(new_event.id) {
var event_poi = calendar.getEventById(new_event.id);
@@ -114,7 +114,7 @@ $(document).ready(function() {
if(event.extendedProps.plink) {
if(! $('#l2s').length)
- $('#id_title_wrapper').prepend('<span id="l2s" class="float-right"></span>');
+ $('#id_title_wrapper').prepend('<span id="l2s" class="float-end"></span>');
$('#l2s').html('<a href="' + event.extendedProps.plink[0] + '" target="_blank"><i class="fa fa-external-link"></i> ' + event.extendedProps.plink[1] + '</a>');
}
@@ -151,7 +151,7 @@ $(document).ready(function() {
event_poi.remove();
new_event = {};
}
-
+
var calendar_id = ((event.extendedProps.calendar_id.constructor === Array) ? event.extendedProps.calendar_id[0] + ':' + event.extendedProps.calendar_id[1] : event.extendedProps.calendar_id);
if(!event.extendedProps.recurrent) {
@@ -209,7 +209,7 @@ $(document).ready(function() {
$('#calendar_select').val(calendar_id).attr('disabled', true).trigger('change');
}
},
-
+
eventResize: function(info) {
var event = info.event._def;
@@ -258,13 +258,13 @@ $(document).ready(function() {
});
}
},
-
+
eventDrop: function(info) {
var event = info.event._def;
var dtstart = new Date(info.event._instance.range.start);
var dtend = new Date(info.event._instance.range.end);
-
+
$('#id_title').val(event.title);
$('#id_dtstart').val(dtstart.toUTCString().slice(0, -4));
$('#id_dtend').val(dtend.toUTCString().slice(0, -4));
@@ -316,24 +316,24 @@ $(document).ready(function() {
$('#today-btn > i').show();
}
}
-
+
});
-
+
calendar.render();
$('#title').text(calendar.view.title);
$('#view_selector').html(views[calendar.view.type]);
-
+
$('#today-btn').on('click', function() {
calendar.today();
$('#title').text(calendar.view.title);
});
-
+
$('#prev-btn').on('click', function() {
calendar.prev();
$('#title').text(calendar.view.title);
});
-
+
$('#next-btn').on('click', function() {
calendar.next();
$('#title').text(calendar.view.title);
@@ -345,7 +345,7 @@ $(document).ready(function() {
else
$('#dbtn-acl, #id_categories_wrapper').addClass('d-none');
});
-
+
$('.color-edit').colorpicker({ input: '.color-edit-input' });
$(document).on('click','#fullscreen-btn', updateSize);
@@ -358,7 +358,7 @@ $(document).ready(function() {
if(resource !== null) {
$('.section-content-tools-wrapper, #event_form_wrapper').show();
- $('#id_title_wrapper').prepend('<span id="l2s" class="float-right"></span>');
+ $('#id_title_wrapper').prepend('<span id="l2s" class="float-end"></span>');
$('#l2s').html('<a href="' + resource.plink[0] + '" target="_blank"><i class="fa fa-external-link"></i> ' + resource.plink[1] + '</a>');
event_id = resource.id;
@@ -481,9 +481,13 @@ function on_submit() {
})
.done(function() {
var eventSource = calendar.getEventSourceById('channel_calendar');
- eventSource.refetch();
+ if (eventSource) {
+ eventSource.refetch();
+ }
+ else {
+ $.jGrowl('{{$disabled_warning}}', { sticky: false, theme: 'notice', life: 10000 });
+ }
reset_form();
-
});
}
@@ -503,9 +507,13 @@ function on_submit() {
.done(function() {
var parts = $('#calendar_select').val().split(':');
var eventSource = calendar.getEventSourceById(parts[0]);
- eventSource.refetch();
+ if (eventSource) {
+ eventSource.refetch();
+ }
+ else {
+ $.jGrowl('{{$disabled_warning}}', { sticky: false, theme: 'notice', life: 10000 });
+ }
reset_form();
-
});
}
}
@@ -549,7 +557,7 @@ function reset_form() {
event_poi.remove();
new_event = {};
}
-
+
if($('#more_block').hasClass('open'))
on_more();
}
@@ -573,9 +581,9 @@ function exportDate() {
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="float-right">
+ <div class="float-end">
<div class="dropdown">
- <button id="view_selector" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown"></button>
+ <button id="view_selector" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown"></button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" onclick="changeView('dayGridMonth'); return false;">{{$month}}</a></li>
<a class="dropdown-item" href="#" onclick="changeView('timeGridWeek'); return false;">{{$week}}</a></li>
@@ -611,7 +619,7 @@ function exportDate() {
<form id="event_form" method="post" action="" class="acl-form" data-form_id="event_form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
{{include file="field_input.tpl" field=$title}}
<label for="calendar_select">{{$calendar_select_label}}</label>
- <select id="calendar_select" name="target" class="form-control form-group">
+ <select id="calendar_select" name="target" class="form-control mb-3">
<optgroup label="{{$calendar_optiopns_label.0}}">
{{foreach $channel_calendars as $channel_calendar}}
<option value="channel_calendar">{{$channel_calendar.displayname}}</option>
@@ -628,7 +636,7 @@ function exportDate() {
{{/if}}
<div id="more_block" style="display: none;">
{{if $catsenabled}}
- <div id="id_categories_wrapper" class="form-group">
+ <div id="id_categories_wrapper" class="mb-3">
<label id="label_categories" for="id_categories">{{$categories_label}}</label>
<input name="categories" id="id_categories" class="form-control" type="text" value="{{$categories}}" data-role="cat-tagsinput" />
</div>
@@ -638,10 +646,10 @@ function exportDate() {
{{include file="field_textarea.tpl" field=$description}}
{{include file="field_textarea.tpl" field=$location}}
</div>
- <div class="form-group">
- <div class="pull-right">
+ <div class="mb-3">
+ <div class="float-end">
<button id="event_more" type="button" class="btn btn-outline-secondary btn-sm"><i class="fa fa-caret-down"></i> {{$more}}</button>
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm d-none" type="button" data-toggle="modal" data-target="#aclModal"><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm d-none" type="button" data-bs-toggle="modal" data-bs-target="#aclModal"><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
<button id="event_submit" type="button" value="" class="btn btn-primary btn-sm"></button>
</div>
diff --git a/view/tpl/cdav_widget_addressbook.tpl b/view/tpl/cdav_widget_addressbook.tpl
index 80b5feaf6..fdaa26710 100644
--- a/view/tpl/cdav_widget_addressbook.tpl
+++ b/view/tpl/cdav_widget_addressbook.tpl
@@ -2,9 +2,9 @@
<h3>{{$addressbooks_label}}</h3>
{{foreach $addressbooks as $addressbook}}
<div id="addressbook-{{$addressbook.id}}" class="ml-3">
- <div class="form-group">
+ <div class="mb-3">
<i class="fa fa-user generic-icons"></i><a href="/cdav/addressbook/{{$addressbook.id}}">{{$addressbook.displayname}}</a>
- <div class="float-right">
+ <div class="float-end">
<i id="edit-icon" class="fa fa-pencil fakelink generic-icons" onclick="openClose('edit-addressbook-{{$addressbook.id}}')"></i>
<a href="/cdav/addressbooks/{{$addressbook.ownernick}}/{{$addressbook.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons"></i></a>
<a href="#" onclick="dropItem('/cdav/addressbook/drop/{{$addressbook.id}}', '#addressbook-{{$addressbook.id}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
@@ -13,11 +13,11 @@
<div id="edit-addressbook-{{$addressbook.id}}" class="sub-menu" style="display: none;">
<form id="edit-addressbook-{{$addressbook.id}}" method="post" action="">
<label for="edit-{{$addressbook.id}}">{{$edit_label}}</label>
- <div id="edit-form-{{$addressbook.id}}" class="form-group">
+ <div id="edit-form-{{$addressbook.id}}" class="mb-3">
<input id="id-{{$addressbook.id}}" name="id" type="hidden" value="{{$addressbook.id}}">
<input id="edit-{{$addressbook.id}}" name="{DAV:}displayname" type="text" value="{{$addressbook.displayname}}" class="form-control">
</div>
- <div class="form-group">
+ <div class="mb-3">
<button type="submit" name="edit" value="edit" class="btn btn-primary btn-sm">{{$edit}}</button>
</div>
</form>
@@ -35,8 +35,8 @@
<div id="create-addressbook" class="sub-menu-wrapper">
<div class="sub-menu">
<form method="post" action="">
- <div class="form-group">
- <input id="create" name="{DAV:}displayname" type="text" placeholder="{{$create_placeholder}}" class="form-control form-group">
+ <div class="mb-3">
+ <input id="create" name="{DAV:}displayname" type="text" placeholder="{{$create_placeholder}}" class="form-control mb-3">
<button type="submit" name="create" value="create" class="btn btn-primary btn-sm">{{$create}}</button>
</div>
</form>
@@ -48,7 +48,7 @@
<div id="upload-form" class="sub-menu-wrapper">
<div class="sub-menu">
<form enctype="multipart/form-data" method="post" action="">
- <div class="form-group">
+ <div class="mb-3">
<select id="import" name="target" class="form-control">
<option value="">{{$import_placeholder}}</option>
{{foreach $addressbooks as $addressbook}}
@@ -56,7 +56,7 @@
{{/foreach}}
</select>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control-file w-100" id="addressbook-upload-choose" type="file" name="userfile" />
</div>
<button class="btn btn-primary btn-sm" type="submit" name="a_upload" value="a_upload">{{$upload}}</button>
diff --git a/view/tpl/cdav_widget_calendar.tpl b/view/tpl/cdav_widget_calendar.tpl
index 93ff50fd3..c27f4789e 100644
--- a/view/tpl/cdav_widget_calendar.tpl
+++ b/view/tpl/cdav_widget_calendar.tpl
@@ -2,9 +2,9 @@
<h3>{{$channel_calendars_label}}</h3>
{{foreach $channel_calendars as $channel_calendar}}
<div id="calendar-{{$channel_calendar.calendarid}}">
- <div class="ml-3{{if !$channel_calendar@last}} form-group{{/if}}">
+ <div class="ml-3{{if !$channel_calendar@last}} mb-3{{/if}}">
<i id="calendar-btn-{{$channel_calendar.calendarid}}" class="fa {{if $channel_calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$channel_calendar.json_source}}', '{{$channel_calendar.color}}', {{$channel_calendar.editable}})" style="color: {{$channel_calendar.color}};"></i>{{$channel_calendar.displayname}}
- <div class="float-right">
+ <div class="float-end">
<a href="#" onclick="exportDate(); return false;"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons-right"></i></a>
</div>
</div>
@@ -17,9 +17,9 @@
<h3>{{$my_calendars_label}}</h3>
{{foreach $my_calendars as $calendar}}
<div id="calendar-{{$calendar.calendarid}}">
- <div class="ml-3{{if !$calendar@last}} form-group{{/if}}">
+ <div class="ml-3{{if !$calendar@last}} mb-3{{/if}}">
<i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}fa-calendar-check-o{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}}
- <div class="float-right">
+ <div class="float-end">
<i id="edit-icon" class="fa fa-pencil fakelink generic-icons" onclick="openClose('edit-calendar-{{$calendar.calendarid}}')"></i>
<a href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons"></i></a>
<i id="share-icon" class="fa fa-share-alt fakelink generic-icons" onclick="openClose('share-calendar-{{$calendar.calendarid}}')"></i>
@@ -28,9 +28,9 @@
<div id="share-calendar-{{$calendar.calendarid}}" class="sub-menu" style="display: none; border-color: {{$calendar.color}};">
{{if $calendar.sharees}}
{{foreach $calendar.sharees as $sharee}}
- <div id="sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}" class="form-group">
+ <div id="sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}" class="mb-3">
<i class="fa fa-share generic-icons"></i>{{$sharee.name}}&nbsp;{{$sharee.access}}
- <div class="pull-right">
+ <div class="float-end">
<a href="#" onclick="dropItem('/cdav/calendar/dropsharee/{{$calendar.calendarid}}/{{$calendar.instanceid}}/{{$sharee.hash}}', '#sharee-{{$calendar.calendarid}}-{{$sharee@iteration}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
</div>
</div>
@@ -40,17 +40,17 @@
<label for="share-{{$calendar.calendarid}}">{{$share_label}}</label>
<input name="calendarid" type="hidden" value="{{$calendar.calendarid}}">
<input name="instanceid" type="hidden" value="{{$calendar.instanceid}}">
- <div class="form-group">
+ <div class="mb-3">
<select id="share-{{$calendar.calendarid}}" name="sharee" class="form-control">
{{$sharee_options}}
</select>
</div>
- <div class="form-group">
+ <div class="mb-3">
<select name="access" class="form-control">
{{$access_options}}
</select>
</div>
- <div class="form-group">
+ <div class="mb-3">
<button type="submit" name="share" value="share" class="btn btn-primary btn-sm">{{$share}}</button>
</div>
</form>
@@ -60,13 +60,11 @@
<input id="id-{{$calendar.calendarid}}" name="id" type="hidden" value="{{$calendar.calendarid}}:{{$calendar.instanceid}}">
<input id="color-{{$calendar.calendarid}}" name="color" type="hidden" value="{{$calendar.color}}" class="color-edit-input">
<label for="edit-form-{{$calendar.calendarid}}">{{$edit_label}}</label>
- <div id="edit-form-{{$calendar.calendarid}}" class="input-group form-group">
+ <div id="edit-form-{{$calendar.calendarid}}" class="input-group mb-3">
<input id="create-{{$calendar.calendarid}}" name="{DAV:}displayname" type="text" value="{{$calendar.displayname}}" class="form-control">
- <div class="input-group-append">
- <div class="input-group-addon p-3"></div>
- </div>
+ <div class="input-group-addon p-3"></div>
</div>
- <div class="form-group">
+ <div class="mb-3">
<button type="submit" name="edit" value="edit" class="btn btn-primary btn-sm">{{$edit}}</button>
</div>
</form>
@@ -81,9 +79,9 @@
<div class="widget">
<h3>{{$shared_calendars_label}}</h3>
{{foreach $shared_calendars as $calendar}}
- <div id="shared-calendar-{{$calendar.calendarid}}" class="ml-3{{if !$calendar@last}} form-group{{/if}}">
+ <div id="shared-calendar-{{$calendar.calendarid}}" class="ml-3{{if !$calendar@last}} mb-3{{/if}}">
<i id="calendar-btn-{{$calendar.calendarid}}" class="fa {{if $calendar.switch}}{{if $calendar.access == 'read-write'}}fa-calendar-check-o{{else}}fa-calendar-times-o{{/if}}{{else}}fa-calendar-o{{/if}} generic-icons fakelink" onclick="add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, {{if $calendar.access == 'read-write'}}'fa-calendar-check-o'{{else}}'fa-calendar-times-o'{{/if}})" style="color: {{$calendar.color}};"></i>{{$calendar.displayname}} ({{$calendar.sharer}})
- <div class="pull-right">
+ <div class="float-end">
<a href="/cdav/calendars/{{$calendar.ownernick}}/{{$calendar.uri}}/?export"><i id="download-icon" class="fa fa-cloud-download fakelink generic-icons"></i></a>
<a href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#shared-calendar-{{$calendar.calendarid}}'); if(drop) { add_remove_json_source('{{$calendar.json_source}}', '{{$calendar.color}}', {{$calendar.editable}}, 'drop'); } return false;"><i class="fa fa-trash-o drop-icons"></i></a>
</div>
@@ -102,13 +100,11 @@
<div class="sub-menu">
<form method="post" action="" class="colorpicker-component color-edit">
<input id="color" name="color" type="hidden" value="#ff8f00" class="color-edit-input">
- <div id="create-form" class="input-group form-group">
+ <div id="create-form" class="input-group mb-3">
<input id="create" name="{DAV:}displayname" type="text" placeholder="{{$create_placeholder}}" class="form-control">
- <div class="input-group-append">
- <div class="input-group-addon p-3"></div>
- </div>
+ <div class="input-group-addon p-3"></div>
</div>
- <div class="form-group">
+ <div class="mb-3">
<button type="submit" name="create" value="create" class="btn btn-primary btn-sm">{{$create}}</button>
</div>
</form>
@@ -120,7 +116,7 @@
<div id="upload-form" class="sub-menu-wrapper">
<div class="sub-menu">
<form enctype="multipart/form-data" method="post" action="">
- <div class="form-group">
+ <div class="mb-3">
<select id="import" name="target" class="form-control">
<option value="">{{$import_placeholder}}</option>
<optgroup label="{{$tools_options_label.0}}">
@@ -131,7 +127,7 @@
{{/foreach}}
</select>
</div>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control-file w-100" id="event-upload-choose" type="file" name="userfile" />
</div>
<button class="btn btn-primary btn-sm" type="submit" name="c_upload" value="c_upload">{{$upload}}</button>
diff --git a/view/tpl/channel.tpl b/view/tpl/channel.tpl
index 63e09ec05..04278fbf4 100644
--- a/view/tpl/channel.tpl
+++ b/view/tpl/channel.tpl
@@ -1,5 +1,5 @@
<div class="section-subtitle-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $channel.default_links}}
{{if $channel.default}}
<div>
@@ -37,10 +37,6 @@
<div class="channel-notifications-wrapper">
{{if !$channel.delegate}}
<div class="channel-notification">
- <i class="fa fa-fw fa-envelope{{if $channel.mail != 0}} text-danger{{/if}}"></i>
- {{if $channel.mail != 0}}<a href="manage/{{$channel.channel_id}}/mail/combined">{{/if}}{{$channel.mail|string_format:$mail_format}}{{if $channel.mail != 0}}</a>{{/if}}
- </div>
- <div class="channel-notification">
<i class="fa fa-fw fa-user{{if $channel.intros != 0}} text-danger{{/if}}"></i>
{{if $channel.intros != 0}}<a href='manage/{{$channel.channel_id}}/connections/ifpending'>{{/if}}{{$channel.intros|string_format:$intros_format}}{{if $channel.intros != 0}}</a>{{/if}}
</div>
diff --git a/view/tpl/channel_import.tpl b/view/tpl/channel_import.tpl
index c7cbb1742..bbd53cbb5 100644
--- a/view/tpl/channel_import.tpl
+++ b/view/tpl/channel_import.tpl
@@ -23,7 +23,7 @@
<div id="import-common-desc" class="section-content-info-wrapper">{{$common}}</div>
{{include file="field_checkbox.tpl" field=$make_primary}}
- {{include file="field_checkbox.tpl" field=$moving}}
+ {{* include file="field_checkbox.tpl" field=$moving *}}
{{include file="field_input.tpl" field=$newname}}
<div id="import-common-desc" class="section-content-info-wrapper">{{$pleasewait}}</div>
diff --git a/view/tpl/channel_rename.tpl b/view/tpl/channel_rename.tpl
index 9948dc647..6df416a44 100644
--- a/view/tpl/channel_rename.tpl
+++ b/view/tpl/channel_rename.tpl
@@ -8,7 +8,7 @@
<div class="section-content-tools-wrapper">
<form action="{{$basedir}}/changeaddr" autocomplete="off" method="post" >
<input type="hidden" name="verify" value="{{$hash}}" />
- <div class="form-group" id="rename-channel-pass-wrapper">
+ <div class="mb-3" id="rename-channel-pass-wrapper">
<label id="rename-channel-pass-label" for="rename-channel-pass">{{$passwd}}</label>
<input class="form-control" type="password" id="rename-channel-pass" autocomplete="off" name="qxz_password" value=" " />
</div>
diff --git a/view/tpl/channels.tpl b/view/tpl/channels.tpl
index 695b3b30f..60bc85933 100644
--- a/view/tpl/channels.tpl
+++ b/view/tpl/channels.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <a class="btn btn-success btn-sm pull-right" href="{{$create.0}}" title="{{$create.1}}"><i class="fa fa-plus-circle"></i>&nbsp;{{$create.2}}</a>
+ <a class="btn btn-success btn-sm float-end" href="{{$create.0}}" title="{{$create.1}}"><i class="fa fa-plus-circle"></i>&nbsp;{{$create.2}}</a>
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper-np">
diff --git a/view/tpl/chat.tpl b/view/tpl/chat.tpl
index 7ef957b7e..da8da30f2 100644
--- a/view/tpl/chat.tpl
+++ b/view/tpl/chat.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $is_owner}}
<form id="chat-destroy" method="post" action="chat">
<input type="hidden" name="room_name" value="{{$room_name}}" />
@@ -25,14 +25,14 @@
<div id="chatBottomBar" >
<form id="chat-form" method="post" action="#">
<input type="hidden" name="room_id" value="{{$room_id}}" />
- <div class="form-group">
+ <div class="mb-3">
<textarea id="chatText" name="chat_text" class="form-control"></textarea>
</div>
<div id="chat-submit-wrapper" class="clearfix">
- <div id="chat-submit" class="dropup pull-right">
- <button class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-toggle="dropdown"><i class="fa fa-cog"></i></button>
+ <div id="chat-submit" class="dropup float-end">
+ <button class="btn btn-outline-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown"><i class="fa fa-cog"></i></button>
<button class="btn btn-primary btn-sm" type="submit" id="chat-submit" name="submit" value="{{$submit}}">{{$submit}}</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=online"><i class="fa fa-circle online"></i>&nbsp;{{$online}}</a>
<a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="fa fa-circle away"></i>&nbsp;{{$away}}</a>
<a class="dropdown-item" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="fa fa-circle leave"></i>&nbsp;{{$leave}}</a>
@@ -46,7 +46,7 @@
</div>
</div>
<div id="chat-tools" class="btn-toolbar">
- <div class="btn-group mr-2">
+ <div class="btn-group me-2">
<button id="main-editor-bold" class="btn btn-outline-secondary btn-sm" title="{{$bold}}" onclick="inserteditortag('b', 'chatText'); return false;">
<i class="fa fa-bold jot-icons"></i>
</button>
@@ -63,20 +63,20 @@
<i class="fa fa-terminal jot-icons"></i>
</button>
</div>
- <div class="btn-group mr-2 d-none d-md-flex">
+ <div class="btn-group me-2 d-none d-md-flex">
<button id="chat-link-wrapper" class="btn btn-outline-secondary btn-sm" onclick="chatJotGetLink(); return false;" >
<i id="chat-link" class="fa fa-link jot-icons" title="{{$insert}}" ></i>
</button>
</div>
{{if $feature_encrypt}}
- <div class="btn-group mr-2 d-none d-md-flex">
+ <div class="btn-group me-2 d-none d-md-flex">
<button id="chat-encrypt-wrapper" class="btn btn-outline-secondary btn-sm" onclick="hz_encrypt('{{$cipher}}', '#chatText'); return false;">
<i id="chat-encrypt" class="fa fa-key jot-icons" title="{{$encrypt}}" ></i>
</button>
</div>
{{/if}}
<div class="btn-group dropup d-md-none">
- <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
+ <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<i id="more-tools-icon" class="fa fa-cog jot-icons"></i>
</button>
<div class="dropdown-menu">
@@ -110,7 +110,9 @@ $(document).ready(function() {
$('#chatroom_bookmarks, #vcard').hide();
$('#chatroom_list, #chatroom_members').show();
adjustInlineTopBarHeight();
- chatNotificationInit();
+ $('#toggle-notifications').one('click', function() {
+ chatNotificationInit();
+ });
});
$(window).resize(function () {
@@ -141,7 +143,7 @@ function load_chats() {
$('#chat-top-spinner').hide();
}
});
-
+
chat_timer = setTimeout(load_chats,10000);
}
@@ -218,7 +220,7 @@ var chat_notify_audio = {};
// Request notification access from the user
// TODO: Check Hubzilla member config setting before requesting permission
function chatNotificationInit() {
-
+
if (!("Notification" in window)) {
window.console.log("This browser does not support system notifications");
}
@@ -258,8 +260,8 @@ var chat_issue_notification = function (theBody,theTitle) {
}
var n = new Notification(theTitle,options);
n.onclick = function (event) {
- setTimeout(n.close.bind(n), 300);
- }
+ setTimeout(n.close.bind(n), 300);
+ }
if(chat_notify_audio_enabled) {
chat_notify_audio.play();
}
diff --git a/view/tpl/chatroom_new.tpl b/view/tpl/chatroom_new.tpl
index 1497939f6..2977563f9 100644
--- a/view/tpl/chatroom_new.tpl
+++ b/view/tpl/chatroom_new.tpl
@@ -2,8 +2,8 @@
<form id="chatroom-new-form" action="chat" method="post" class="acl-form" data-form_id="chatroom-new-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
{{include file="field_input.tpl" field=$name}}
{{include file="field_input.tpl" field=$chat_expire}}
- <div class="btn-group pull-right">
- <button id="dbtn-acl" class="btn btn-outline-secondary" data-toggle="modal" data-target="#aclModal" title="{{$permissions}}" onclick="return false;" ><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
+ <div class="btn-group float-end">
+ <button id="dbtn-acl" class="btn btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$permissions}}" onclick="return false;" ><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
<button id="dbtn-submit" class="acl-submit btn btn-primary" type="submit" name="submit" value="{{$submit}}" data-formid="chatroom-new-form">{{$submit}}</button>
</div>
<div class="clear"></div>
diff --git a/view/tpl/chatroomlist.tpl b/view/tpl/chatroomlist.tpl
index a81b8ec1e..2825a3f9e 100644
--- a/view/tpl/chatroomlist.tpl
+++ b/view/tpl/chatroomlist.tpl
@@ -3,7 +3,7 @@
<ul class="nav nav-pills flex-column">
<li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chat/{{$nickname}}">{{$overview}}</a></li>
{{foreach $items as $item}}
- <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chat/{{$nickname}}/{{$item.cr_id}}"><span class="badge pull-right">{{$item.cr_inroom}}</span>{{$item.cr_name}}</a></li>
+ <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chat/{{$nickname}}/{{$item.cr_id}}"><span class="badge bg-secondary float-end">{{$item.cr_inroom}}</span>{{$item.cr_name}}</a></li>
{{/foreach}}
</ul>
</div>
diff --git a/view/tpl/chatrooms.tpl b/view/tpl/chatrooms.tpl
index 0e6847608..88c42882c 100644
--- a/view/tpl/chatrooms.tpl
+++ b/view/tpl/chatrooms.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper clearfix">
{{if $is_owner}}
- <button type="button" class="btn btn-success btn-sm pull-right acl-form-trigger" onclick="openClose('chatroom-new');" data-form_id="chatroom-new-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$newroom}}</button>
+ <button type="button" class="btn btn-success btn-sm float-end acl-form-trigger" onclick="openClose('chatroom-new');" data-form_id="chatroom-new-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$newroom}}</button>
{{/if}}
<h2>{{$header}}</h2>
</div>
@@ -21,13 +21,13 @@
<tr class="chatroom-index-row">
<td><a href="{{$baseurl}}/chat/{{$nickname}}/{{$room.cr_id}}">{{$room.cr_name}}</a></td>
<td>{{$room.cr_expire}}&nbsp;min</td>
- <td class="chatrooms-index-tool{{if $room.allow_cid || $room.allow_gid || $room.deny_cid || $room.deny_gid}} dropdown float-right{{/if}}">
+ <td class="chatrooms-index-tool{{if $room.allow_cid || $room.allow_gid || $room.deny_cid || $room.deny_gid}} dropdown float-end{{/if}}">
{{if $room.allow_cid || $room.allow_gid || $room.deny_cid || $room.deny_gid}}
- <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('chatroom',{{$room.cr_id}});"></i>
+ <i class="fa fa-lock lockview" data-bs-toggle="dropdown" onclick="lockview('chatroom',{{$room.cr_id}});"></i>
<ul id="panel-{{$room.cr_id}}" class="lockview-panel dropdown-menu"></ul>
{{/if}}
</td>
- <td><span class="badge badge-secondary">{{$room.cr_inroom}}</span></td>
+ <td><span class="badge bg-secondary">{{$room.cr_inroom}}</span></td>
</tr>
{{/foreach}}
</table>
diff --git a/view/tpl/cloud_actionspanel.tpl b/view/tpl/cloud_actionspanel.tpl
index 8cab175ff..53e509a83 100644
--- a/view/tpl/cloud_actionspanel.tpl
+++ b/view/tpl/cloud_actionspanel.tpl
@@ -6,15 +6,15 @@
<input type="hidden" name="folder" value="{{$folder}}" />
<input type="hidden" name="channick" value="{{$channick}}" />
<input type="hidden" name="return_url" value="{{$return_url}}" />
- <input id="files-mkdir" type="text" name="filename" class="form-control form-group">
- <div class="pull-right btn-group">
+ <input id="files-mkdir" type="text" name="filename" class="form-control mb-3">
+ <div class="float-end btn-group">
<div class="btn-group">
{{if $lockstate}}
- <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" type="button">
+ <button class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" type="button">
<i class="jot-perms-icon fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
- <button class="btn btn-primary btn-sm pull-right" type="submit" value="{{$folder_submit}}">{{$folder_submit}}</button>
+ <button class="btn btn-primary btn-sm float-end" type="submit" value="{{$folder_submit}}">{{$folder_submit}}</button>
</div>
</div>
</form>
@@ -33,14 +33,14 @@
<div class="cloud-index attach-drop attach-drop-zone text-center p-4 mb-3" data-folder="{{$folder}}">
<span class="text-muted">{{$drop_area_label}}</span>
</div>
- <div class="pull-right btn-group">
+ <div class="float-end btn-group">
<div class="btn-group">
{{if $lockstate}}
- <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" type="button">
+ <button class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" type="button">
<i class="jot-perms-icon fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
- <button id="upload-submit" class="btn btn-primary btn-sm pull-right">{{$upload_submit}}</button>
+ <button id="upload-submit" class="btn btn-primary btn-sm float-end">{{$upload_submit}}</button>
</div>
</div>
</form>
diff --git a/view/tpl/cloud_directory.tpl b/view/tpl/cloud_directory.tpl
index ac8304b96..a851eb203 100644
--- a/view/tpl/cloud_directory.tpl
+++ b/view/tpl/cloud_directory.tpl
@@ -1,7 +1,7 @@
<div class="{{if $tiles}}section-content-wrapper{{else}}section-content-wrapper-np{{/if}}">
{{if $tiles}}
<table id="cloud-index">
- <tr id="new-upload-progress-bar-1"></tr> {{* this is needed to append the upload files in the right order *}}
+ <tr id="new-upload-progress-bar-0"></tr> {{* this is needed to append the upload files in the right order *}}
</table>
<div class="row row-cols-2 row-cols-md-4">
{{if $parentpath}}
@@ -74,10 +74,10 @@
<td colspan="3">
{{if $is_owner}}
<div class="dropdown">
- <button class="btn btn-warning btn-sm" id="multi-dropdown-button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <button class="btn btn-warning btn-sm" id="multi-dropdown-button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-fw fa-ellipsis-v d-table-cell"></i><span class="d-none d-md-table-cell">{{$bulk_actions_label}}</span>
</button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-button">
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdown-button">
{{if $is_owner}}
<a id="cloud-multi-tool-perms-btn" class="dropdown-item" href="#"><i class="fa fa-fw fa-lock"></i> {{$adjust_permissions_label}}</a>
{{/if}}
@@ -89,10 +89,10 @@
</div>
{{else if $is_admin}}
<div class="dropdown">
- <button class="btn btn-warning btn-sm" id="multi-dropdown-button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <button class="btn btn-warning btn-sm" id="multi-dropdown-button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-fw fa-ellipsis-v d-table-cell"></i><span class="d-none d-md-table-cell">{{$bulk_actions_label}}</span>
</button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-button">
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdown-button">
<a id="cloud-multi-tool-delete-btn" class="dropdown-item" href="#"><i class="fa fa-fw fa-trash-o"></i> {{$admin_delete_label}}</a>
</div>
</div>
@@ -116,13 +116,13 @@
{{if $is_owner}}
{{include file="field_checkbox.tpl" field=$recurse}}
{{/if}}
- <div id="attach-multi-submit" class="form-group">
+ <div id="attach-multi-submit" class="mb-3">
<button id="cloud-multi-tool-cancel-btn" class="btn btn-outline-secondary btn-sm cloud-multi-tool-cancel-btn" type="button">
{{$cancel_label}}
</button>
- <div id="attach-multi-edit-perms" class="btn-group float-right">
+ <div id="attach-multi-edit-perms" class="btn-group float-end">
{{if $is_owner}}
- <button id="multi-dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" title="{{$permset}}" type="button">
+ <button id="multi-dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$permset}}" type="button">
<i id="multi-jot-perms-icon" class="fa fa-{{$lockstate}} jot-icons jot-perms-icon"></i>
</button>
{{/if}}
@@ -136,7 +136,7 @@
</td>
</tr>
{{/if}}
- <tr id="new-upload-progress-bar-1"></tr> {{* this is needed to append the upload files in the right order *}}
+ <tr id="new-upload-progress-bar-0"></tr> {{* this is needed to append the upload files in the right order *}}
{{foreach $entries as $item}}
<tr id="cloud-index-{{$item.attach_id}}" class="cloud-index{{if $item.collection}} attach-drop{{/if}}"{{if $item.collection}} data-folder="{{$item.resource}}"{{/if}} data-id="{{$item.attach_id}}" draggable="true">
<td>
@@ -151,17 +151,17 @@
<td>{{$item.terms}}</td>
<td class="cloud-index-tool p-2">
{{if $item.lockstate == 'lock'}}
- <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('attach',{{$item.attach_id}});"></i>
- <ul id="panel-{{$item.attach_id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
+ <i class="fa fa-lock lockview" data-bs-toggle="dropdown" onclick="lockview('attach',{{$item.attach_id}});"></i>
+ <ul id="panel-{{$item.attach_id}}" class="lockview-panel dropdown-menu dropdown-menu-end"></ul>
{{/if}}
</td>
<td class="cloud-index-tool">
{{if ($is_owner || $item.is_creator) && $item.attach_id}}
<div class="dropdown">
- <button class="btn btn-link btn-sm" id="dropdown-button-{{$item.attach_id}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <button class="btn btn-link btn-sm" id="dropdown-button-{{$item.attach_id}}" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-fw fa-ellipsis-v"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-button-{{$item.attach_id}}">
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdown-button-{{$item.attach_id}}">
<a id="cloud-tool-info-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-info-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-info"></i> {{$info_label}}</a>
{{if $is_owner}}
<a id="cloud-tool-perms-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-perms-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-{{$item.lockstate}}"></i> {{$adjust_permissions_label}}</a>
@@ -183,10 +183,10 @@
{{else}}
{{if $is_admin || $item.attach_id}}
<div class="dropdown">
- <button class="btn btn-link btn-sm" id="dropdown-button-{{$item.attach_id}}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <button class="btn btn-link btn-sm" id="dropdown-button-{{$item.attach_id}}" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-fw fa-ellipsis-v"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdown-button-{{$item.attach_id}}">
+ <div class="dropdown-menu dropdown-menu-end" aria-labelledby="dropdown-button-{{$item.attach_id}}">
{{if $item.collection}}
<a id="cloud-tool-dir-download-btn-{{$item.attach_id}}" class="dropdown-item cloud-tool-dir-download-btn" href="#" data-id="{{$item.attach_id}}"><i class="fa fa-fw fa-cloud-download"></i> {{$download_label}}</a>
{{else}}
@@ -214,22 +214,22 @@
</div>
<div id="cloud-tool-info-{{$item.attach_id}}" class="cloud-tool">
{{if ! $item.collection}}
- <div class="form-group">
+ <div class="mb-3">
<label for="attach-code-input-{{$item.attach_id}}">{{$attach_bbcode_label}}</label>
<input type="text" class="form-control" id="attach-code-input-{{$item.attach_id}}" name="attach-code-input-{{$item.attach_id}}" value="{{$item.attach_bbcode}}" onclick="this.select();" />
</div>
{{if $item.embed_bbcode}}
- <div class="form-group">
+ <div class="mb-3">
<label for="embed-code-input-{{$item.attach_id}}">{{$embed_bbcode_label}}</label>
<input type="text" class="form-control" id="embed-code-input-{{$item.attach_id}}" name="embed-code-input-{{$item.attach_id}}" value="{{$item.embed_bbcode}}" onclick="this.select();" />
</div>
{{/if}}
{{/if}}
- <div class="form-group">
+ <div class="mb-3">
<label for="link-code-input-{{$item.attach_id}}">{{$link_bbcode_label}}</label>
<input type="text" class="form-control" id="link-code-input-{{$item.attach_id}}" name="link-code-input-{{$item.attach_id}}" value="{{$item.link_bbcode}}" onclick="this.select();" />
</div>
- <div class="form-group">
+ <div class="mb-3">
<button id="cloud-tool-close-btn-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm cloud-tool-cancel-btn" type="button" data-id="{{$item.attach_id}}">
{{$close_label}}
</button>
@@ -247,13 +247,13 @@
{{if !$item.collection}}{{include file="field_checkbox.tpl" field=$item.notify}}{{/if}}
{{if $item.collection}}{{include file="field_checkbox.tpl" field=$item.recurse}}{{/if}}
{{/if}}
- <div id="attach-submit-{{$item.attach_id}}" class="form-group">
+ <div id="attach-submit-{{$item.attach_id}}" class="mb-3">
<button id="cloud-tool-cancel-btn-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm cloud-tool-cancel-btn" type="button" data-id="{{$item.attach_id}}">
{{$cancel_label}}
</button>
- <div id="attach-edit-perms-{{$item.attach_id}}" class="btn-group float-right">
+ <div id="attach-edit-perms-{{$item.attach_id}}" class="btn-group float-end">
{{if $is_owner}}
- <button id="dbtn-acl-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" title="{{$permset}}" type="button">
+ <button id="dbtn-acl-{{$item.attach_id}}" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$permset}}" type="button">
<i id="jot-perms-icon-{{$item.attach_id}}" class="fa fa-{{$item.lockstate}} jot-icons jot-perms-icon"></i>
</button>
{{/if}}
diff --git a/view/tpl/cloud_header.tpl b/view/tpl/cloud_header.tpl
index 285363a12..48ada325f 100644
--- a/view/tpl/cloud_header.tpl
+++ b/view/tpl/cloud_header.tpl
@@ -1,5 +1,5 @@
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<a href="cloud_tiles/{{$cpath}}" class="btn btn-sm btn-outline-secondary"><i class="fa fa-fw {{if $tiles}}fa-th-list{{else}}fa-th-large{{/if}}"></i></a>
{{if $actionspanel}}
{{if $is_owner}}
diff --git a/view/tpl/comment_item.tpl b/view/tpl/comment_item.tpl
index 0b2ef1a1c..d34eec7f8 100644
--- a/view/tpl/comment_item.tpl
+++ b/view/tpl/comment_item.tpl
@@ -20,8 +20,8 @@
{{/if}}
<textarea id="comment-edit-text-{{$id}}" class="comment-edit-text" placeholder="{{$comment}}" name="body" ondragenter="linkdropper(event);" ondragleave="linkdropexit(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" ></textarea>
<div id="comment-tools-{{$id}}" class="pt-2 comment-tools">
- <div id="comment-edit-bb-{{$id}}" class="btn-toolbar pull-left">
- <div class="btn-group mr-2">
+ <div id="comment-edit-bb-{{$id}}" class="btn-toolbar float-start">
+ <div class="btn-group me-2">
<button class="btn btn-outline-secondary btn-sm" title="{{$edbold}}" onclick="insertbbcomment('{{$comment}}','b', {{$id}}); return false;">
<i class="fa fa-bold comment-icon"></i>
</button>
@@ -38,7 +38,7 @@
<i class="fa fa-terminal comment-icon"></i>
</button>
</div>
- <div class="btn-group mr-2">
+ <div class="btn-group me-2">
{{if $can_upload}}
<button class="btn btn-outline-secondary btn-sm" title="{{$edatt}}" onclick="insertCommentAttach('{{$comment}}',{{$id}}); return false;">
<i class="fa fa-paperclip comment-icon"></i>
@@ -49,7 +49,7 @@
</button>
</div>
{{if $feature_encrypt}}
- <div class="btn-group mr-2">
+ <div class="btn-group me-2">
<button class="btn btn-outline-secondary btn-sm" title="{{$encrypt}}" onclick="hz_encrypt('{{$cipher}}','#comment-edit-text-' + '{{$id}}'); return false;">
<i class="fa fa-key comment-icon"></i>
</button>
@@ -57,7 +57,7 @@
{{/if}}
{{$comment_buttons}}
</div>
- <div class="btn-group float-right" id="comment-edit-submit-wrapper-{{$id}}">
+ <div class="btn-group float-end" id="comment-edit-submit-wrapper-{{$id}}">
{{if $preview}}
<button id="comment-edit-presubmit-{{$id}}" class="btn btn-outline-secondary btn-sm" onclick="preview_comment({{$id}}); return false;" title="{{$preview}}">
<i class="fa fa-eye comment-icon" ></i>
diff --git a/view/tpl/common_friends.tpl b/view/tpl/common_friends.tpl
index b99075210..e772780da 100644
--- a/view/tpl/common_friends.tpl
+++ b/view/tpl/common_friends.tpl
@@ -4,7 +4,7 @@
</div>
<div class="section-content-wrapper clearfix">
{{foreach $items as $item}}
- <div class="float-left mr-4">
+ <div class="float-start mr-4">
<a href="{{$item.url}}">
<img class="contact-block-img" src="{{$item.photo}}" alt="{{$item.name}}" title="{{$item.name}} [{{$item.url}}]" />
</a>
diff --git a/view/tpl/common_tabs.tpl b/view/tpl/common_tabs.tpl
index 29c46369b..429cc561d 100644
--- a/view/tpl/common_tabs.tpl
+++ b/view/tpl/common_tabs.tpl
@@ -6,10 +6,10 @@
</ul>
</div>
<div class="d-md-none dropdown clearfix" style="position:fixed; right:7px; top:4.5rem; z-index:1020">
- <button type="button" class="btn btn-outline-secondary btn-sm float-right" data-toggle="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm float-end" data-bs-toggle="dropdown">
<i class="fa fa-bars"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{foreach $tabs as $tab}}
<a class="dropdown-item{{if $tab.sel}} {{$tab.sel}}{{/if}}" href="{{$tab.url}}"{{if $tab.title}} title="{{$tab.title}}"{{/if}}>{{$tab.label}}</a>
{{/foreach}}
diff --git a/view/tpl/connection_template.tpl b/view/tpl/connection_template.tpl
index 86a230c7f..ffd02f352 100644
--- a/view/tpl/connection_template.tpl
+++ b/view/tpl/connection_template.tpl
@@ -1,23 +1,20 @@
<div id="contact-entry-wrapper-{{$contact.id}}">
<div class="section-subtitle-wrapper clearfix">
- <div class="pull-right">
- {{if $contact.approve && $contact.ignore}}
- <form action="connedit/{{$contact.id}}" method="post" >
- <button type="submit" class="btn btn-success btn-sm" name="pending" value="1" title="{{$contact.approve_hover}}"><i class="fa fa-check"></i> {{$contact.approve}}</button>
-
- <a href="connedit/{{$contact.id}}/ignore" class="btn btn-warning btn-sm" title="{{$contact.ignore_hover}}"><i class="fa fa-ban"></i> {{$contact.ignore}}</a>
-
- {{/if}}
- {{if $contact.connect}}
- <a href="{{$contact.follow}}" class="btn btn-success btn-sm" title="{{$contact.connect_hover}}"><i class="fa fa-plus"></i> {{$contact.connect}}</a>
- {{/if}}
- <a href="#" class="btn btn-danger btn-sm contact-delete-btn" title="{{$contact.delete_hover}}" onclick="dropItem('{{$contact.deletelink}}', '#contact-entry-wrapper-{{$contact.id}}'); return false;"><i class="fa fa-trash-o"></i> {{$contact.delete}}</a>
- <a href="{{$contact.link}}" class="btn btn-outline-secondary btn-sm" title="{{$contact.edit_hover}}"><i class="fa fa-pencil"></i> {{$contact.edit}}</a>
- {{if $contact.approve}}
- </form>
+ <div class="float-end">
+ {{if $contact.status}}
+ {{foreach $contact.states as $state}}
+ <span class="badge rounded-pill bg-danger text-white me-1" title="">{{$state}}</span>
+ {{/foreach}}
{{/if}}
+ <span id="contact-role-{{$contact.id}}" class="badge rounded-pill bg-warning text-dark me-1" title="{{$role_label}}">{{$contact.role}}</span>
+ <button type="button" class="btn btn-outline-secondary btn-sm contact-edit" title="{{$contact.edit_hover}}" data-id="{{$contact.id}}">
+ <i class="fa fa-fw fa-pencil contact-edit-icon-{{$contact.id}}"></i>
+ <div class="spinner-wrapper contact-edit-rotator-{{$contact.id}}" style="vertical-align: text-bottom; margin-right: 2px"><div class="spinner s"></div></div>
+ {{$contact.edit}}
+ </button>
+
</div>
- <h3>{{if $contact.public_forum}}<i class="fa fa-comments-o"></i>&nbsp;{{/if}}<a href="{{$contact.url}}" title="{{$contact.img_hover}}" >{{$contact.name}}</a>{{if $contact.phone}}&nbsp;<a class="btn btn-outline-secondary btn-sm" href="tel:{{$contact.phone}}" title="{{$contact.call}}"><i class="fa fa-phone connphone"></i></a>{{/if}}</h3>
+ <h3>{{if $contact.public_forum}}<i class="fa fa-comments-o" title="{{$group_label}}"></i>&nbsp;{{/if}}<a href="{{$contact.url}}" title="{{$contact.img_hover}}" >{{$contact.name}}</a>{{if $contact.phone}}&nbsp;<a class="btn btn-outline-secondary btn-sm" href="tel:{{$contact.phone}}" title="{{$contact.call}}"><i class="fa fa-phone connphone"></i></a>{{/if}}</h3>
</div>
<div class="section-content-tools-wrapper">
<div class="contact-photo-wrapper" >
@@ -27,11 +24,11 @@
{{include "connstatus.tpl" perminfo=$contact.perminfo}}
</div>
<div class="contact-info">
- {{if $contact.status}}
+ {{** if $contact.status}}
<div class="contact-info-element">
<span class="contact-info-label">{{$contact.status_label}}:</span> {{$contact.status}}
</div>
- {{/if}}
+ {{/if **}}
{{if $contact.connected}}
<div class="contact-info-element">
<span class="contact-info-label">{{$contact.connected_label}}:</span> <span class="autotime" title="{{$contact.connected}}"></span>
@@ -47,6 +44,9 @@
<span class="contact-info-label">{{$contact.network_label}}:</span> {{$contact.network}} - <a href="{{$contact.recentlink}}" rel="nofollow noopener">{{$contact.recent_label}}</a>
</div>
{{/if}}
+ {{if $contact.connect}}
+ <a href="{{$contact.follow}}" class="btn btn-success btn-sm" title="{{$contact.connect_hover}}"><i class="fa fa-plus"></i> {{$contact.connect}}</a>
+ {{/if}}
</div>
</div>
diff --git a/view/tpl/connections.tpl b/view/tpl/connections.tpl
index fedcff1e3..5fec38a84 100644
--- a/view/tpl/connections.tpl
+++ b/view/tpl/connections.tpl
@@ -1,13 +1,16 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper clearfix">
- <div class="dropdown pull-right">
- <button type="button" class="btn btn-primary btn-sm" onclick="openClose('contacts-search-form'); $('#contacts-search').focus();">
+ <div class="dropdown float-end">
+ <button type="button" class="btn btn-success btn-sm" onclick="openClose('contacts-follow-form'); closeMenu('contacts-search-form'); $('#contacts-follow').focus();">
+ <i class="fa fa-plus"></i>&nbsp;Add
+ </button>
+ <button type="button" class="btn btn-primary btn-sm" onclick="openClose('contacts-search-form'); closeMenu('contacts-follow-form'); $('#contacts-search').focus();">
<i class="fa fa-search"></i>&nbsp;{{$label}}
</button>
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$sort}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$sort}}">
<i class="fa fa-filter"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{foreach $tabs as $menu}}
<a class="dropdown-item {{$menu.sel}}" href="{{$menu.url}}">{{$menu.label}}</a>
{{/foreach}}
@@ -16,12 +19,23 @@
{{if $finding}}<h2>{{$finding}}</h2>{{else}}<h2>{{$header}}{{if $total}} ({{$total}}){{/if}}</h2>{{/if}}
</div>
<div id="contacts-search-form" class="section-content-tools-wrapper">
- <form action="{{$cmd}}" method="get" id="mimimi" name="contacts-search-form">
- <div class="input-group form-group">
+ <form action="{{$cmd}}" method="get" name="contacts-search-form">
+ <div class="input-group mb-3">
<input type="text" name="search" id="contacts-search" class="form-control" onfocus="this.select();" value="{{$search}}" placeholder="{{$desc}}" />
- <div class="input-group-append">
- <button id="contacts-search-submit" class="btn btn-sm btn-outline-secondary" type="submit"><i class="fa fa-fw fa-search"></i></button>
- </div>
+ <button id="contacts-search-submit" class="btn btn-primary" type="submit"><i class="fa fa-fw fa-search"></i></button>
+ </div>
+ </form>
+ </div>
+ <div id="contacts-follow-form" class="section-content-tools-wrapper">
+ {{if $abook_usage_message}}
+ <div class="section-conten-info-wrapper">
+ {{$abook_usage_message}}
+ </div>
+ {{/if}}
+ <form action="follow" method="post">
+ <div class="input-group mb-3">
+ <input class="form-control" id="contacts-follow" type="text" name="url" title="Examples: bob@example.com, https://example.com/barbara" placeholder="Enter channel address">
+ <button class="btn btn-success" type="submit" name="submit" value="Connect" title="Connect"><i class="fa fa-fw fa-plus"></i></button>
</div>
</form>
</div>
@@ -36,3 +50,5 @@
<div id="page-spinner" class="spinner-wrapper">
<div class="spinner m"></div>
</div>
+{{include file="contact_edit_modal.tpl"}}
+
diff --git a/view/tpl/connstatus.tpl b/view/tpl/connstatus.tpl
index 667775f3a..30f450820 100644
--- a/view/tpl/connstatus.tpl
+++ b/view/tpl/connstatus.tpl
@@ -1 +1 @@
-<i class="fa fa-fw fa-comments oneway-overlay text-{{if $perminfo.connpermcount == 3}}success{{elseif $perminfo.connpermcount > 0}}warning{{else}}danger{{/if}}" title="{{$perminfo.connperms}}"></i>
+<i class="fa fa-circle oneway-overlay text-{{if $perminfo.connpermcount == 3}}success{{elseif $perminfo.connpermcount > 0}}warning{{else}}danger{{/if}}" title="{{$perminfo.connperms}}"></i>
diff --git a/view/tpl/contact_edit.tpl b/view/tpl/contact_edit.tpl
new file mode 100644
index 000000000..46bdbba80
--- /dev/null
+++ b/view/tpl/contact_edit.tpl
@@ -0,0 +1,133 @@
+<form id="contact-edit-form" action="contactedit/{{$contact_id}}" method="post" >
+ <div id="contact-edit-tools" class="panel-group" role="tablist" >
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="roles-tool">
+ <h3>
+ <a class="section" data-bs-toggle="collapse" data-bs-target="#roles-tool-collapse" href="#" aria-expanded="true" aria-controls="roles-tool-collapse" data-section="roles">
+ {{$roles_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="roles-tool-collapse" class="panel-collapse collapse{{if $section == 'roles'}} show{{/if}}" role="tabpanel" aria-labelledby="roles-tool" data-bs-parent="#contact-edit-tools">
+ <div class="section-content-tools-wrapper">
+ {{include file="field_select.tpl" field=$permcat}}
+ <button class="btn btn-outline-secondary btn-sm float-end sub_section{{if $sub_section == 'perms'}} sub_section_active{{/if}}" type="button" onclick="openClose('perms-table', 'table')" data-section="perms">
+ {{$compare_label}}
+ </button>
+ <a href="permcats/{{$permcat_value}}" class="btn btn-sm btn-outline-primary">
+ <i class="fa fa-external-link"></i>&nbsp;{{$permcat_new}}
+ </a>
+ <table id="perms-table" class="table table-hover table-sm mt-3" style="display: {{if $sub_section == 'perms'}}table{{else}}none{{/if}};">
+ <thead>
+ <tr class="w-100">
+ <th scope="col">{{$permission_label}}</th>
+ <th scope="col">{{$them}}</th>
+ <th scope="col">{{$me}}</th>
+ </tr>
+ </thead>
+ <tbody>
+ {{foreach $perms as $perm}}
+ <tr>
+ <td>{{$perm.1}}</td>
+ <td>
+ {{if $perm.2}}
+ <i class="fa fa-check text-success"></i>
+ {{else}}
+ <i class="fa fa-times text-danger"></i>
+ {{/if}}
+ </td>
+ <td>
+ {{if $perm.3}}
+ <i class="fa fa-check text-success"></i>
+ {{else}}
+ <i class="fa fa-times text-danger"></i>
+ {{/if}}
+ </td>
+ </tr>
+ {{/foreach}}
+
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+ {{if $groups}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="group-tool">
+ <h3>
+ <a class="section" data-bs-toggle="collapse" data-bs-target="#group-tool-collapse" href="#" aria-expanded="true" aria-controls="group-tool-collapse" data-section="group">
+ {{$pgroups_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="group-tool-collapse" class="panel-collapse collapse{{if $section == 'group'}} show{{/if}}" role="tabpanel" aria-labelledby="group-tool" data-bs-parent="#contact-edit-tools">
+ <div class="section-content-tools-wrapper clearfix">
+ {{foreach $groups as $group}}
+ {{include file="field_checkbox.tpl" field=$group}}
+ {{/foreach}}
+ <a href="group/new" class="btn btn-sm btn-outline-primary">
+ <i class="fa fa-external-link"></i>&nbsp;{{$pgroups_label}}
+ </a>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ {{if $multiprofs}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="profile-tool">
+ <h3>
+ <a class="section" data-bs-toggle="collapse" data-bs-target="#profile-tool-collapse" href="#" aria-expanded="true" aria-controls="profile-tool-collapse" data-section="profile">
+ {{$profiles_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="profile-tool-collapse" class="panel-collapse collapse{{if $section == 'profile'}} show{{/if}}" role="tabpanel" aria-labelledby="profile-tool" data-bs-parent="#contact-edit-tools">
+ <div class="section-content-tools-wrapper">
+ {{$profile_select}}
+ <a href="profiles" class="btn btn-sm btn-outline-primary">
+ <i class="fa fa-external-link"></i>&nbsp;{{$profiles_label}}
+ </a>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ {{if $slide}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="affinity-tool">
+ <h3>
+ <a class="section" data-bs-toggle="collapse" data-bs-target="#affinity-tool-collapse" href="#" aria-expanded="true" aria-controls="affinity-tool-collapse" data-section="affinity">
+ {{$affinity_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="affinity-tool-collapse" class="panel-collapse collapse{{if $section == 'affinity'}} show{{/if}}" role="tabpanel" aria-labelledby="affinity-tool" data-bs-parent="#contact-edit-tools">
+ <div class="section-content-tools-wrapper">
+ <div class="mb-2"><label>{{$lbl_slider}}</label></div>
+ {{$slide}}
+ <input id="contact-closeness-mirror" type="hidden" name="closeness" value="{{$close}}" />
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ {{if $connfilter}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="filter-tool">
+ <h3>
+ <a class="section" data-bs-toggle="collapse" data-bs-target="#filter-tool-collapse" href="#" aria-expanded="true" aria-controls="filter-tool-collapse" data-section="filter">
+ {{$filter_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="filter-tool-collapse" class="panel-collapse collapse{{if $section == 'filter'}} show{{/if}}" role="tabpanel" aria-labelledby="filter-tool" data-bs-parent="#contact-edit-tools">
+ <div class="section-content-tools-wrapper">
+ {{include file="field_textarea.tpl" field=$incl}}
+ {{include file="field_textarea.tpl" field=$excl}}
+ </div>
+ </div>
+ </div>
+ {{else}}
+ <input type="hidden" name="{{$incl.0}}" value="{{$incl.2}}" />
+ <input type="hidden" name="{{$excl.0}}" value="{{$excl.2}}" />
+ {{/if}}
+ </div>
+</form>
diff --git a/view/tpl/contact_edit_header.tpl b/view/tpl/contact_edit_header.tpl
new file mode 100644
index 000000000..997d294bd
--- /dev/null
+++ b/view/tpl/contact_edit_header.tpl
@@ -0,0 +1,9 @@
+<div class="float-start me-2">
+ <a href="{{$href}}" title="{{$link_label}}" target="_blank">
+ <img src="{{$img_src}}" class="rounded" style="width: 3rem; height: 3rem;" />
+ </a>
+</div>
+<div class="m-1">
+ <div class="text-truncate h3 m-0"><strong>{{if $is_group}}<i class="fa fa-comments-o" title="{{$group_label}}"></i> {{/if}}{{$name}}</strong></div>
+ <div class="text-truncate text-muted">{{$addr}}</div>
+</div>
diff --git a/view/tpl/contact_edit_modal.tpl b/view/tpl/contact_edit_modal.tpl
new file mode 100644
index 000000000..ddb1557c1
--- /dev/null
+++ b/view/tpl/contact_edit_modal.tpl
@@ -0,0 +1,155 @@
+<div id="edit-modal" class="modal" tabindex="-1">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <div id="edit-modal-title" class="modal-title w-75">
+ <div class="placeholder-wave">
+ <span class="placeholder placeholder-lg" style="width: 200px;"></span>
+ </div>
+ </div>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div id="edit-modal-body" class="modal-body">
+ <div class="placeholder-wave">
+ <span class="placeholder placeholder-lg w-100 mb-4"></span>
+ <span class="placeholder placeholder-lg w-100 mb-4"></span>
+ <span class="placeholder placeholder-lg w-100 mb-4"></span>
+ </div>
+ </div>
+ <div class="modal-footer">
+ <div id="edit-modal-tools" class="me-auto"></div>
+ <button id="contact-save" type="button" class="btn btn-primary"></button>
+ </div>
+ </div>
+ </div>
+</div>
+<script>
+ let poi;
+ let section = 'roles';
+ let sub_section;
+
+
+ $('#edit-modal').on('hidden.bs.modal', function (e) {
+ if (window.location.hash) {
+ history.replaceState(null, '', 'connections');
+ }
+ })
+
+ if (window.location.hash) {
+ poi = window.location.hash.substr(1);
+ init_contact_edit(poi);
+ }
+
+ window.onhashchange = function() {
+ if (window.location.hash) {
+ poi = window.location.hash.substr(1);
+ init_contact_edit(poi);
+ }
+ };
+
+
+ $(document).on('click', '.contact-edit', function (e) {
+ e.preventDefault();
+ poi = this.dataset.id
+ init_contact_edit(poi);
+ });
+
+ $(document).on('click', '#contact-save', function () {
+ let form_data = $('#contact-edit-form').serialize() + '&section=' + section + '&sub_section=' + sub_section;
+
+ $.post('contactedit/' + poi, form_data, function(data) {
+ if (!data.success) {
+ $.jGrowl(data.message, {sticky: false, theme: 'notice', life: 10000});
+ return;
+ }
+ activate(data);
+ $.jGrowl(data.message, {sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: ((data.success) ? 3000 : 10000)});
+ // $('#edit-modal').modal('hide');
+ });
+
+ });
+
+ $(document).on('click', '.contact-tool', function (e) {
+ e.preventDefault();
+ let cmd = this.dataset.cmd;
+
+ $.get('contactedit/' + poi + '/' + cmd, function(data) {
+ $('#edit-modal-tools').html(data.tools);
+ $.jGrowl(data.message, {sticky: false, theme: ((data.success) ? 'info' : 'notice'), life: ((data.success) ? 3000 : 10000)});
+ if (cmd === 'drop') {
+ if ($('#contact-entry-wrapper-' + poi).length) {
+ $('#contact-entry-wrapper-' + poi).fadeOut();
+ }
+ $('#edit-modal').modal('hide');
+ }
+ });
+ });
+
+ $(document).on('click', '.section', function () {
+ section = this.dataset.section;
+ sub_section = '';
+ });
+
+ $(document).on('click', '.sub_section', function () {
+ if ($(this).hasClass('sub_section_active')) {
+ $(this).removeClass('sub_section_active');
+ sub_section = '';
+ }
+ else {
+ $(this).addClass('sub_section_active');
+ sub_section = this.dataset.section;
+ }
+ });
+
+ function init_contact_edit(poi) {
+ if (!poi)
+ return;
+
+ $('.contact-edit-rotator-' + poi).addClass('d-inline-block');
+ $('.contact-edit-icon-' + poi).hide();
+ $.get('contactedit/' + poi, function(data) {
+ if (!data.success) {
+ $.jGrowl(data.message, {sticky: false, theme: 'notice', life: 10000});
+ return;
+ }
+ $('#edit-modal').modal('show');
+ activate(data);
+ });
+ }
+
+ function activate(data) {
+ $('#contact-save').removeClass('disabled');
+ $('#contact-tools').removeClass('disabled');
+ $('.contact-edit-rotator-' + poi).removeClass('d-inline-block');
+ $('.contact-edit-icon-' + poi).show();
+
+ if (data.title) {
+ $('#edit-modal-title').html(data.title);
+ }
+
+ if (data.body) {
+ $('#edit-modal-body').html(data.body);
+ }
+
+ if (data.tools) {
+ $('#edit-modal-tools').html(data.tools);
+ }
+
+ if (data.submit) {
+ $('#contact-save').html(data.submit);
+ }
+
+ if (data.role && $('#contact-role-' + poi).length) {
+ $('#contact-role-' + poi).html(data.role);
+ }
+
+ if (data.pending) {
+ $('#contact-save').removeClass('btn-primary');
+ $('#contact-save').addClass('btn-success');
+ }
+ else {
+ $('#contact-save').addClass('btn-primary');
+ $('#contact-save').removeClass('btn-success');
+ }
+ }
+</script>
diff --git a/view/tpl/contact_edit_tools.tpl b/view/tpl/contact_edit_tools.tpl
new file mode 100644
index 000000000..565b9df86
--- /dev/null
+++ b/view/tpl/contact_edit_tools.tpl
@@ -0,0 +1,14 @@
+<button id="contact-tools" class="btn btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
+</button>
+<div class="dropdown-menu">
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.refresh.title}}" data-cmd="refresh">{{$tools.refresh.label}}</a>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.rephoto.title}}" data-cmd="resetphoto">{{$tools.rephoto.label}}</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.block.title}}" data-cmd="block">{{$tools.block.label}}</a>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.ignore.title}}" data-cmd="ignore">{{$tools.ignore.label}}</a>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.archive.title}}" data-cmd="archive">{{$tools.archive.label}}</a>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.hide.title}}" data-cmd="hide">{{$tools.hide.label}}</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item contact-tool" href="#" title="{{$tools.delete.title}}" data-cmd="drop">{{$tools.delete.label}}</a>
+</div>
diff --git a/view/tpl/contact_slider.tpl b/view/tpl/contact_slider.tpl
index 0848df673..dfaaa3967 100644
--- a/view/tpl/contact_slider.tpl
+++ b/view/tpl/contact_slider.tpl
@@ -1,4 +1,4 @@
-<div id="contact-slider" class="slider form-group"><input id="contact-range" type="text" name="fake-closeness" value="{{$val}}" /></div>
+<div id="contact-slider" class="slider mb-3"><input id="contact-range" type="text" name="fake-closeness" value="{{$val}}" /></div>
<script>
$(document).ready(function() {
// The slider does not render correct if width is given in % and
diff --git a/view/tpl/conv_frame.tpl b/view/tpl/conv_frame.tpl
index be74dea39..4237c671b 100644
--- a/view/tpl/conv_frame.tpl
+++ b/view/tpl/conv_frame.tpl
@@ -10,7 +10,7 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="conversation_settings_label">{{$conversation_tools}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body" id="conversation_settings_body">
{{$wait}}
@@ -18,3 +18,4 @@
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
+{{include file="contact_edit_modal.tpl"}}
diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl
index 361392796..47261d070 100644
--- a/view/tpl/conv_item.tpl
+++ b/view/tpl/conv_item.tpl
@@ -28,19 +28,25 @@
{{/if}}
<div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
{{if $item.thr_parent}}
- <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" title="{{$item.top_hint}}" class="float-right"><i class="fa fa-angle-double-up">&nbsp;&nbsp;&nbsp;</i></a>
+ <a href="javascript:doscroll('{{$item.thr_parent}}',{{$item.parent}});" title="{{$item.top_hint}}" class="float-end"><i class="fa fa-angle-double-up">&nbsp;&nbsp;&nbsp;</i></a>
{{/if}}
{{if $item.pinned}}
- <span class="float-right wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
+ <span class="float-end wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
{{/if}}
<div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
- <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" loading="lazy" data-toggle="dropdown" />
+ {{if $item.contact_id}}
+ <div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
+ {{/if}}
+ <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" loading="lazy" data-bs-toggle="dropdown" />
+ {{if $item.author_is_group_actor}}
+ <i class="fa fa-comments-o wall-item-photo-group-actor" title="{{$item.author_is_group_actor}}"></i>
+ {{/if}}
{{if $item.thread_author_menu}}
- <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-toggle="dropdown"></i>
+ <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
<div class="dropdown-menu">
{{foreach $item.thread_author_menu as $mitem}}
- <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
+ <a class="dropdown-item{{if $mitem.class}} {{$mitem.class}}{{/if}}" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}}{{if $mitem.data}} {{$mitem.data}}{{/if}}>{{$mitem.title}}</a>
{{/foreach}}
</div>
{{/if}}
@@ -48,7 +54,7 @@
</div>
{{if $item.lock}}
<div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else}}fa-lock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
<div id="panel-{{$item.id}}" class="dropdown-menu"></div>
</div>
{{/if}}
@@ -78,7 +84,7 @@
</div>
{{/if}}
<div class="p-2 clearfix wall-item-tools">
- <div class="float-right wall-item-tools-right">
+ <div class="float-end wall-item-tools-right">
<div class="btn-group">
<div id="like-rotator-{{$item.id}}" class="spinner-wrapper">
<div class="spinner s"></div>
@@ -86,10 +92,10 @@
</div>
{{if $item.toplevel && $item.emojis && $item.reactions}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-react-{{$item.id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-react-{{$item.id}}">
<i class="fa fa-smile-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{foreach $item.reactions as $react}}
<a class="dropdown-item clearfix" href="#" onclick="jotReact({{$item.id}},'{{$react}}'); return false;"><img class="menu-img-2" src="/images/emoji/{{$react}}.png" alt="{{$react}}" /></a>
{{/foreach}}
@@ -108,16 +114,16 @@
</button>
{{/if}}
{{if $item.reply_to}}
- <button type="button" title="{{$item.reply_to.0}}" class="btn btn-outline-secondary btn-sm" onclick="doreply({{$item.parent}}, {{$item.id}}, '{{$item.author_id}}', '{{$item.reply_to.2}} {{$item.name}}'); return false;">
+ <button type="button" title="{{$item.reply_to.0}}" class="btn btn-outline-secondary btn-sm" onclick="doreply({{$item.parent}}, {{$item.id}}, '{{$item.author_id}}', '{{$item.reply_to.2}} {{$item.name|escape:javascript}}');">
<i class="fa fa-reply" ></i>
</button>
{{/if}}
{{if $item.isevent}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-attend-menu-{{$item.id}}" title="{{$item.attend_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-attend-menu-{{$item.id}}" title="{{$item.attend_title}}">
<i class="fa fa-calendar-check-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#" title="{{$item.attend.0}}" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendyes'); return false;">
<i class="item-act-list fa fa-check{{if $item.my_responses.attend}} ivoted{{/if}}" ></i> {{$item.attend.0}}
</a>
@@ -132,10 +138,10 @@
{{/if}}
{{if $item.canvote}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-consensus-menu-{{$item.id}}" title="{{$item.vote_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-consensus-menu-{{$item.id}}" title="{{$item.vote_title}}">
<i class="fa fa-check-square-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-consensus-menu-{{$item.id}}">
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="wall-item-consensus-menu-{{$item.id}}">
<a class="dropdown-item" href="#" title="{{$item.conlabels.0}}" onclick="dolike({{$item.id}},'agree'); return false;">
<i class="item-act-list fa fa-check{{if $item.my_responses.agree}} ivoted{{/if}}" ></i> {{$item.conlabels.0}}
</a>
@@ -149,10 +155,10 @@
</div>
{{/if}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-menu-{{$item.id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-menu-{{$item.id}}">
<i class="fa fa-cog"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}">
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}">
{{if $item.share}}
<a class="dropdown-item" href="#" onclick="jotShare({{$item.id}},{{$item.item_type}}); return false"><i class="generic-icons-nav fa fa-fw fa-retweet" title="{{$item.share.0}}"></i>{{$item.share.0}}</a>
{{/if}}
@@ -189,11 +195,11 @@
{{/foreach}}
{{/if}}
{{if $item.drop.dropping}}
- <a class="dropdown-item" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}'); return false;" title="{{$item.drop.delete}}" ><i class="generic-icons-nav fa fa-fw fa-trash-o"></i>{{$item.drop.delete}}</a>
+ <a class="dropdown-item" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}', '{{$item.mid}}'); return false;" title="{{$item.drop.delete}}" ><i class="generic-icons-nav fa fa-fw fa-trash-o"></i>{{$item.drop.delete}}</a>
{{/if}}
{{if $item.dropdown_extras}}
<div class="dropdown-divider"></div>
- {{$item.dropdown_extras}}
+ {{$item.dropdown_extras}}
{{/if}}
{{if $item.edpost && $item.dreport}}
<div class="dropdown-divider"></div>
@@ -201,7 +207,7 @@
{{/if}}
{{if $item.settings}}
<div class="dropdown-divider"></div>
- <a class="dropdown-item conversation-settings-link" href="" data-toggle="modal" data-target="#conversation_settings">{{$item.settings}}</a>
+ <a class="dropdown-item conversation-settings-link" href="" data-bs-toggle="modal" data-bs-target="#conversation_settings">{{$item.settings}}</a>
{{/if}}
</div>
</div>
@@ -217,27 +223,27 @@
{{/if}}
{{if $item.attachments}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
<div class="dropdown-menu">{{$item.attachments}}</div>
</div>
{{/if}}
{{foreach $item.responses as $verb=>$response}}
{{if $response.count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-toggle="modal" data-target="#{{$verb}}Modal-{{$item.id}}"{{else}} data-toggle="dropdown"{{/if}} id="wall-item-{{$verb}}-{{$item.id}}">{{$response.count}} {{$response.button}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-bs-toggle="modal" data-bs-target="#{{$verb}}Modal-{{$item.id}}"{{else}} data-bs-toggle="dropdown"{{/if}} id="wall-item-{{$verb}}-{{$item.id}}">{{$response.count}} {{$response.button}}</button>
{{if $response.modal}}
<div class="modal" id="{{$verb}}Modal-{{$item.id}}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">{{$response.count}} {{$response.button}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body response-list">
<ul class="nav nav-pills flex-column">{{foreach $response.list as $liker}}<li class="nav-item">{{$liker}}</li>{{/foreach}}</ul>
</div>
<div class="modal-footer clear">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$item.modal_dismiss}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$item.modal_dismiss}}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl
index ee5dc9742..fde78e71e 100644
--- a/view/tpl/conv_list.tpl
+++ b/view/tpl/conv_list.tpl
@@ -29,9 +29,15 @@
<div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}">
<div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}} h-card p-author" id="wall-item-photo-wrapper-{{$item.id}}">
- <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-toggle="dropdown" loading="lazy" /></a>
+ {{if $item.contact_id}}
+ <div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
+ {{/if}}
+ <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-bs-toggle="dropdown" loading="lazy" /></a>
+ {{if $item.author_is_group_actor}}
+ <i class="fa fa-comments-o wall-item-photo-group-actor" title="{{$item.author_is_group_actor}}"></i>
+ {{/if}}
{{if $item.thread_author_menu}}
- <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-toggle="dropdown"></i>
+ <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
<div class="dropdown-menu">
{{foreach $item.thread_author_menu as $mitem}}
<a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
@@ -43,7 +49,7 @@
</div>
{{if $item.lock}}
<div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else}}fa-lock{{/if}} lockview" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
<div id="panel-{{$item.id}}" class="dropdown-menu"></div>
</div>
{{/if}}
@@ -71,13 +77,13 @@
</div>
{{/if}}
<div class="p-2 clearfix wall-item-tools">
- <div class="float-right wall-item-tools-right">
+ <div class="float-end wall-item-tools-right">
{{if $item.toplevel && $item.emojis && $item.reactions}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-react-{{$item.id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-react-{{$item.id}}">
<i class="fa fa-smile-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{foreach $item.reactions as $react}}
<a class="dropdown-item clearfix" href="#" onclick="jotReact({{$item.id}},'{{$react}}'); return false;"><img class="menu-img-2" src="/images/emoji/{{$react}}.png" alt="{{$react}}" /></a>
{{/foreach}}
@@ -97,7 +103,7 @@
{{/if}}
{{if $item.isevent}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-attend-menu-{{$item.id}}" title="{{$item.attend_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-attend-menu-{{$item.id}}" title="{{$item.attend_title}}">
<i class="fa fa-calendar-check-o"></i>
</button>
<div class="dropdown-menu">
@@ -115,7 +121,7 @@
{{/if}}
{{if $item.canvote}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-consensus-menu-{{$item.id}}" title="{{$item.vote_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-consensus-menu-{{$item.id}}" title="{{$item.vote_title}}">
<i class="fa fa-check-square-o"></i>
</button>
<div class="dropdown-menu" role="menu" aria-labelledby="wall-item-consensus-menu-{{$item.id}}">
@@ -124,7 +130,7 @@
</a>
<a class="dropdown-item" href="#" title="{{$item.conlabels.1}}" onclick="dolike({{$item.id}},'disagree'); return false;">
<i class="item-act-list fa fa-times{{if $item.my_responses.disagree}} ivoted{{/if}}" ></i> {{$item.conlabels.1}}
- </a>
+ </a>
<a class="dropdown-item" href="#" title="{{$item.conlabels.2}}" onclick="dolike({{$item.id}},'abstain'); return false;">
<i class="item-act-list fa fa-question{{if $item.my_responses.abstain}} ivoted{{/if}}" ></i> {{$item.conlabels.2}}
</a>
@@ -132,10 +138,10 @@
</div>
{{/if}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-menu-{{$item.id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-menu-{{$item.id}}">
<i class="fa fa-cog"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}">
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}">
{{if $item.share}}
<a class="dropdown-item" href="#" onclick="jotShare({{$item.id}},{{$item.item_type}}); return false"><i class="generic-icons-nav fa fa-fw fa-retweet" title="{{$item.share.0}}"></i>{{$item.share.0}}</a>
{{/if}}
@@ -169,12 +175,16 @@
{{/foreach}}
{{/if}}
{{if $item.drop.dropping}}
- <a class="dropdown-item" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}'); return false;" title="{{$item.drop.delete}}" ><i class="generic-icons-nav fa fa-fw fa-trash-o"></i>{{$item.drop.delete}}</a>
+ <a class="dropdown-item" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}', '{{$item.mid}}'); return false;" title="{{$item.drop.delete}}" ><i class="generic-icons-nav fa fa-fw fa-trash-o"></i>{{$item.drop.delete}}</a>
{{/if}}
- <div class="dropdown-divider"></div>
{{if $item.edpost && $item.dreport}}
+ <div class="dropdown-divider"></div>
<a class="dropdown-item" href="dreport/{{$item.mid}}">{{$item.dreport}}</a>
{{/if}}
+ {{if $item.settings}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item conversation-settings-link" href="" data-toggle="modal" data-target="#conversation_settings">{{$item.settings}}</a>
+ {{/if}}
</div>
</div>
</div>
@@ -188,7 +198,7 @@
{{/if}}
{{if $item.attachments}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
<ul class="dropdown-menu" role="menu" aria-labelledby="attachment-menu-{{$item.id}}">{{$item.attachments}}</ul>
</div>
{{/if}}
@@ -208,20 +218,20 @@
{{foreach $item.responses as $verb=>$response}}
{{if $response.count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-toggle="modal" data-target="#{{$verb}}Modal-{{$item.id}}"{{else}} data-toggle="dropdown"{{/if}} id="wall-item-{{$verb}}-{{$item.id}}">{{$response.count}} {{$response.button}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-bs-toggle="modal" data-bs-target="#{{$verb}}Modal-{{$item.id}}"{{else}} data-bs-toggle="dropdown"{{/if}} id="wall-item-{{$verb}}-{{$item.id}}">{{$response.count}} {{$response.button}}</button>
{{if $response.modal}}
<div class="modal" id="{{$verb}}Modal-{{$item.id}}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{$response.count}} {{$response.button}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body response-list">
<ul class="nav nav-pills flex-column">{{foreach $response.list as $liker}}<li class="nav-item">{{$liker}}</li>{{/foreach}}</ul>
</div>
<div class="modal-footer clear">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$item.modal_dismiss}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$item.modal_dismiss}}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
diff --git a/view/tpl/conversation.tpl b/view/tpl/conversation.tpl
index 82c7be922..6729cf55c 100644
--- a/view/tpl/conversation.tpl
+++ b/view/tpl/conversation.tpl
@@ -9,10 +9,10 @@
<div id="collapsed-comments-{{$thread.id}}" class="collapsed-comments" style="display: none;">
{{/if}}
{{if $item.comment_lastcollapsed}}</div>{{/if}}
-
+
{{include file="{{$item.template}}"}}
-
-
+
+
{{/foreach}}
</div>
{{/foreach}}
diff --git a/view/tpl/cover_photo.tpl b/view/tpl/cover_photo.tpl
index a1c4a922d..7bc72158b 100644
--- a/view/tpl/cover_photo.tpl
+++ b/view/tpl/cover_photo.tpl
@@ -121,7 +121,7 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body" id="embedPhotoModalBody" >
<div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
diff --git a/view/tpl/defperms.tpl b/view/tpl/defperms.tpl
index 29f642cff..5e15a43c9 100644
--- a/view/tpl/defperms.tpl
+++ b/view/tpl/defperms.tpl
@@ -17,7 +17,7 @@
<p>{{$permnote_self}}</p>
</div>
{{if $permcat_enable}}
- <a href="permcats" class="pull-right"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
+ <a href="permcats" class="float-end"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
{{include file="field_select.tpl" field=$permcat}}
{{/if}}
diff --git a/view/tpl/directory_header.tpl b/view/tpl/directory_header.tpl
index 568e03cd0..f5ce7ce0a 100644
--- a/view/tpl/directory_header.tpl
+++ b/view/tpl/directory_header.tpl
@@ -1,10 +1,10 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper clearfix">
- <div class="btn-group pull-right">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$sort}}">
+ <div class="btn-group float-end">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$sort}}">
<i class="fa fa-sort"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="directory?f=&order=date{{$suggest}}">{{$date}}</a>
<a class="dropdown-item" href="directory?f=&order=normal{{$suggest}}">{{$normal}}</a>
<a class="dropdown-item" href="directory?f=&order=reversedate{{$suggest}}">{{$reversedate}}</a>
@@ -17,7 +17,7 @@
{{include file="direntry.tpl"}}
{{/foreach}}
{{** make sure this element is at the bottom - we rely on that in endless scroll **}}
- <div id="page-end" class="float-left w-100"></div>
+ <div id="page-end" class="float-start w-100"></div>
</div>
<script>$(document).ready(function() { loadingPage = false;});</script>
<div id="page-spinner" class="spinner-wrapper">
diff --git a/view/tpl/direntry.tpl b/view/tpl/direntry.tpl
index 015f1102d..5a8e19d12 100644
--- a/view/tpl/direntry.tpl
+++ b/view/tpl/direntry.tpl
@@ -1,6 +1,6 @@
<div class="directory-item{{if $entry.safe}} safe{{/if}}" id="directory-item-{{$entry.hash}}" >
<div class="section-subtitle-wrapper clearfix">
- <div class="pull-right">
+ <div class="float-end">
{{if $entry.viewrate}}
{{if $entry.total_ratings}}<a href="ratings/{{$entry.hash}}" id="dir-rating-{{$entry.hash}}" class="btn btn-outline-secondary btn-sm">{{$entry.total_ratings}}</a>{{/if}}
{{/if}}
diff --git a/view/tpl/dreport.tpl b/view/tpl/dreport.tpl
index 89188891d..87ec1c35f 100644
--- a/view/tpl/dreport.tpl
+++ b/view/tpl/dreport.tpl
@@ -1,8 +1,8 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $table == 'item'}}
- <div class="dropdown pull-right">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$options}}">
+ <div class="dropdown float-end">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$options}}">
<i class="fa fa-cog"></i>
</button>
<div class="dropdown-menu">
diff --git a/view/tpl/edpost_head.tpl b/view/tpl/edpost_head.tpl
index 4f39137ab..94c882d53 100644
--- a/view/tpl/edpost_head.tpl
+++ b/view/tpl/edpost_head.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $cancel}}
<button id="dbtn-cancel" class="btn btn-warning btn-sm" onclick="itemCancel(); return false;">{{$cancel}}</button>
{{/if}}
diff --git a/view/tpl/email_validation.tpl b/view/tpl/email_validation.tpl
index 9913e0971..e16b47dff 100644
--- a/view/tpl/email_validation.tpl
+++ b/view/tpl/email_validation.tpl
@@ -5,7 +5,7 @@
<form action="email_validation/{{$email}}" method="post">
{{include file="field_input.tpl" field=$token}}
-<div class="pull-right submit-wrapper">
+<div class="float-end submit-wrapper">
<button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
</div>
<div class="resend-email" >
diff --git a/view/tpl/event_form.tpl b/view/tpl/event_form.tpl
index d07a06b67..c56c5d82f 100644
--- a/view/tpl/event_form.tpl
+++ b/view/tpl/event_form.tpl
@@ -31,14 +31,14 @@
</div>
{{/if}}
- <div class="form-group">
- <div class="form-group">
+ <div class="mb-3">
+ <div class="mb-3">
<div id="event-desc-text"><b>{{$d_text}}</b></div>
<textarea id="comment-edit-text-desc" class="form-control" name="desc" >{{$d_orig}}</textarea>
</div>
<div id="comment-tools-desc" class="comment-tools" style="display: block;" >
<div id="comment-edit-bb-desc" class="btn-toolbar">
- <div class='btn-group mr-2'>
+ <div class='btn-group me-2'>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edbold}}" onclick="insertbbcomment('none','b', 'desc');">
<i class="fa fa-bold comment-icon"></i>
</button>
@@ -69,14 +69,14 @@
</div>
</div>
</div>
- <div class="form-group">
- <div class="form-group">
+ <div class="mb-3">
+ <div class="mb-3">
<div id="event-location-text"><b>{{$l_text}}</b></div>
<textarea id="comment-edit-text-loc" class="form-control" name="location">{{$l_orig}}</textarea>
</div>
<div id="comment-tools-loc" class="comment-tools" style="display: block;" >
<div id="comment-edit-bb-loc" class="btn-toolbar">
- <div class='btn-group mr-2'>
+ <div class='btn-group me-2'>
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edbold}}" onclick="insertbbcomment('none','b', 'loc');">
<i class="fa fa-bold comment-icon"></i>
</button>
@@ -116,10 +116,10 @@
<div class="clear"></div>
<button type="button" class="btn btn-outline-secondary btn-sm" onclick="openClose('advanced');">{{$advanced}}</button>
- <div class="btn-group float-right">
+ <div class="btn-group float-end">
<button id="event-edit-preview-btn" class="btn btn-outline-secondary btn-sm" type="button" title="{{$preview}}" onclick="doEventPreview();"><i class="fa fa-eye" ></i></button>
{{if ! $eid}}
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" type="button" data-toggle="modal" data-target="#aclModal" title="{{$perms_label}}"><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" type="button" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$perms_label}}"><i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i></button>
{{/if}}
<button id="event-submit" class="btn btn-primary btn-sm" type="submit" name="submit">{{$submit}}</button>
</div>
diff --git a/view/tpl/events-js.tpl b/view/tpl/events-js.tpl
index d3f3414ff..5aa5b7ef8 100644
--- a/view/tpl/events-js.tpl
+++ b/view/tpl/events-js.tpl
@@ -1,8 +1,8 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<div class="dropdown">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i>&nbsp;{{$view_label}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown"><i class="fa fa-cog"></i>&nbsp;{{$view_label}}</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#" onclick="changeView('changeView', 'month'); return false;">{{$month}}</a>
<a class="dropdown-item" href="#" onclick="changeView('changeView', 'agendaWeek'); return false;">{{$week}}</a>
diff --git a/view/tpl/events_cal-js.tpl b/view/tpl/events_cal-js.tpl
index 2c4d961f9..a56c8b348 100644
--- a/view/tpl/events_cal-js.tpl
+++ b/view/tpl/events_cal-js.tpl
@@ -1,7 +1,7 @@
{{$tabs}}
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<div class="btn-group">
<button class="btn btn-outline-secondary btn-sm" onclick="changeView('prev', false);" title="{{$prev}}"><i class="fa fa-backward"></i></button>
<button id="today-btn" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><div id="events-spinner" class="spinner s"></div><i class="fa fa-bullseye" style="display: none; width: 1rem;"></i></button>
diff --git a/view/tpl/events_tools_side.tpl b/view/tpl/events_tools_side.tpl
index e22f95c1e..bad1038a3 100644
--- a/view/tpl/events_tools_side.tpl
+++ b/view/tpl/events_tools_side.tpl
@@ -7,7 +7,7 @@
<div id="event-upload-form" class="sub-menu-wrapper">
<div class="sub-menu">
<form action="events" enctype="multipart/form-data" method="post" name="event-upload-form" id="event-upload-form">
- <div class="form-group">
+ <div class="mb-3">
<input id="event-upload-choose" class="form-control-file w-100" type="file" name="userfile" />
</div>
<button id="dbtn-submit" class="btn btn-primary btn-sm" type="submit" name="submit" >{{$submit}}</button>
diff --git a/view/tpl/field_acheckbox.tpl b/view/tpl/field_acheckbox.tpl
index 4c8b62f36..44f65fefd 100644
--- a/view/tpl/field_acheckbox.tpl
+++ b/view/tpl/field_acheckbox.tpl
@@ -1,24 +1,31 @@
-<tr class="highlight">
+<tr>
<td>
- <label class="mainlabel" for='me_id_{{$field.0}}'>{{$field.1}}</label><br>
- <span class='field_abook_help'>{{$field.6}}</span>
+ <label class="mainlabel" for="me_id_{{$field.0}}">{{$field.1}}</label>
+ <span class="field_abook_help">{{$field.6}}</span>
</td>
- {{if $notself}}
- <td class="abook-them">
- {{if $field.2 == 1}}<i class="fa fa-check-square-o"></i>{{/if}}
- {{if $field.2 == 0}}<i class="fa fa-square-o"></i>{{/if}}
- </td>
- {{/if}}
- <td class="abook-me">
- {{if $self || !$field.5 }}
- <input type="checkbox" name='{{$field.0}}' class='abook-edit-me' id='me_id_{{$field.0}}' value="{{$field.4}}" {{if $field.3}}checked="checked"{{/if}} />
- {{/if}}
- {{if $notself && $field.5}}
- <input type="hidden" name='{{$field.0}}' value="{{if $field.7}}1{{else}}0{{/if}}" />
- {{if $field.3}}<i class="fa fa-check-square-o"></i>{{else}}<i class="fa fa-square-o"></i>{{/if}}
+ <td>
+ {{if $field.5}}
+ <span class="text-nowrap text-danger">
+ {{$inherited}}
+ {{if $field.7}}
+ <i class="fa fa-check-square-o"></i>
+ {{else}}
+ <i class="fa fa-square-o"></i>
+ {{/if}}
+ </span>
{{/if}}
</td>
<td>
- {{if $field.5}}<span class="permission-inherited">{{$inherited}}{{if $self}}{{if $field.7}} <i class="fa fa-check-square-o"></i>{{else}} <i class="fa fa-square-o"></i>{{/if}}{{/if}}</span>{{/if}}
+ {{if $is_system_role}}
+ {{if $field.3}}
+ <i class="fa fa-check-square-o"></i>
+ {{else}}
+ <i class="fa fa-square-o"></i>
+ {{/if}}
+ {{else}}
+ <input type="checkbox" name="{{$field.0}}" value="{{$field.4}}" {{if $field.3}}checked="checked"{{/if}} />
+ {{/if}}
+
</td>
+
</tr>
diff --git a/view/tpl/field_checkbox.tpl b/view/tpl/field_checkbox.tpl
index b1665f75f..670bb7e29 100644
--- a/view/tpl/field_checkbox.tpl
+++ b/view/tpl/field_checkbox.tpl
@@ -1,9 +1,9 @@
- <div id="{{$field.0}}_container" class="clearfix form-group checkbox">
+ <div id="{{$field.0}}_container" class="clearfix onoffswitch checkbox mb-3">
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.6}}<sup class="required zuiqmid"> {{$field.6}}</sup>{{/if}}</label>
- <div class="float-right"><input type="checkbox" name='{{$field.0}}' id='id_{{$field.0}}' value="1" {{if $field.2}}checked="checked"{{/if}} {{if $field.5}}{{$field.5}}{{/if}} /><label class="switchlabel" for='id_{{$field.0}}'> <span class="onoffswitch-inner" data-on='{{if $field.4}}{{$field.4.1}}{{/if}}' data-off='{{if $field.4}}{{$field.4.0}}{{/if}}'></span><span class="onoffswitch-switch"></span></label></div>
+ <div class="float-end"><input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="1" {{if $field.2}}checked="checked"{{/if}} {{if $field.5}}{{$field.5}}{{/if}} /><label class="switchlabel" for='id_{{$field.0}}'> <span class="onoffswitch-inner" data-on='{{if $field.4}}{{$field.4.1}}{{/if}}' data-off='{{if $field.4}}{{$field.4.0}}{{/if}}'></span><span class="onoffswitch-switch"></span></label></div>
<small class="form-text text-muted">{{$field.3}}</small>
</div>
-{{*
+{{*
COMMENTS for this template:
@author hilmar runge, 2020.01
$field array index:
diff --git a/view/tpl/field_colorinput.tpl b/view/tpl/field_colorinput.tpl
index 9b6f33462..f04d70c3e 100644
--- a/view/tpl/field_colorinput.tpl
+++ b/view/tpl/field_colorinput.tpl
@@ -1,4 +1,4 @@
- <div class='form-group field input color'>
+ <div class='mb-3 field input color'>
<label for='id_{{$field.0}}' id='label_{{$field.0}}'>{{$field.1}}</label>
<input class='form-control color' name='{{$field.0}}' id='id_{{$field.0}}' type="text" value="{{$field.2}}">{{if $field.4}} <span class="required">{{$field.4}}</span> {{/if}}
<span id='help_{{$field.0}}' class='help-block'>{{$field.3}}</span>
diff --git a/view/tpl/field_combobox.tpl b/view/tpl/field_combobox.tpl
index 12d00a08d..a3e5ff8e2 100644
--- a/view/tpl/field_combobox.tpl
+++ b/view/tpl/field_combobox.tpl
@@ -1,4 +1,4 @@
-<div class="form-group">
+<div class="mb-3">
<label class="" for='id_{{$field.0}}' id='id_{{$field.0}}_label'>{{$field.1}}</label>
<input class="form-control" id="id_{{$field.0}}" type="text" list="data_{{$field.0}}"{{if $field.5}} {{$field.5}}{{/if}}>
<datalist id="data_{{$field.0}}" >
diff --git a/view/tpl/field_custom.tpl b/view/tpl/field_custom.tpl
index 907b4c50e..c7716a1de 100644
--- a/view/tpl/field_custom.tpl
+++ b/view/tpl/field_custom.tpl
@@ -1,4 +1,4 @@
- <div class='form-group field custom'>
+ <div class='mb-3 field custom'>
<label for='{{$field.0}}'>{{$field.1}}</label>
{{$field.2}}
<span class='help-block'>{{$field.3}}</span>
diff --git a/view/tpl/field_duration.qmc.tpl b/view/tpl/field_duration.qmc.tpl
index e38d4621c..0bc78f2f5 100644
--- a/view/tpl/field_duration.qmc.tpl
+++ b/view/tpl/field_duration.qmc.tpl
@@ -1,4 +1,4 @@
-{{if $wrapper!="no"}}<div id="{{$qmc}}{{$field.name}}_wrapper" class="form-group">{{/if}}
+{{if $wrapper!="no"}}<div id="{{$qmc}}{{$field.name}}_wrapper" class="mb-3">{{/if}}
<label for="{{$qmc}}{{$field.name}}fs">{{$label}}
{{if $qmcid}}<sup class="zuiqmid required">{{$qmcid}}</sup>{{/if}}
diff --git a/view/tpl/field_input.tpl b/view/tpl/field_input.tpl
index c7007c159..2f9f83ac5 100644
--- a/view/tpl/field_input.tpl
+++ b/view/tpl/field_input.tpl
@@ -1,9 +1,9 @@
- <div id="id_{{$field.0}}_wrapper" class="form-group">
+ <div id="id_{{$field.0}}_wrapper" class="mb-3">
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<sup class="required zuiqmid"> {{$field.4}}</sup>{{/if}}</label>
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}"{{if $field.5}} {{$field.5}}{{/if}}>
<small id="help_{{$field.0}}" class="form-text text-muted">{{$field.3}}</small>
</div>
-{{*
+{{*
COMMENTS for this template:
@author hilmar runge, 2020.01
$field array index:
diff --git a/view/tpl/field_intcheckbox.tpl b/view/tpl/field_intcheckbox.tpl
index abfe6e189..7b7b6de8a 100644
--- a/view/tpl/field_intcheckbox.tpl
+++ b/view/tpl/field_intcheckbox.tpl
@@ -1,5 +1,5 @@
- <div class="clearfix form-group checkbox">
+ <div id="{{$field.0}}_container" class="clearfix onoffswitch mb-3 checkbox">
<label for="id_{{$field.0}}">{{$field.1}}</label>
- <div class="pull-right"><input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.3}}" {{if $field.2}}checked="checked"{{/if}}><label class="switchlabel" for="id_{{$field.0}}"> <span class="onoffswitch-inner" data-on="{{if $field.5}}{{$field.5.1}}{{/if}}" data-off="{{if $field.5}}{{$field.5.0}}{{/if}}"></span><span class="onoffswitch-switch"></span> </label></div>
+ <div class="float-end"><input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.3}}" {{if $field.2}}checked="checked"{{/if}}><label class="switchlabel" for="id_{{$field.0}}"> <span class="onoffswitch-inner" data-on="{{if $field.5}}{{$field.5.1}}{{/if}}" data-off="{{if $field.5}}{{$field.5.0}}{{/if}}"></span><span class="onoffswitch-switch"></span> </label></div>
<small class="form-text text-muted">{{$field.4}}</small>
</div>
diff --git a/view/tpl/field_password.tpl b/view/tpl/field_password.tpl
index fa5e14582..7baad7d48 100644
--- a/view/tpl/field_password.tpl
+++ b/view/tpl/field_password.tpl
@@ -1,4 +1,4 @@
- <div class="form-group">
+ <div class="mb-3">
<label for="id_{{$field.0}}">{{$field.1}}</label>
<input class="form-control" type="password" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.5}} {{$field.5}}{{/if}}>{{if $field.4}} <span class="required">{{$field.4}}</span> {{/if}}
<small id="help_{{$field.0}}" class="form-text text-muted">{{$field.3}}</small>
diff --git a/view/tpl/field_radio.tpl b/view/tpl/field_radio.tpl
index 6b5f52de6..2e4afd426 100644
--- a/view/tpl/field_radio.tpl
+++ b/view/tpl/field_radio.tpl
@@ -1,4 +1,4 @@
- <div class="form-group field radio">
+ <div class="mb-3 field radio">
<label for='id_{{$field.0}}_{{$field.2}}'>
<input type="radio" name='{{$field.0}}' id='id_{{$field.0}}_{{$field.2}}' value="{{$field.2}}" {{if $field.4}}checked="true"{{/if}}>
{{$field.1}}
diff --git a/view/tpl/field_select.tpl b/view/tpl/field_select.tpl
index 57be3b1ab..a98a26799 100644
--- a/view/tpl/field_select.tpl
+++ b/view/tpl/field_select.tpl
@@ -1,4 +1,4 @@
- <div id="id_{{$field.0}}_wrapper" class="form-group">
+ <div id="id_{{$field.0}}_wrapper" class="mb-3">
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.5}}<sup class="required zuiqmid"> {{$field.5}}</sup>{{/if}}</label>
<select class="form-control" name="{{$field.0}}" id="id_{{$field.0}}">
{{foreach $field.4 as $opt=>$val}}<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>{{/foreach}}
@@ -17,6 +17,6 @@
.5 label text addition, used for qmc
css classes used:
.required, .code
- .form-group, .form-control, .form-text, .text-muted
+ .mb-3, .form-control, .form-text, .text-muted
*}}
diff --git a/view/tpl/field_select_disabled.tpl b/view/tpl/field_select_disabled.tpl
index ee5e1508f..448c097c3 100644
--- a/view/tpl/field_select_disabled.tpl
+++ b/view/tpl/field_select_disabled.tpl
@@ -1,4 +1,4 @@
- <div class='form-group field select'>
+ <div class='mb-3 field select'>
<label style="font-weight: normal;" for='id_{{$field.0}}'>{{$field.1}}</label>
<select class="form-control" disabled="true" name='{{$field.0}}' id='id_{{$field.0}}'>
{{foreach $field.4 as $opt=>$val}}<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>{{/foreach}}
diff --git a/view/tpl/field_select_grouped.tpl b/view/tpl/field_select_grouped.tpl
index eb228b086..9816a97f1 100644
--- a/view/tpl/field_select_grouped.tpl
+++ b/view/tpl/field_select_grouped.tpl
@@ -1,4 +1,4 @@
- <div id='id_{{$field.0}}_wrapper' class='form-group field select'>
+ <div id='id_{{$field.0}}_wrapper' class='mb-3 field select'>
<label for='id_{{$field.0}}'>{{$field.1}}</label>
<select class="form-control" name='{{$field.0}}' id='id_{{$field.0}}'>
{{foreach $field.4 as $group=>$opts}}
diff --git a/view/tpl/field_select_raw.tpl b/view/tpl/field_select_raw.tpl
index 2780df58c..0f36e18c6 100644
--- a/view/tpl/field_select_raw.tpl
+++ b/view/tpl/field_select_raw.tpl
@@ -1,4 +1,4 @@
- <div class='form-group field select'>
+ <div class='mb-3 field select'>
<label for='id_{{$field.0}}'>{{$field.1}}</label>
<select class="form-control" name='{{$field.0}}' id='id_{{$field.0}}'>
{{$field.4}}
diff --git a/view/tpl/field_textarea.tpl b/view/tpl/field_textarea.tpl
index 437dece93..684043830 100644
--- a/view/tpl/field_textarea.tpl
+++ b/view/tpl/field_textarea.tpl
@@ -1,4 +1,4 @@
- <div class="form-group">
+ <div class="mb-3">
<label for="id_{{$field.0}}">{{$field.1}}</label>
<textarea class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.4}}{{$field.4}}{{/if}} >{{$field.2}}</textarea>
<small class="form-text text-muted">{{$field.3}}</small>
diff --git a/view/tpl/field_themeselect.tpl b/view/tpl/field_themeselect.tpl
index 7a529774c..99d36b0d2 100644
--- a/view/tpl/field_themeselect.tpl
+++ b/view/tpl/field_themeselect.tpl
@@ -1,7 +1,7 @@
{{if $field.5 == 'preview'}}
<script>$(document).ready(function(){ previewTheme($("#id_{{$field.0}}")[0]); });</script>
{{/if}}
- <div class='form-group field select'>
+ <div class='mb-3 field select'>
<label for='id_{{$field.0}}'>{{$field.1}}</label>
<select class="form-control" name='{{$field.0}}' id='id_{{$field.0}}' {{if $field.5 == 'preview'}}onchange="previewTheme(this);"{{/if}} >
{{foreach $field.4 as $opt=>$val}}<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>{{/foreach}}
diff --git a/view/tpl/field_yesno.tpl b/view/tpl/field_yesno.tpl
index 8a4cda55b..cd05b06d0 100644
--- a/view/tpl/field_yesno.tpl
+++ b/view/tpl/field_yesno.tpl
@@ -1,4 +1,4 @@
- <div class='clearfix form-group'>
+ <!--div class='clearfix mb-3'>
<label class="mainlabel" for='id_{{$field.0}}'>{{$field.1}}</label>
<div class='onoff' id="id_{{$field.0}}_onoff">
<input type="hidden" name='{{$field.0}}' id='id_{{$field.0}}' value="{{$field.2}}">
@@ -10,4 +10,10 @@
</a>
</div>
<small class='form-text text-muted'>{{$field.3}}</small>
- </div>
+ </div-->
+
+<div class="form-check form-switch">
+ <input class="form-check-input" type="checkbox" id="id_{{$field.0}}" value="{{$field.2}}" name="{{$field.0}}">
+ <label class="form-check-label" for="id_{{$field.0}}">{{$field.1}}</label>
+ <small class='form-text text-muted'>{{$field.3}}</small>
+</div>
diff --git a/view/tpl/filer_dialog.tpl b/view/tpl/filer_dialog.tpl
index 61860d10f..9786aa310 100644
--- a/view/tpl/filer_dialog.tpl
+++ b/view/tpl/filer_dialog.tpl
@@ -3,15 +3,14 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{$title}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
- <span aria-hidden="true">&times;</span>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close">
</button>
</div>
<div class="modal-body">
{{include file="field_combobox.tpl"}}
</div>
<div class="modal-footer">
- <button type="button" class="btn btn-secondary" data-dismiss="modal">{{$cancel}}</button>
+ <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">{{$cancel}}</button>
<button id="filer_save" type="button" class="btn btn-primary">{{$submit}}</button>
</div>
</div>
diff --git a/view/tpl/follow.tpl b/view/tpl/follow.tpl
index da472fa9b..7adbc03ec 100644
--- a/view/tpl/follow.tpl
+++ b/view/tpl/follow.tpl
@@ -3,9 +3,7 @@
<form action="follow" method="post" />
<div class="input-group">
<input class="form-control" type="text" name="url" title="{{$hint}}" placeholder="{{$desc}}" />
- <div class="input-group-append">
- <button class="btn btn-sm btn-success" type="submit" name="submit" value="{{$follow}}" title="{{$follow}}"><i class="fa fa-fw fa-plus"></i></button>
- </div>
+ <button class="btn btn-success" type="submit" name="submit" value="{{$follow}}" title="{{$follow}}"><i class="fa fa-fw fa-plus"></i></button>
</div>
</form>
{{if $abook_usage_message}}
diff --git a/view/tpl/generic_addon_settings.tpl b/view/tpl/generic_addon_settings.tpl
index ae603056b..aed8276da 100644
--- a/view/tpl/generic_addon_settings.tpl
+++ b/view/tpl/generic_addon_settings.tpl
@@ -1,7 +1,7 @@
<div class="panel" id="settings">
<div class="section-subtitle-wrapper" role="tab" id="{{$addon.0}}-settings">
<h3>
- <a title="{{$addon.2}}" data-toggle="collapse" data-target="#{{$addon.0}}-settings-content" href="#" aria-controls="{{$addon.0}}-settings-content">
+ <a title="{{$addon.2}}" data-bs-toggle="collapse" data-bs-target="#{{$addon.0}}-settings-content" href="#" aria-controls="{{$addon.0}}-settings-content">
{{if $addon.1|substr:0:1 === '<'}}
{{$addon.1}}
{{else}}
@@ -10,7 +10,7 @@
</a>
</h3>
</div>
- <div id="{{$addon.0}}-settings-content" class="panel-collapse collapse" role="tabpanel" aria-labelledby="{{$addon.0}}-settings" data-parent="#settings">
+ <div id="{{$addon.0}}-settings-content" class="panel-collapse collapse" role="tabpanel" aria-labelledby="{{$addon.0}}-settings" data-bs-parent="#settings">
<div class="section-content-tools-wrapper">
{{$content}}
{{if $addon.0}}
diff --git a/view/tpl/generic_modal.tpl b/view/tpl/generic_modal.tpl
index 18279b6f7..84e8e66cf 100644
--- a/view/tpl/generic_modal.tpl
+++ b/view/tpl/generic_modal.tpl
@@ -3,11 +3,11 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="generic-modal-title-{{$id}}">{{$title}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body" id="generic-modal-body-{{$id}}"></div>
<div class="modal-footer">
- <button id="generic-modal-cancel-{{$id}}" type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$cancel}}</button>
+ <button id="generic-modal-cancel-{{$id}}" type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$cancel}}</button>
{{if $ok}}
<button id="generic-modal-ok-{{$id}}" type="button" class="btn btn-primary">{{$ok}}</button>
{{/if}}
diff --git a/view/tpl/group_edit.tpl b/view/tpl/group_edit.tpl
index 60038701e..f6ab1e594 100644
--- a/view/tpl/group_edit.tpl
+++ b/view/tpl/group_edit.tpl
@@ -1,23 +1,24 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="float-right">
- <button type="button" class="btn btn-sm btn-outline-secondary" onclick="openClose('group_tools')"><i class="fa fa-pencil"></i> {{$details_label}}</button>
+ <div class="float-end">
<button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="fa fa-expand"></i></button>
<button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="fa fa-compress"></i></button>
</div>
<h2>{{$title}}</h2>
</div>
- <div id="group_tools" class="clearfix section-content-tools-wrapper" style="display: none">
+ <div id="group_tools" class="clearfix section-content-tools-wrapper">
<form action="group/{{$gid}}" id="group-edit-form" method="post" >
<input type='hidden' name='form_security_token' value='{{$form_security_token_edit}}'>
{{include file="field_input.tpl" field=$gname}}
{{include file="field_checkbox.tpl" field=$public}}
+ {{include file="field_checkbox.tpl" field=$is_default_acl}}
+ {{include file="field_checkbox.tpl" field=$is_default_group}}
{{$pgrp_extras}}
- <a href="group/drop/{{$gid}}?t={{$form_security_token_drop}}" onclick="return confirmDelete();" class="btn btn-sm btn-danger">
+ <a href="group/drop/{{$gid}}?t={{$form_security_token_drop}}" onclick="return confirmDelete();" class="btn btn-outline-danger">
{{$delete}}
</a>
- <button type="submit" name="submit" class="btn btn-sm btn-primary float-right">{{$submit}}</button>
+ <button type="submit" name="submit" class="btn btn-primary float-end">{{$submit}}</button>
</form>
</div>
<div class="section-content-info-wrapper">
diff --git a/view/tpl/group_selection.tpl b/view/tpl/group_selection.tpl
index 270d2aa79..7db80e06f 100644
--- a/view/tpl/group_selection.tpl
+++ b/view/tpl/group_selection.tpl
@@ -1,8 +1,8 @@
-<div class="form-group field custom">
-<label for="group-selection" id="group-selection-lbl">{{$label}}</label>
-<select class="form-control" name="group-selection" id="group-selection" >
-{{foreach $groups as $group}}
-<option value="{{$group.id}}" {{if $group.selected}}selected="selected"{{/if}} >{{$group.name}}</option>
-{{/foreach}}
-</select>
+<div class="mb-3 field custom">
+ <label for="id_{{$form_id}}">{{$label}}</label>
+ <select class="form-control" name="{{$form_id}}" id="{{$form_id}}" >
+ {{foreach $groups as $group}}
+ <option value="{{$group.id}}" {{if $group.selected}}selected="selected"{{/if}} >{{$group.name}}</option>
+ {{/foreach}}
+ </select>
</div>
diff --git a/view/tpl/group_side.tpl b/view/tpl/group_side.tpl
index 14f714ae9..979d20aa5 100644
--- a/view/tpl/group_side.tpl
+++ b/view/tpl/group_side.tpl
@@ -13,9 +13,11 @@
<a class="nav-link{{if $group.selected}} active{{/if}}" href="{{$group.href}}">{{$group.text}}</a>
</li>
{{/foreach}}
+ {{if $createtext}}
<li class="nav-item">
- <a class="nav-link" href="group/new" title="{{$createtext}}" ><i class="fa fa-plus-circle"></i> {{$createtext}}</a>
+ <a class="nav-link" href="group/new" title="{{$createtext}}" ><i class="fa fa-external-link"></i> {{$createtext}}</a>
</li>
+ {{/if}}
</ul>
</div>
diff --git a/view/tpl/groupeditor.tpl b/view/tpl/groupeditor.tpl
index 94c275c7e..4ccedaa39 100644
--- a/view/tpl/groupeditor.tpl
+++ b/view/tpl/groupeditor.tpl
@@ -1,10 +1,10 @@
-<div id="contacts" class="list-group float-left w-50 pr-2">
+<div id="contacts" class="list-group float-start w-50 pr-2">
<h3>{{$groupeditor.label_contacts}}</h3>
<div id="group-all-contacts" class="contact_list">
{{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}}
</div>
</div>
-<div id="group" class="list-group float-right w-50">
+<div id="group" class="list-group float-end w-50">
<h3>{{$groupeditor.label_members}}</h3>
<div id="group-members" class="contact_list">
{{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}}
diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl
index ecb30afd3..bf61a7ee4 100644
--- a/view/tpl/head.tpl
+++ b/view/tpl/head.tpl
@@ -17,6 +17,7 @@
var channelId = {{if $channel_id}}{{$channel_id}}{{else}}false{{/if}};{{* Used in e.g. autocomplete *}}
var preloadImages = {{$preload_images}};
var auto_save_draft = {{$auto_save_draft}};
+ {{if $module}}var module = '{{$module}}';{{/if}}
</script>
diff --git a/view/tpl/help.tpl b/view/tpl/help.tpl
index c523c4115..5022e7b1b 100644
--- a/view/tpl/help.tpl
+++ b/view/tpl/help.tpl
@@ -1,11 +1,11 @@
<div id="help-content" class="generic-content-wrapper">
<div class="clearfix section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown">
<i class="fa fa-language" style="font-size: 1.4em;"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right flex-column lang-selector">
+ <div class="dropdown-menu dropdown-menu-end flex-column lang-selector">
<a class="dropdown-item lang-choice" href="/help">de</a>
<a class="dropdown-item lang-choice" href="/help">en</a>
<a class="dropdown-item lang-choice" href="/help">es</a>
diff --git a/view/tpl/hq.tpl b/view/tpl/hq.tpl
deleted file mode 100644
index 099d892bb..000000000
--- a/view/tpl/hq.tpl
+++ /dev/null
@@ -1,4 +0,0 @@
-<div id="jot-popup">
-{{$editor}}
-</div>
-
diff --git a/view/tpl/hq_controls.tpl b/view/tpl/hq_controls.tpl
index d7f6d436f..3adbfa7c0 100644
--- a/view/tpl/hq_controls.tpl
+++ b/view/tpl/hq_controls.tpl
@@ -1,8 +1,7 @@
-<div class="widget">
- <h3>{{$title}}</h3>
- <ul class="nav nav-pills flex-column">
- {{foreach $menu as $m}}
- <li class="nav-item"><a href="{{$m.href}}" id="{{$m.id}}" class="nav-link{{if $m.class}} {{$m.class}}{{/if}}">{{$m.label}}</a></li>
- {{/foreach}}
- </ul>
+<div class="mb-3{{if $wrapper_class}} {{$wrapper_class}}{{/if}}">
+ {{foreach $entries as $e}}
+ <button class="{{$e.class}} rounded-circle{{if $entry_class}} {{$entry_class}}{{/if}}" type="{{$e.type}}" title="{{$e.label}}"{{if $e.extra}} {{$e.extra}}{{/if}}>
+ {{if $e.icon}}<i class="fa fa-{{$e.icon}} mt-1 mb-1"></i>{{/if}}
+ </button>
+ {{/foreach}}
</div>
diff --git a/view/tpl/import_progress.tpl b/view/tpl/import_progress.tpl
new file mode 100644
index 000000000..05f6c09e3
--- /dev/null
+++ b/view/tpl/import_progress.tpl
@@ -0,0 +1,42 @@
+<h3>{{$chtitle_str}}: 100%</h3>
+
+<div>
+ <div class="progress mb-2">
+ <div class="progress-bar progress-bar-striped bg-primary" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
+ </div>
+ <div>
+ <span class="text-muted">{{$chcompleted_str}}</span>
+ </div>
+</div>
+
+<hr>
+
+<h3>{{$ctitle_str}}: <span id="cprogress-label">{{$cprogress_str}}</span></h3>
+
+<div id="cprogress">
+ <div class="progress mb-2">
+ <div id="cprogress-bar" class="progress-bar progress-bar-striped bg-warning{{if $cprogress < 100}} progress-bar-animated{{/if}}" role="progressbar" style="width: {{$cprogress}}%" aria-valuenow="{{$cprogress}}" aria-valuemin="0" aria-valuemax="100"></div>
+ </div>
+ <div id="cprogress-resume" class="{{if $cprogress == 100}}d-none{{/if}}">
+ <a href="/import_progress/resume_itemsync" class="text-capitalize">[ {{$resume_str}} ]</a> <span class="text-muted">{{$resume_helper_str}}</span>
+ </div>
+ <div id="cprogress-completed" class="{{if $cprogress < 100}}d-none{{/if}}">
+ <span class="text-muted">{{$ccompleted_str}}</span>
+ </div>
+</div>
+
+<hr>
+
+<h3>{{$ftitle_str}}: <span id="fprogress-label">{{$fprogress_str}}</span></h3>
+
+<div id="fprogress">
+ <div class="progress mb-2">
+ <div id="fprogress-bar" class="progress-bar progress-bar-striped bg-info{{if $fprogress < 100}} progress-bar-animated{{/if}}" role="progressbar" style="width: {{$fprogress}}%" aria-valuenow="{{$fprogress}}" aria-valuemin="0" aria-valuemax="100"></div>
+ </div>
+ <div id="fprogress-resume" class="{{if $fprogress == 100}}d-none{{/if}}">
+ <a href="/import_progress/resume_filesync" class="text-capitalize">[ {{$resume_str}} ]</a> <span class="text-muted">{{$resume_helper_str}}</span>
+ </div>
+ <div id="fprogress-completed" class="{{if $fprogress < 100}}d-none{{/if}}">
+ <span class="text-muted">{{$fcompleted_str}}</span>
+ </div>
+</div>
diff --git a/view/tpl/invite.tpl b/view/tpl/invite.tpl
index e51e8e87b..304816e0b 100644
--- a/view/tpl/invite.tpl
+++ b/view/tpl/invite.tpl
@@ -16,7 +16,7 @@
<pre id="zai-remsg"></pre>
</div>
- <div id="invite-recipient-textarea" class="form-group field custom">
+ <div id="invite-recipient-textarea" class="mb-3 field custom">
<label for="zaito">{{$m11}}<sup class="zai_qmc">({{$n11}})</sup></label>
<textarea id="zai-to" name="zaito" rows="6" class="form-control"></textarea>
@@ -35,7 +35,7 @@
<span id="zai-subject">{{$subject}}</span>
</div>
- <div id="invite-message-textarea" class="form-group field custom">
+ <div id="invite-message-textarea" class="mb-3 field custom">
<label for="zaitxt">{{$m12}}<sup class="zai_qmc">({{$n12}})</sup></label>
<textarea id="zai-txt" name="zaitxt" rows="6" class="form-control">{{$personal_message}}</textarea>
</div>
@@ -49,7 +49,7 @@
{{$due}}
</pre>
- <div id="invite-submit-wrapper" class="form-group">
+ <div id="invite-submit-wrapper" class="mb-3">
<button class="btn btn-primary btn-sm" type="submit" id="invite-submit" name="submit" value="{{$submit}}">{{$submit}}</button>
</div>
<input type='hidden' id="zai-reon" name='zaireon' value=''>
diff --git a/view/tpl/item_categories.tpl b/view/tpl/item_categories.tpl
index fa07fa39f..68f8944bc 100644
--- a/view/tpl/item_categories.tpl
+++ b/view/tpl/item_categories.tpl
@@ -1,7 +1,7 @@
{{if $categories}}
<!--div class="categorytags"-->
{{foreach $categories as $cat}}
-<span class="item-category badge badge-pill badge-warning"><i class="fa fa-asterisk"></i>&nbsp;{{if $cat.url}}<a class="text-dark" href="{{$cat.url}}">{{$cat.term}}</a>{{else}}{{$cat.term}}{{/if}}</span>
+<span class="item-category badge rounded-pill bg-warning text-dark"><i class="fa fa-asterisk"></i>&nbsp;{{if $cat.url}}<a class="text-dark" href="{{$cat.url}}">{{$cat.term}}</a>{{else}}{{$cat.term}}{{/if}}</span>
{{/foreach}}
<!--/div-->
{{/if}}
diff --git a/view/tpl/item_filer.tpl b/view/tpl/item_filer.tpl
index f814b374c..3ecf9aa41 100644
--- a/view/tpl/item_filer.tpl
+++ b/view/tpl/item_filer.tpl
@@ -1,7 +1,7 @@
{{if $categories}}
<!--div class="filesavetags"-->
{{foreach $categories as $cat}}
-<span class="item-category badge badge-pill badge-danger"><i class="fa fa-folder-o"></i>&nbsp;{{$cat.term}}&nbsp;<a href="{{$cat.removelink}}" class="text-white" title="{{$remove}}" onClick="itemFilerRm({{$cat.id}}, '{{$cat.term}}'); return false;"><i class="fa fa-close"></i></a></span>
+<span class="item-category badge rounded-pill bg-danger"><i class="fa fa-folder-o"></i>&nbsp;{{$cat.term}}&nbsp;<a href="{{$cat.removelink}}" class="text-white" title="{{$remove}}" onClick="itemFilerRm({{$cat.id}}, '{{$cat.term}}'); return false;"><i class="fa fa-close"></i></a></span>
{{/foreach}}
<!--/div-->
{{/if}}
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
index b24283664..ca3cabd61 100644
--- a/view/tpl/jot-header.tpl
+++ b/view/tpl/jot-header.tpl
@@ -185,7 +185,7 @@ var activeCommentText = '';
function jotGetExpiry() {
//reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
- $('#expiryModal').modal();
+ $('#expiryModal').modal('show');
$('#expiry-modal-OKButton').on('click', function() {
reply=$('#expiration-date').val();
if(reply && reply.length) {
@@ -197,7 +197,7 @@ var activeCommentText = '';
function jotGetPubDate() {
//reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
- $('#createdModal').modal();
+ $('#createdModal').modal('show');
$('#created-modal-OKButton').on('click', function() {
reply=$('#created-date').val();
if(reply && reply.length) {
@@ -320,7 +320,9 @@ var activeCommentText = '';
postSaveChanges('clean');
- {{if $reset}}
+ {{if $popup}}
+ $("#profile-jot-text").focus();
+ {{else if $reset}}
$(".jothidden").hide();
$("#profile-jot-text").removeClass('jot-expanded');
$("#profile-jot-tools").addClass('d-none');
@@ -532,7 +534,7 @@ var activeCommentText = '';
}
function jotAddOption() {
- var option = '<div class="jot-poll-option form-group"><input class="w-100 border-0" name="poll_answers[]" type="text" value="" placeholder="Option"><div class="poll-option-close"><i class="fa fa-close"></i></div></div>';
+ var option = '<div class="jot-poll-option mb-3"><input class="w-100 border-0" name="poll_answers[]" type="text" value="" placeholder="Option"><div class="poll-option-close"><i class="fa fa-close"></i></div></div>';
$('#jot-poll-options').append(option);
}
diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl
index 23b18ffac..a44b5b868 100644
--- a/view/tpl/jot.tpl
+++ b/view/tpl/jot.tpl
@@ -69,21 +69,21 @@
{{/if}}
<div id="jot-poll-wrap" class="p-2 d-none">
<div id="jot-poll-options">
- <div class="jot-poll-option form-group">
+ <div class="jot-poll-option mb-3">
<input class="w-100 border-0" name="poll_answers[]" type="text" value="" placeholder="{{$poll_option_label}}">
</div>
- <div class="jot-poll-option form-group">
+ <div class="jot-poll-option mb-3">
<input class="w-100 border-0" name="poll_answers[]" type="text" value="" placeholder="{{$poll_option_label}}">
</div>
</div>
{{include file="field_checkbox.tpl" field=$multiple_answers}}
<div id="jot-poll-tools" class="clearfix">
- <div id="poll-tools-left" class="float-left">
+ <div id="poll-tools-left" class="float-start">
<button id="jot-add-option" class="btn btn-outline-secondary btn-sm" type="button">
<i class="fa fa-plus"></i> {{$poll_add_option_label}}
</button>
</div>
- <div id="poll-tools-right" class="float-right">
+ <div id="poll-tools-right" class="float-end">
<div class="input-group">
<input type="text" name="poll_expire_value" class="form-control" value="10" size="3">
<select class="form-control" id="duration-select" name="poll_expire_unit">
@@ -96,9 +96,9 @@
</div>
</div>
<div id="profile-jot-submit-wrapper" class="clearfix p-2 jothidden">
- <div id="profile-jot-submit-left" class="btn-toolbar float-left">
+ <div id="profile-jot-submit-left" class="btn-toolbar float-start">
{{if $bbcode}}
- <div class="btn-group mr-2">
+ <div class="btn-group me-2">
<button type="button" id="main-editor-bold" class="btn btn-outline-secondary btn-sm" title="{{$bold}}" onclick="inserteditortag('b', 'profile-jot-text'); return false;">
<i class="fa fa-bold jot-icons"></i>
</button>
@@ -117,7 +117,7 @@
</div>
{{/if}}
{{if $visitor}}
- <div class="btn-group mr-2 d-none d-lg-flex">
+ <div class="btn-group me-2 d-none d-lg-flex">
{{if $writefiles}}
<button type="button" id="wall-file-upload" class="btn btn-outline-secondary btn-sm" title="{{$attach}}" >
<i id="wall-file-upload-icon" class="fa fa-paperclip jot-icons"></i>
@@ -134,7 +134,7 @@
</button>
{{/if}}
</div>
- <div class="btn-group mr-2 d-none d-lg-flex">
+ <div class="btn-group me-2 d-none d-lg-flex">
{{if $setloc}}
<button type="button" id="profile-location-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$setloc}}" onclick="jotGetLocation();return false;">
<i id="profile-location" class="fa fa-globe jot-icons"></i>
@@ -177,7 +177,7 @@
</div>
{{if $writefiles || $weblink || $setloc || $clearloc || $feature_expire || $feature_encrypt || $custommoretoolsdropdown}}
<div class="btn-group d-lg-none">
- <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
+ <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
<i id="more-tools-icon" class="fa fa-cog jot-icons"></i>
</button>
<div class="dropdown-menu">
@@ -222,7 +222,7 @@
</div>
</div>
</div>
- <div id="profile-jot-submit-right" class="btn-group float-right">
+ <div id="profile-jot-submit-right" class="btn-group float-end">
{{foreach $customsubmitright as $csr}}
<button type="button" class="btn btn-outline-secondary btn-sm" {{$csr.buttonparams}} title="{{$csr.preview}}">
{{$csr.buttoncontent}}
@@ -234,12 +234,12 @@
</button>
{{/if}}
{{if $jotnets}}
- <button type="button" id="dbtn-jotnets" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#jotnetsModal" type="button" title="{{$jotnets_label}}" style="{{if $lockstate == 'lock'}}display: none;{{/if}}">
+ <button type="button" id="dbtn-jotnets" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#jotnetsModal" type="button" title="{{$jotnets_label}}" style="{{if $lockstate == 'lock'}}display: none;{{/if}}">
<i class="fa fa-share-alt jot-icons"></i>
</button>
{{/if}}
{{if $showacl}}
- <button type="button" id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" title="{{$permset}}" type="button" data-form_id="profile-jot-form">
+ <button type="button" id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" title="{{$permset}}" type="button" data-form_id="profile-jot-form">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}} jot-icons{{if $bang}} jot-lock-warn{{/if}}"></i>
</button>
{{/if}}
@@ -257,13 +257,13 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="expiryModalLabel">{{$jotnets_label}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
{{$jotnets}}
</div>
<div class="modal-footer">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
@@ -284,9 +284,9 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="expiryModalLabel">{{$expires}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
- <div class="modal-body form-group" style="width:90%">
+ <div class="modal-body mb-3" style="width:90%">
<div class="date">
<input type="text" placeholder="yyyy-mm-dd HH:MM" name="start_text" id="expiration-date" class="form-control" />
</div>
@@ -297,7 +297,7 @@
</script>
</div>
<div class="modal-footer">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$expiryModalCANCEL}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$expiryModalCANCEL}}</button>
<button id="expiry-modal-OKButton" type="button" class="btn btn-primary">{{$expiryModalOK}}</button>
</div>
</div><!-- /.modal-content -->
@@ -311,9 +311,9 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="createdModalLabel">{{$future_txt}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
- <div class="modal-body form-group" style="width:90%">
+ <div class="modal-body mb-3" style="width:90%">
<div class="date">
<input type="text" placeholder="yyyy-mm-dd HH:MM" name="created_text" id="created-date" class="form-control" />
</div>
@@ -324,7 +324,7 @@
</script>
</div>
<div class="modal-footer">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$expiryModalCANCEL}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$expiryModalCANCEL}}</button>
<button id="created-modal-OKButton" type="button" class="btn btn-primary">{{$expiryModalOK}}</button>
</div>
</div><!-- /.modal-content -->
@@ -338,7 +338,7 @@
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body" id="embedPhotoModalBody" >
<div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
diff --git a/view/tpl/layoutlist.tpl b/view/tpl/layoutlist.tpl
index 1bbe14893..723452839 100644
--- a/view/tpl/layoutlist.tpl
+++ b/view/tpl/layoutlist.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $editor}}
- <div class="pull-right">
+ <div class="float-end">
<button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('layout-editor');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
<a href="{{$help.url}}" target="_blank" class="btn btn-sm btn-warning" title="{{$help.title}}"><i class="fa fa-info"></i>&nbsp;{{$help.text}}</a>
</div>
diff --git a/view/tpl/locmanage.tpl b/view/tpl/locmanage.tpl
index a8c75b6a8..70426dd3e 100644
--- a/view/tpl/locmanage.tpl
+++ b/view/tpl/locmanage.tpl
@@ -1,14 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <script>
- function primehub(id) {
- $.post(baseurl + '/locs','primary='+id,function(data) { window.location.href=window.location.href; });
- }
- function drophub(id) {
- $.post(baseurl + '/locs','drop='+id,function(data) { window.location.href=window.location.href; });
- }
- </script>
- <button class="btn btn-success btn-sm pull-right" onclick="window.location.href='/locs/f=&sync=1'; return false;"><i class="fa fa-refresh"></i>&nbsp;{{$sync}}</button>
+ <button class="btn btn-success btn-sm float-end" onclick="window.location.href='/locs/f=&sync=1'; return false;"><i class="fa fa-refresh"></i>&nbsp;{{$sync}}</button>
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper-np">
@@ -27,15 +19,27 @@
<th>{{$drop}}</th>
</tr>
{{foreach $hubs as $hub}}
- {{if ! $hub.deleted }}
+ {{if ! $hub.hubloc_deleted }}
<tr class="locs-index-row">
<td>{{$hub.hubloc_addr}}</td>
<td class="d-none d-md-table-cell">{{$hub.hubloc_url}}</td>
- <td>{{if $hub.primary}}<i class="fa fa-check-square-o"></i>{{else}}<i class="fa fa-square-o primehub" onclick="primehub({{$hub.hubloc_id}}); return false;"></i>{{/if}}</td>
- <td><i class="fa fa-trash-o drophub" onclick="drophub({{$hub.hubloc_id}}); return false;"></i></td>
+ <td>{{if $hub.hubloc_primary}}<i class="fa fa-check-square-o"></i>{{else}}<i class="fa fa-square-o primehub" onclick="primehub({{$hub.hubloc_id}}); return false;"></i>{{/if}}</td>
+ <td>
+ {{if $hub.hubloc_url != $base_url}}
+ <i class="fa fa-trash-o drophub" onclick="drophub({{$hub.hubloc_id}}); return false;"></i>
+ {{/if}}
+ </td>
</tr>
{{/if}}
{{/foreach}}
</table>
</div>
</div>
+<script>
+ function primehub(id) {
+ $.post(baseurl + '/locs','primary='+id,function(data) { window.location.href=window.location.href; });
+ }
+ function drophub(id) {
+ $.post(baseurl + '/locs','drop='+id,function(data) { window.location.href=window.location.href; });
+ }
+</script>
diff --git a/view/tpl/login.tpl b/view/tpl/login.tpl
index 492149abb..ead524193 100644
--- a/view/tpl/login.tpl
+++ b/view/tpl/login.tpl
@@ -1,18 +1,14 @@
<form action="{{$dest_url}}" id="{{$form_id}}" method="post" >
<input type="hidden" name="auth-params" value="login" />
- <div id="login-main">
- <div id="login-input" class="form-group">
- {{include file="field_input.tpl" field=$lname}}
- {{include file="field_password.tpl" field=$lpassword}}
- {{include file="field_checkbox.tpl" field=$remember_me}}
- <button type="submit" name="submit" class="btn btn-block btn-primary">{{$login}}</button>
- </div>
- <div id="login-extra-links">
- {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" id="register-link" class="pull-right">{{$register.desc}}</a>{{/if}}
- <a href="lostpass" title="{{$lostpass}}" id="lost-password-link" >{{$lostlink}}</a>
- </div>
+ <div class="login-wrapper d-grid gap-2">
+ {{include file="field_input.tpl" field=$lname}}
+ {{include file="field_password.tpl" field=$lpassword}}
+ {{include file="field_checkbox.tpl" field=$remember_me}}
+ <button type="submit" name="submit" class="btn btn-primary">{{$login}}</button>
+ {{if $register}}<a href="{{$register.link}}" title="{{$register.title}}" class="register-link float-end">{{$register.desc}}</a>{{/if}}
+ {{if $lostlink}}<a href="lostpass" title="{{$lostpass}}" class="lost-pass-link">{{$lostlink}}</a>{{/if}}
<hr>
- <a href="rmagic" class="btn btn-block btn-outline-success rmagic-button">{{$remote_login}}</a>
+ <a href="rmagic" class="btn btn-outline-success">{{$remote_login}}</a>
</div>
{{foreach $hiddens as $k=>$v}}
<input type="hidden" name="{{$k}}" value="{{$v}}" />
diff --git a/view/tpl/mail_conv.tpl b/view/tpl/mail_conv.tpl
index b0497fe99..948890312 100644
--- a/view/tpl/mail_conv.tpl
+++ b/view/tpl/mail_conv.tpl
@@ -14,19 +14,21 @@
{{$mail.body}}
</div>
{{if $mail.attachments}}
- <div class="dropdown float-left">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-fw fa-paperclip"></i></button>
+ <div class="dropdown float-start">
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-fw fa-paperclip"></i></button>
<div class="dropdown-menu" role="menu" aria-labelledby="attachment-menu-{{$item.id}}">{{$mail.attachments}}</div>
</div>
{{/if}}
- <div class="float-right dropdown">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="mail-item-menu-{{$mail.id}}">
+ <div class="float-end dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="mail-item-menu-{{$mail.id}}">
<i class="fa fa-cog"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="mail-item-menu-{{$mail.id}}">
- {{if $mail.can_recall}}
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="mail-item-menu-{{$mail.id}}">
+ {{** if $mail.can_recall}}
<a class="dropdown-item" href="mail/{{$mail.mailbox}}/recall/{{$mail.id}}" title="{{$mail.recall}}" id="mail-conv-recall-icon-{{$mail.id}}"><i class="fa fa-fw fa-undo"></i>&nbsp;{{$mail.recall}}</a>
- {{/if}}
+ {{/if **}}
+ <a class="dropdown-item" href="mail/{{$mail.id}}/download" id="mail-conv-download-icon-{{$mail.id}}"><i class="fa fa-fw fa-download"></i>&nbsp;{{$mail.download}}</a>
+ <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" onclick="dropItem('mail/{{$mail.mailbox}}/drop/{{$mail.id}}', '#mail-{{$mail.id}}'); return false;" title="{{$mail.delete}}" id="mail-conv-delete-icon-{{$mail.id}}"><i class="fa fa-fw fa-trash-o"></i>&nbsp;{{$mail.delete}}</a>
{{if $mail.can_recall}}
<div class="dropdown-divider"></div>
diff --git a/view/tpl/mail_display.tpl b/view/tpl/mail_display.tpl
index e8549a49b..80ce40838 100644
--- a/view/tpl/mail_display.tpl
+++ b/view/tpl/mail_display.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen();"><i class="fa fa-expand"></i></button>
<button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false);"><i class="fa fa-compress"></i></button>
{{if $mailbox == 'combined'}}
diff --git a/view/tpl/menuedit.tpl b/view/tpl/menuedit.tpl
index 3558bdbaa..ad698f2c9 100644
--- a/view/tpl/menuedit.tpl
+++ b/view/tpl/menuedit.tpl
@@ -2,7 +2,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $menu_edit_link}}
- <div class="pull-right">
+ <div class="float-end">
<a href="{{$menu_edit_link}}" title="{{$hintedit}}" class="btn btn-sm btn-success"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$editcontents}}</a>
</div>
{{/if}}
@@ -22,7 +22,7 @@
{{include file="field_input.tpl" field=$menu_desc}}
{{include file="field_checkbox.tpl" field=$menu_bookmark}}
- <div class="menuedit-submit-wrapper form-group pull-right" >
+ <div class="menuedit-submit-wrapper mb-3 float-end" >
<button type="submit" name="submit" class="btn btn-primary">{{$submit}}&nbsp;<i class="fa fa-caret-right"></i></button>
</div>
<div class="clear"></div>
diff --git a/view/tpl/menulist.tpl b/view/tpl/menulist.tpl
index f9c925472..a173cd5f9 100644
--- a/view/tpl/menulist.tpl
+++ b/view/tpl/menulist.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('menu-creator');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$hintnew}}</button>
</div>
<h2>{{$title}}</h2>
diff --git a/view/tpl/message_side.tpl b/view/tpl/message_side.tpl
index 2ac61bf76..a45d1d177 100644
--- a/view/tpl/message_side.tpl
+++ b/view/tpl/message_side.tpl
@@ -4,6 +4,8 @@
<li class="nav-item"><a href="{{$combined.url}}" class="nav-link{{if $combined.sel}} active{{/if}}">{{$combined.label}}</a></li>
<li class="nav-item"><a href="{{$inbox.url}}" class="nav-link{{if $inbox.sel}} active{{/if}}">{{$inbox.label}}</a></li>
<li class="nav-item"><a href="{{$outbox.url}}" class="nav-link{{if $outbox.sel}} active{{/if}}">{{$outbox.label}}</a></li>
+{{**
<li class="nav-item"><a href="{{$new.url}}" class="nav-link{{if $new.sel}} active{{/if}}">{{$new.label}}</a></li>
+**}}
</ul>
</div>
diff --git a/view/tpl/messages_widget.tpl b/view/tpl/messages_widget.tpl
new file mode 100644
index 000000000..83f563db6
--- /dev/null
+++ b/view/tpl/messages_widget.tpl
@@ -0,0 +1,139 @@
+<ul class="nav nav-tabs nav-fill clearfix">
+ <li class="nav-item">
+ <a class="nav-link active messages-type" href="#" title="{{$strings.messages_title}}" data-messages_type="">
+ <i class="fa fa-fw fa-comment-o"></i>
+ </a>
+ </li>
+ <li class="nav-item">
+ <a class="nav-link messages-type" href="#" title="{{$strings.direct_messages_title}}" data-messages_type="direct">
+ <i class="fa fa-fw fa-envelope-o"></i>
+ </a>
+ </li>
+ {{if $feature_star}}
+ <li class="nav-item">
+ <a class="nav-link messages-type" href="#" title="{{$strings.starred_messages_title}}" data-messages_type="starred">
+ <i class="fa fa-fw fa-star"></i>
+ </a>
+ </li>
+ {{/if}}
+ <li class="nav-item">
+ <a class="nav-link messages-type" href="#" title="{{$strings.notice_messages_title}}" data-messages_type="notification">
+ <i class="fa fa-fw fa-exclamation"></i>
+ </a>
+ </li>
+</ul>
+<div id="messages-widget" class="border border-top-0 overflow-auto mb-3 clearfix" style="height: 70vh;">
+ <div id="messages-template" rel="template" class="d-none">
+ <a href="{6}" class="list-group-item list-group-item-action message" data-b64mid="{0}">
+ <div class="d-flex w-100 justify-content-between">
+ <div class="mb-1 text-truncate" title="{5}">
+ {7}
+ <strong>{4}</strong>
+ </div>
+ <small class="messages-timeago text-nowrap" title="{1}"></small>
+ </div>
+ <div class="mb-1">
+ <div class="text-break">{2}</div>
+ </div>
+ <small>{3}</small>
+ </a>
+ </div>
+ <div id="dm-container" class="list-group list-group-flush" data-offset="10">
+ {{foreach $entries as $e}}
+ <a href="{{$e.href}}" class="list-group-item list-group-item-action message" data-b64mid="{{$e.b64mid}}">
+ <div class="d-flex w-100 justify-content-between">
+ <div class="mb-1 text-truncate" title="{{$e.author_addr}}">
+ {{$e.icon}}
+ <strong>{{$e.author_name}}</strong>
+ </div>
+ <small class="messages-timeago text-nowrap" title="{{$e.created}}"></small>
+ </div>
+ <div class="mb-1">
+ <div class="text-break">{{$e.summary}}</div>
+ </div>
+ <small>{{$e.info}}</small>
+ </a>
+ {{/foreach}}
+ <div id="messages-empty" class="list-group-item border-0"{{if $entries}} style="display: none;"{{/if}}>
+ {{$strings.empty}}...
+ </div>
+ <div id="messages-loading" class="list-group-item" style="display: none;">
+ {{$strings.loading}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
+ </div>
+ </div>
+</div>
+<script>
+ var messages_offset = {{$offset}};
+ var get_messages_page_active = false;
+ var messages_type;
+
+ $(document).ready(function () {
+ $('.messages-timeago').timeago();
+ $('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active');
+ });
+
+ $('#messages-widget').on('scroll', function() {
+ if(this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight/7)) {
+ get_messages_page();
+ }
+ });
+
+ $(document).on('click', '.messages-type', function(e) {
+ e.preventDefault();
+ $('.messages-type').removeClass('active');
+ $(this).addClass('active');
+ messages_offset = 0;
+ messages_type = $(this).data('messages_type');
+ $('#dm-container .message').remove();
+ get_messages_page();
+ });
+
+ function get_messages_page() {
+
+ if (get_messages_page_active)
+ return;
+
+ if (messages_offset === -1)
+ return;
+
+ get_messages_page_active = true;
+ $('#messages-loading').show();
+ $('#messages-empty').hide();
+
+ $.ajax({
+ type: 'post',
+ url: 'hq',
+ data: {
+ offset: messages_offset,
+ type: messages_type
+ }
+ }).done(function(obj) {
+ get_messages_page_active = false;
+ messages_offset = obj.offset;
+ let html;
+ let tpl = $('#messages-template[rel=template]').html();
+ if (obj.entries.length) {
+ obj.entries.forEach(function(e) {
+ html = tpl.format(
+ e.b64mid,
+ e.created,
+ e.summary,
+ e.info,
+ e.author_name,
+ e.author_addr,
+ e.href,
+ e.icon
+ );
+ $('#messages-loading').before(html);
+ });
+ }
+ else {
+ $('#messages-empty').show();
+ }
+ $('.message[data-b64mid=\'' + bParam_mid + '\']').addClass('active');
+ $('#messages-loading').hide();
+ $('.messages-timeago').timeago();
+
+ });
+ }
+</script>
diff --git a/view/tpl/micropro_card.tpl b/view/tpl/micropro_card.tpl
index 058bfc14c..40a7967c5 100644
--- a/view/tpl/micropro_card.tpl
+++ b/view/tpl/micropro_card.tpl
@@ -1,5 +1,5 @@
<a class="list-group-item{{if $class}} {{$class}}{{/if}} fakelink" href="{{if $click}}#{{else}}{{$url}}{{/if}}" {{if $click}}onclick="{{$click}}"{{/if}}>
- <img class="menu-img-3" src="{{$photo}}" title="{{$title}}" alt="" />{{if $perminfo}}{{include "connstatus.tpl"}}{{/if}}
+ <img class="menu-img-3" src="{{$photo}}" title="{{$title}}" alt="" loading="lazy" />{{if $perminfo}}{{include "connstatus.tpl"}}{{/if}}
<span class="contactname">{{$name}}</span>
<span class="dropdown-sub-text">{{$addr}}<br>{{$network}}</span>
</a>
diff --git a/view/tpl/mitemedit.tpl b/view/tpl/mitemedit.tpl
index 36be0b207..c973e8cbd 100644
--- a/view/tpl/mitemedit.tpl
+++ b/view/tpl/mitemedit.tpl
@@ -22,9 +22,9 @@
{{include file="field_input.tpl" field=$mitem_order}}
{{include file="field_checkbox.tpl" field=$usezid}}
{{include file="field_checkbox.tpl" field=$newwin}}
- <div class="pull-right form-group">
+ <div class="float-end mb-3">
<div class="btn-group">
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
</button>
{{if $submit_more}}
diff --git a/view/tpl/mitemlist.tpl b/view/tpl/mitemlist.tpl
index 1e6302868..a430e18cc 100644
--- a/view/tpl/mitemlist.tpl
+++ b/view/tpl/mitemlist.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('menu-element-creator');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$hintnew}}</button>
</div>
<h2>{{$title}} {{if $menudesc}}{{$menudesc}}{{else}}{{$menuname}}{{/if}}</h2>
@@ -23,7 +23,7 @@
<tr id="mitem-list-item-{{$m.mitem_id}}">
<td width="1%">{{$m.mitem_desc}}</td>
<td width="96%"><a href="{{$m.mitem_link}}">{{$m.mitem_link}}</a></td>
- <td width="1%" class="mitem-list-tool dropdown">{{if $m.allow_cid || $m.allow_gid || $m.deny_cid || $m.deny_gid}}<i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('menu_item',{{$m.mitem_id}});" ></i><ul id="panel-{{$m.mitem_id}}" class="lockview-panel dropdown-menu"></ul>{{/if}}</td>
+ <td width="1%" class="mitem-list-tool dropdown">{{if $m.allow_cid || $m.allow_gid || $m.deny_cid || $m.deny_gid}}<i class="fa fa-lock lockview" data-bs-toggle="dropdown" onclick="lockview('menu_item',{{$m.mitem_id}});" ></i><ul id="panel-{{$m.mitem_id}}" class="lockview-panel dropdown-menu"></ul>{{/if}}</td>
<td width="1%" class="mitem-list-tool"><a href="mitem/{{$nick}}/{{$menu_id}}/{{$m.mitem_id}}" title="{{$hintedit}}"><i class="fa fa-pencil"></i></a></td>
<td width="1%" class="mitem-list-tool"><a href="#" title="{{$hintdrop}}" onclick="dropItem('mitem/{{$nick}}/{{$menu_id}}/{{$m.mitem_id}}/drop', '#mitem-list-item-{{$m.mitem_id}}, #pmenu-item-{{$m.mitem_id}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a></td>
</tr>
diff --git a/view/tpl/mood_content.tpl b/view/tpl/mood_content.tpl
index 315ee4c8a..4cb5207f6 100644
--- a/view/tpl/mood_content.tpl
+++ b/view/tpl/mood_content.tpl
@@ -17,7 +17,7 @@
<input id="mood-parent" type="hidden" value="{{$parent}}" name="parent" />
- <div class="form-group field custom">
+ <div class="mb-3 field custom">
<select name="verb" id="mood-verb-select" class="form-control" >
{{foreach $verbs as $v}}
<option value="{{$v.0}}">{{$v.1}}</option>
diff --git a/view/tpl/msg-header.tpl b/view/tpl/msg-header.tpl
index e8542b087..d49303453 100644
--- a/view/tpl/msg-header.tpl
+++ b/view/tpl/msg-header.tpl
@@ -1,3 +1,4 @@
+{{**
<script src="vendor/blueimp/jquery-file-upload/js/vendor/jquery.ui.widget.js"></script>
<script src="vendor/blueimp/jquery-file-upload/js/jquery.iframe-transport.js"></script>
<script src="vendor/blueimp/jquery-file-upload/js/jquery.fileupload.js"></script>
@@ -73,9 +74,9 @@
function addmailtext(data) {
var currentText = $("#prvmail-text").val();
$("#prvmail-text").val(currentText + data);
- }
+ }
</script>
-
+**}}
diff --git a/view/tpl/myapps.tpl b/view/tpl/myapps.tpl
index 2cc747436..404ab73d3 100644
--- a/view/tpl/myapps.tpl
+++ b/view/tpl/myapps.tpl
@@ -2,14 +2,14 @@
<div class="section-title-wrapper clearfix">
{{if $authed}}
{{if $create}}
- <a href="appman" class="pull-right btn btn-success btn-sm"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</a>
+ <a href="appman" class="float-end btn btn-success btn-sm"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</a>
{{elseif $manage}}
- <a href="apps/edit{{if $cat.0}}/?f=&cat={{$cat.0}}{{/if}}" class="pull-right btn btn-primary btn-sm">{{$manage}}</a>
+ <a href="apps/edit{{if $cat.0}}/?f=&cat={{$cat.0}}{{/if}}" class="float-end btn btn-primary btn-sm">{{$manage}}</a>
{{/if}}
{{/if}}
<h2>{{$title}}{{if $cat.0}} - {{$cat.0}}{{/if}}</h2>
</div>
- <div class="clearfix section-content-wrapper">
+ <div class="clearfix section-content-wrapper-np">
{{foreach $apps as $ap}}
{{$ap}}
{{/foreach}}
diff --git a/view/tpl/nav_login.tpl b/view/tpl/nav_login.tpl
index 4a94908f0..da9249e1a 100644
--- a/view/tpl/nav_login.tpl
+++ b/view/tpl/nav_login.tpl
@@ -4,10 +4,10 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">{{$nav.loginmenu.1.1}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
- <div class="form-group">
+ <div class="mb-3">
{{$nav.login}}
</div>
</div>
diff --git a/view/tpl/navbar_default.tpl b/view/tpl/navbar_default.tpl
index 0c8be512d..0dccd4404 100644
--- a/view/tpl/navbar_default.tpl
+++ b/view/tpl/navbar_default.tpl
@@ -1,233 +1,443 @@
-{{if $nav.login && !$userinfo}}
-<div class="d-lg-none pt-1 pb-1">
- {{if $nav.loginmenu.1.4}}
- <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>
- {{else}}
- <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}">
- {{$nav.loginmenu.1.1}}
- </a>
- {{/if}}
- {{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">
- <div class="fakelink usermenu" 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.group}}
- <a class="dropdown-item" href="{{$nav.group.0}}" title="{{$nav.group.3}}" role="menuitem" id="{{$nav.group.4}}">{{$nav.group.1}}</a>
- {{/if}}
- {{if $nav.manage}}
- <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}}
- <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.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.name == Admin}} active{{/if}}" href="{{$nav.admin.0}}" title="{{$nav.admin.3}}" role="menuitem" id="{{$nav.admin.4}}">{{$nav.admin.1}}</a>
+<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
+ <div class="container-fluid flex-nowrap">
+ {{if $userinfo}}
+ <div class="d-flex" style="max-width: 50%">
+ <div class="dropdown">
+ <div class="fakelink usermenu" data-bs-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.group}}
+ <a class="dropdown-item" href="{{$nav.group.0}}" title="{{$nav.group.3}}" role="menuitem" id="{{$nav.group.4}}">{{$nav.group.1}}</a>
+ {{/if}}
+ {{if $nav.manage}}
+ <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}}
+ <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.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.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>
+ <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 $sel.name}}
+ <div id="nav-app-link-wrapper" class="navbar-nav{{if $sitelocation}} has_location{{/if}}">
+ <a id="nav-app-link" href="{{$url}}" class="nav-link text-truncate" style="width: 100%">
+ {{$sel.name}}
+ {{if $sitelocation}}
+ <br><small>{{$sitelocation}}</small>
+ {{/if}}
+ </a>
+ </div>
+ {{if $settings_url}}
+ <div id="nav-app-settings-link-wrapper" class="navbar-nav">
+ <a id="nav-app-settings-link" href="{{$settings_url}}/?f=&rpath={{$url}}" class="nav-link">
+ <i class="fa fa-fw fa-cog"></i>
+ </a>
+ </div>
+ {{/if}}
+ {{/if}}
+ </div>
+ {{else}}
+ <div id="banner" class="navbar-text d-lg-none">{{$banner}}</div>
{{/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>
+ <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="d-lg-none navbar-toggler border-0">
+ <i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i>
+ </button>
+ {{if $localuser || $nav.pubs}}
+ <button id="notifications-btn-1" type="button" class="navbar-toggler border-0 notifications-btn">
+ <i id="notifications-btn-icon-1" class="fa fa-exclamation-circle notifications-btn-icon"></i>
+ </button>
+ {{/if}}
+ <button id="menu-btn" class="navbar-toggler border-0" type="button" data-bs-toggle="offcanvas" data-bs-target="#app-bin">
+ <i class="fa fa-bars"></i>
+ </button>
+ </div>
+ <div class="collapse navbar-collapse justify-content-between" id="navbar-collapse-1">
+ <ul class="navbar-nav">
+ {{if $nav.login && !$userinfo}}
+ <li class="nav-item d-lg-flex">
+ {{if $nav.loginmenu.1.4}}
+ <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}" data-bs-toggle="modal" data-bs-target="#nav-login">
+ {{$nav.loginmenu.1.1}}
+ </a>
+ {{else}}
+ <a class="nav-link" href="login" title="{{$nav.loginmenu.1.3}}">
+ {{$nav.loginmenu.1.1}}
+ </a>
+ {{/if}}
+ </li>
+ {{/if}}
+ {{if $nav.register}}
+ <li class="nav-item {{$nav.register.2}} d-lg-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-lg-flex">
+ <a class="nav-link" href="{{$nav.alogout.0}}" title="{{$nav.alogout.3}}" id="{{$nav.alogout.4}}">{{$nav.alogout.1}}</a>
+ </li>
+ {{/if}}
+ </ul>
+
+ <div id="banner" class="navbar-text">{{$banner}}</div>
+
+ <ul id="nav-right" class="navbar-nav">
+ <li class="nav-item collapse clearfix" id="nav-search">
+ <form class="form-inline" method="get" action="{{$nav.search.4}}" role="search">
+ <input class="form-control form-control-sm mt-1 me-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 $localuser || $nav.pubs}}
+ <li id="notifications-btn" class="nav-item d-xl-none">
+ <a class="nav-link text-white notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
+ </li>
+ {{/if}}
+ {{if $navbar_apps}}
+ {{foreach $navbar_apps as $navbar_app}}
+ <li class="nav-app-sortable">
+ {{$navbar_app}}
+ </li>
+ {{/foreach}}
+ {{/if}}
+ <li class="nav-item dropdown" id="app-menu">
+ <a class="nav-link" href="#" data-bs-toggle="offcanvas" data-bs-target="#app-bin" aria-controls="app-bin"><i class="fa fa-fw fa-bars"></i></a>
+ </li>
+ </ul>
+ </div>
+ {{if $nav.help.6}}
+ <div id="contextual-help-content" class="contextual-help-content">
+ {{$nav.help.5}}
+ <div class="float-end">
+ <a class="btn btn-primary btn-sm" target="hubzilla-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}"><i class="fa fa-question"></i>&nbsp;{{$fulldocs}}</a>
+ <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a>
+ </div>
+ </div>
{{/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 $sel.name}}
-<div id="nav-app-link-wrapper" class="navbar-nav{{if $sitelocation || ! $settings_url}} has_location mr-auto{{/if}}">
- <a id="nav-app-link" href="{{$url}}" class="nav-link text-truncate">
- {{$sel.name}}
- {{if $sitelocation}}
- <br><small>{{$sitelocation}}</small>
- {{/if}}
- </a>
-
-</div>
-{{if $settings_url}}
-<div id="nav-app-settings-link-wrapper" class="navbar-nav mr-auto">
- <a id="nav-app-settings-link" href="{{$settings_url}}/?f=&rpath={{$url}}" class="nav-link">
- <i class="fa fa-fw fa-cog"></i>
- </a>
-</div>
-{{/if}}
-{{/if}}
-{{/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="d-lg-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 $localuser || $nav.pubs}}
- <button id="notifications-btn-1" type="button" class="navbar-toggler border-0 notifications-btn">
- <i id="notifications-btn-icon-1" class="fa fa-exclamation-circle notifications-btn-icon"></i>
- </button>
- {{/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">
- <ul class="navbar-nav mr-auto">
+</nav>
+<div class="offcanvas offcanvas-end" tabindex="-1" id="app-bin" aria-labelledby="app-bin-label">
+ <div class="offcanvas-header">
{{if $nav.login && !$userinfo}}
- <li class="nav-item d-lg-flex">
+ <div class="d-lg-none pt-1 pb-1">
{{if $nav.loginmenu.1.4}}
- <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 class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-bs-toggle="modal" data-bs-target="#nav-login">
+ {{$nav.loginmenu.1.1}}
</a>
{{else}}
- <a class="nav-link" href="login" title="{{$nav.loginmenu.1.3}}">
+ <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}">
{{$nav.loginmenu.1.1}}
</a>
{{/if}}
- </li>
- {{/if}}
- {{if $nav.register}}
- <li class="nav-item {{$nav.register.2}} d-lg-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-lg-flex">
- <a class="nav-link" href="{{$nav.alogout.0}}" title="{{$nav.alogout.3}}" id="{{$nav.alogout.4}}">{{$nav.alogout.1}}</a>
- </li>
+ {{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>
+ <div class="d-lg-flex"></div>
+ {{else}}
+ <div class="lh-1" id="app-bin-label">
+ {{if $name}}
+ <img src="{{$thumb}}" class="menu-img-2">
+ <div class="float-start pe-2">
+ <div class="fw-bold">{{$name}}</div>
+ <div class="text-muted">{{$sitelocation}}</div>
+ </div>
+ {{/if}}
+ </div>
+ <i id="app-bin-trash" class="fa fa-2x fa-fw fa-trash-o d-none"></i>
{{/if}}
- </ul>
- <div id="banner" class="navbar-text">{{$banner}}</div>
+ <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
- <ul id="nav-right" class="navbar-nav ml-auto">
- <li class="nav-item collapse clearfix" id="nav-search">
- <form class="form-inline" method="get" action="{{$nav.search.4}}" 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 $localuser || $nav.pubs}}
- <li id="notifications-btn" class="nav-item d-xl-none">
- <a class="nav-link text-white notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
- </li>
- {{/if}}
- {{if $channel_menu && $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}}
- {{if $navbar_apps}}
- {{foreach $navbar_apps as $navbar_app}}
- <li>
- {{$navbar_app}}
- </li>
- {{/foreach}}
- {{/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">
- {{if $channel_apps.0 && ! $channel_menu}}
- {{foreach $channel_apps as $channel_app}}
- {{$channel_app}}
- {{/foreach}}
- <div class="dropdown-divider"></div>
- <div class="dropdown-header text-black-50 sys-apps-toggle" onclick="$('#dropdown-menu').click(function(e) { e.stopPropagation(); }); openClose('sys_apps');">
- {{$sysapps_toggle}}
- </div>
- <div id="sys_apps" style="display:none;">
- {{/if}}
- {{foreach $nav_apps as $nav_app}}
- {{$nav_app}}
- {{/foreach}}
- {{if $channel_apps.0 && ! $channel_menu}}
- </div>
- {{/if}}
- {{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-lg-none" id="navbar-collapse-2">
- <div class="navbar-nav mr-auto">
+ </div>
+ <div class="offcanvas-body pt-0">
{{if $channel_apps.0}}
+ <div class="dropdown-header text-uppercase text-muted">
+ {{$channelapps}}
+ </div>
{{foreach $channel_apps as $channel_app}}
- {{$channel_app|replace:'dropdown-item':'nav-link'}}
+ {{$channel_app}}
{{/foreach}}
- <div class="dropdown-header text-white-50 sys-apps-toggle" onclick="openClose('sys-apps-collapsed');">
- {{$sysapps_toggle}}
- </div>
- <div id="sys-apps-collapsed" style="display:none;">
{{/if}}
- {{foreach $navbar_apps as $navbar_app}}
- {{$navbar_app}}
- {{/foreach}}
- {{foreach $nav_apps as $nav_app}}
- {{$nav_app|replace:'dropdown-item':'nav-link'}}
- {{/foreach}}
- {{if $channel_apps.0}}
+ {{if $navbar_apps.0}}
+ <div class="d-lg-none dropdown-header text-uppercase text-muted">
+ {{$pinned_apps}}
+ </div>
+ <div id="nav-app-bin-container" class="d-lg-none">
+ {{foreach $navbar_apps as $navbar_app}}
+ {{$navbar_app|replace:'navbar-app nav-link':'dropdown-item nav-app-sortable'|replace:'fa':'generic-icons-nav fa'}}
+ {{/foreach}}
</div>
{{/if}}
{{if $is_owner}}
+ <div class="dropdown-header text-uppercase text-muted">
+ {{$featured_apps}}
+ </div>
+ <div id="app-bin-container" data-token="{{$form_security_token}}">
+ {{foreach $nav_apps as $nav_app}}
+ {{$nav_app}}
+ {{/foreach}}
+ </div>
<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>
+ <a class="dropdown-item" href="/apps"><i class="generic-icons-nav fa fa-fw fa-plus"></i>{{$addapps}}</a>
+ {{else}}
+ <div class="dropdown-header text-uppercase text-muted">
+ {{$sysapps}}
+ </div>
+ {{foreach $nav_apps as $nav_app}}
+ {{$nav_app}}
+ {{/foreach}}
{{/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>&nbsp;{{$fulldocs}}</a>
- <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a>
- </div>
-</div>
+{{if $is_owner}}
+<script>
+ var app_bin = document.getElementById('app-bin-container');
+ new Sortable(app_bin, {
+ animation: 150,
+ delay: 200,
+ delayOnTouchOnly: true,
+ onStart: function (e) {
+ $('#app-bin-trash').removeClass('d-none');
+ },
+ onEnd: function (e) {
+ $('#app-bin-trash').addClass('d-none');
+
+ let app_str = '';
+ $('#app-bin-container a:visible').each(function () {
+ if(app_str.length) {
+ app_str = app_str.concat(',', this.text);
+ }
+ else {
+ app_str = app_str.concat(this.text);
+ }
+ });
+ $.post(
+ 'pconfig',
+ {
+ 'aj' : 1,
+ 'cat' : 'system',
+ 'k' : 'app_order',
+ 'v' : app_str,
+ 'form_security_token' : $('#app-bin-container').data('token')
+ }
+ );
+
+ }
+ });
+
+ var nav_app_bin = document.getElementById('nav-right');
+ new Sortable(nav_app_bin, {
+ animation: 150,
+ delay: 200,
+ delayOnTouchOnly: true,
+ draggable: '.nav-app-sortable',
+ onEnd: function (e) {
+ let nav_app_str = '';
+ $('#nav-right .nav-app-sortable').each(function () {
+ if(nav_app_str.length) {
+ nav_app_str = nav_app_str.concat(',', $(this).text());
+ }
+ else {
+ nav_app_str = nav_app_str.concat($(this).text());
+ }
+ });
+ $.post(
+ 'pconfig',
+ {
+ 'aj' : 1,
+ 'cat' : 'system',
+ 'k' : 'app_pin_order',
+ 'v' : nav_app_str,
+ 'form_security_token' : $('#app-bin-container').data('token')
+ }
+ );
+
+ }
+ });
+
+ var nav_app_bin_container = document.getElementById('nav-app-bin-container');
+ new Sortable(nav_app_bin_container, {
+ animation: 150,
+ delay: 200,
+ delayOnTouchOnly: true,
+ onEnd: function (e) {
+ let nav_app_str = '';
+ $('#nav-app-bin-container a').each(function () {
+ if(nav_app_str.length) {
+ nav_app_str = nav_app_str.concat(',', $(this).text());
+ }
+ else {
+ nav_app_str = nav_app_str.concat($(this).text());
+ }
+ });
+ $.post(
+ 'pconfig',
+ {
+ 'aj' : 1,
+ 'cat' : 'system',
+ 'k' : 'app_pin_order',
+ 'v' : nav_app_str,
+ 'form_security_token' : $('#app-bin-container').data('token')
+ }
+ );
+
+ }
+ });
+
+ $('#nav-right').on('dragover', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '0px 0px 3px red inset');
+ });
+ $('#nav-right').on('dragleave', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '');
+
+ });
+ $('#nav-right').on('drop', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '');
+
+ if (papp === null)
+ return;
+
+ $.ajax({
+ type: 'post',
+ url: 'appman',
+ data: {
+ 'aj' : 1,
+ 'feature' : 'nav_pinned_app',
+ 'papp' : papp
+ }
+ })
+ .done( function() {
+ $('<li><a class="navbar-app nav-link" href="' + app_url + '"><i class="fa fa-fw fa-' + app_icon + '"></i></li>').insertBefore('#app-menu');
+ });
+
+ });
+
+ $('#app-menu').on('dragover', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '0px 0px 1px red inset');
+ });
+ $('#app-menu').on('dragleave', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '');
+
+ });
+ $('#app-menu').on('drop', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+ $(this).css('box-shadow', '');
+
+ if (papp === null)
+ return;
+
+ $.ajax({
+ type: 'post',
+ url: 'appman',
+ data: {
+ 'aj' : 1,
+ 'feature' : 'nav_featured_app',
+ 'papp' : papp
+ }
+ })
+ .done( function() {
+ $('<a class="dropdown-item" href="' + app_url + '"><i class="generic-icons-nav fa fa-fw fa-' + app_icon + '"></i>' + app_name + '</a>').appendTo('#app-bin-container');
+ });
+
+ });
+
+
+ $('#app-bin-trash').on('dragover', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ $('#app-bin-container a[href=\'' + app_url + '\']').fadeOut();
+ });
+ $('#app-bin-trash').on('dragleave', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ $('#app-bin-container a[href=\'' + app_url + '\']').fadeIn();
+
+ });
+ $('#app-bin-trash').on('drop', function (e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ if (papp === null)
+ return;
+
+ $.ajax({
+ type: 'post',
+ url: 'appman',
+ data: {
+ 'aj' : 1,
+ 'feature' : 'nav_featured_app',
+ 'papp' : papp
+ }
+ });
+
+ });
+
+ var papp, app_icon, app_url;
+ $(document).on('dragstart', function (e) {
+ papp = e.target.dataset.papp || null;
+ app_icon = e.target.dataset.icon || null;
+ app_url = e.target.dataset.url || null;
+ app_name = e.target.dataset.name || null;
+ });
+</script>
{{/if}}
diff --git a/view/tpl/navbar_tucson.tpl b/view/tpl/navbar_tucson.tpl
index 362b261c5..bb67ff31c 100644
--- a/view/tpl/navbar_tucson.tpl
+++ b/view/tpl/navbar_tucson.tpl
@@ -1,222 +1,224 @@
-{{if $nav.login && !$userinfo}}
-<div class="d-lg-none pt-1 pb-1">
- {{if $nav.loginmenu.1.4}}
- <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>
- {{else}}
- <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}">
- {{$nav.loginmenu.1.1}}
- </a>
- {{/if}}
- {{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">
- <div class="fakelink usermenu" 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.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}}
- <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>
+<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
+ {{if $nav.login && !$userinfo}}
+ <div class="d-lg-none pt-1 pb-1">
+ {{if $nav.loginmenu.1.4}}
+ <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-bs-toggle="modal" data-bs-target="#nav-login">
+ {{$nav.loginmenu.1.1}}
+ </a>
+ {{else}}
+ <a class="btn btn-primary btn-sm text-white" href="login" title="{{$nav.loginmenu.1.3}}">
+ {{$nav.loginmenu.1.1}}
+ </a>
{{/if}}
- {{if $nav.settings}}
- <div class="dropdown-divider"></div>
- <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 $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}}
- {{if $nav.admin}}
- <div class="dropdown-divider"></div>
- <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>
+ </div>
+ {{/if}}
+ {{if $userinfo}}
+ <div class="dropdown">
+ <div class="fakelink usermenu" data-bs-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.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}}
+ <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.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.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>
+ <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 $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 ! $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}}
- {{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>
+ {{if $sel.name}}
+ <div id="nav-app-link-wrapper" class="navbar-nav mr-auto">
+ <a id="nav-app-link" href="{{$url}}" class="nav-link text-truncate">
+ {{$sel.name}}
+ {{if $sitelocation}}
+ <br><small>{{$sitelocation}}</small>
+ {{/if}}
+ </a>
</div>
{{/if}}
-</div>
-{{if $sel.name}}
-<div id="nav-app-link-wrapper" class="navbar-nav mr-auto">
- <a id="nav-app-link" href="{{$url}}" class="nav-link text-truncate">
- {{$sel.name}}
- {{if $sitelocation}}
- <br><small>{{$sitelocation}}</small>
- {{/if}}
- </a>
-</div>
-{{/if}}
-{{/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="d-lg-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 $localuser || $nav.pubs}}
- <button id="notifications-btn-1" type="button" class="navbar-toggler border-0 notifications-btn">
- <i id="notifications-btn-icon-1" class="fa fa-exclamation-circle notifications-btn-icon"></i>
- </button>
- {{/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">
- <ul class="navbar-nav mr-auto">
- {{if $nav.login && !$userinfo}}
- <li class="nav-item d-lg-flex">
- {{if $nav.loginmenu.1.4}}
- <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>
- {{else}}
- <a class="nav-link" href="login" title="{{$nav.loginmenu.1.3}}">
- {{$nav.loginmenu.1.1}}
- </a>
- {{/if}}
- </li>
- {{/if}}
- {{if $nav.register}}
- <li class="nav-item {{$nav.register.2}} d-lg-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-lg-flex">
- <a class="nav-link" href="{{$nav.alogout.0}}" title="{{$nav.alogout.3}}" id="{{$nav.alogout.4}}">{{$nav.alogout.1}}</a>
- </li>
- {{/if}}
- </ul>
-
- <div id="banner" class="navbar-text">{{$banner}}</div>
-
- <ul id="nav-right" class="navbar-nav ml-auto">
- <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>
+ <div class="navbar-toggler-right">
{{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>
+ <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="d-lg-none navbar-toggler border-0" data-bs-toggle="offcanvas" data-bs-target="#region_1">
+ <i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i>
+ </button>
{{if $localuser || $nav.pubs}}
- <li id="notifications-btn" class="nav-item d-xl-none">
- <a class="nav-link text-white notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
- </li>
- {{/if}}
- {{if $channel_menu && $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>
+ <button id="notifications-btn-1" type="button" class="navbar-toggler border-0 notifications-btn">
+ <i id="notifications-btn-icon-1" class="fa fa-exclamation-circle notifications-btn-icon"></i>
+ </button>
{{/if}}
- {{if $navbar_apps}}
- {{foreach $navbar_apps as $navbar_app}}
- <li>
- {{$navbar_app}}
- </li>
- {{/foreach}}
- {{/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">
- {{if $channel_apps.0 && ! $channel_menu}}
- {{foreach $channel_apps as $channel_app}}
- {{$channel_app}}
- {{/foreach}}
- <div class="dropdown-divider"></div>
- <div class="dropdown-header text-black-50 sys-apps-toggle" onclick="$('#dropdown-menu').click(function(e) { e.stopPropagation(); }); openClose('sys_apps');">
- {{$sysapps_toggle}}
- </div>
- <div id="sys_apps" style="display:none;">
+ <button id="menu-btn" class="navbar-toggler border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navbar-collapse-2">
+ <i class="fa fa-bars"></i>
+ </button>
+ </div>
+ <div class="collapse navbar-collapse" id="navbar-collapse-1">
+ <ul class="navbar-nav mr-auto">
+ {{if $nav.login && !$userinfo}}
+ <li class="nav-item d-lg-flex">
+ {{if $nav.loginmenu.1.4}}
+ <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}" data-bs-toggle="modal" data-bs-target="#nav-login">
+ {{$nav.loginmenu.1.1}}
+ </a>
+ {{else}}
+ <a class="nav-link" href="login" title="{{$nav.loginmenu.1.3}}">
+ {{$nav.loginmenu.1.1}}
+ </a>
{{/if}}
- {{foreach $nav_apps as $nav_app}}
- {{$nav_app}}
- {{/foreach}}
- {{if $channel_apps.0 && ! $channel_menu}}
+ </li>
+ {{/if}}
+ {{if $nav.register}}
+ <li class="nav-item {{$nav.register.2}} d-lg-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-lg-flex">
+ <a class="nav-link" href="{{$nav.alogout.0}}" title="{{$nav.alogout.3}}" id="{{$nav.alogout.4}}">{{$nav.alogout.1}}</a>
+ </li>
+ {{/if}}
+ </ul>
+
+ <div id="banner" class="navbar-text">{{$banner}}</div>
+
+ <ul id="nav-right" class="navbar-nav ml-auto">
+ <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 me-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>
- {{/if}}
- {{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}}
+ </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 $localuser || $nav.pubs}}
+ <li id="notifications-btn" class="nav-item d-xl-none">
+ <a class="nav-link text-white notifications-btn" href="#"><i id="notifications-btn-icon" class="fa fa-exclamation-circle notifications-btn-icon"></i></a>
+ </li>
+ {{/if}}
+ {{if $channel_menu && $channel_apps.0}}
+ <li class="nav-item dropdown" id="channel-menu">
+ <a class="nav-link" href="#" data-bs-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-end">
+ {{foreach $channel_apps as $channel_app}}
+ {{$channel_app}}
+ {{/foreach}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $navbar_apps}}
+ {{foreach $navbar_apps as $navbar_app}}
+ <li>
+ {{$navbar_app}}
+ </li>
+ {{/foreach}}
+ {{/if}}
+ <li class="nav-item dropdown" id="app-menu">
+ <a class="nav-link" href="#" data-bs-toggle="dropdown"><i class="fa fa-fw fa-bars"></i></a>
+ <div id="dropdown-menu" class="dropdown-menu dropdown-menu-end">
+ {{if $channel_apps.0 && ! $channel_menu}}
+ {{foreach $channel_apps as $channel_app}}
+ {{$channel_app}}
+ {{/foreach}}
+ <div class="dropdown-divider"></div>
+ <div class="dropdown-header text-black-50 sys-apps-toggle" onclick="$('#dropdown-menu').click(function(e) { e.stopPropagation(); }); openClose('sys_apps');">
+ {{$sysapps_toggle}}
+ </div>
+ <div id="sys_apps" style="display:none;">
+ {{/if}}
+ {{foreach $nav_apps as $nav_app}}
+ {{$nav_app}}
+ {{/foreach}}
+ {{if $channel_apps.0 && ! $channel_menu}}
+ </div>
+ {{/if}}
+ {{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-lg-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 text-white-50 sys-apps-toggle" onclick="openClose('sys-apps-collapsed');">
+ {{$sysapps_toggle}}
</div>
- </li>
- </ul>
-</div>
-<div class="collapse d-lg-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 text-white-50 sys-apps-toggle" onclick="openClose('sys-apps-collapsed');">
- {{$sysapps_toggle}}
- </div>
- <div id="sys-apps-collapsed" style="display:none;">
- {{/if}}
- {{foreach $navbar_apps as $navbar_app}}
- {{$navbar_app}}
- {{/foreach}}
- {{foreach $nav_apps as $nav_app}}
- {{$nav_app|replace:'dropdown-item':'nav-link'}}
- {{/foreach}}
- {{if $channel_apps.0}}
+ <div id="sys-apps-collapsed" style="display:none;">
+ {{/if}}
+ {{foreach $navbar_apps as $navbar_app}}
+ {{$navbar_app}}
+ {{/foreach}}
+ {{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>
- {{/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>&nbsp;{{$fulldocs}}</a>
- <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a>
+ {{if $nav.help.6}}
+ <div id="contextual-help-content" class="contextual-help-content">
+ {{$nav.help.5}}
+ <div class="float-end">
+ <a class="btn btn-primary btn-sm" target="hubzilla-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}"><i class="fa fa-question"></i>&nbsp;{{$fulldocs}}</a>
+ <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a>
+ </div>
</div>
-</div>
-{{/if}}
+ {{/if}}
+</nav>
diff --git a/view/tpl/new_channel.tpl b/view/tpl/new_channel.tpl
index 8d72df55b..f11a4291f 100644
--- a/view/tpl/new_channel.tpl
+++ b/view/tpl/new_channel.tpl
@@ -18,17 +18,17 @@
{{if $default_role}}
<input type="hidden" name="permissions_role" value="{{$default_role}}" />
{{else}}
- {{include file="field_select_grouped.tpl" field=$role}}
+ {{include file="field_select.tpl" field=$role}}
{{/if}}
-
+
{{include file="field_input.tpl" field=$name}}
-
+
{{include file="field_input.tpl" field=$nickname}}
<button class="btn btn-primary" type="submit" id="newchannel-submit-button">{{$submit}}</button>
-
-
+
+
<div id="newchannel-submit-end" class="clear"></div>
-
+
<div id="newchannel-import-link" class="descriptive-paragraph" >{{$label_import}}</div>
<div id="newchannel-import-end" class="clear"></div>
</form>
diff --git a/view/tpl/notes.tpl b/view/tpl/notes.tpl
index 4bee02aa0..24c3ec53c 100644
--- a/view/tpl/notes.tpl
+++ b/view/tpl/notes.tpl
@@ -1,43 +1,122 @@
{{if $app}}
-<div class="generic-content-wrapper">
- <div class="section-title-wrapper">
- <h2>{{$banner}}</h2>
+<div id="personal-notes" class="generic-content-wrapper{{if $hidden}} d-none{{/if}}">
+ <div class="section-title-wrapper clearfix">
+ <div class="float-end rounded border border-secondary m-1 ps-1 pe-1 text-muted small note-mode" title="Double click into note for edit mode">{{$strings.read}}</div>
+ <h2>{{$strings.title}}</h2>
</div>
- <div class="section-content-wrapper">
+ <div class="section-content-wrapper-np">
{{else}}
-<div class="widget">
- <h3>{{$banner}}</h3>
+<div id="personal-notes" class="widget{{if $hidden}} d-none{{/if}}">
+ <div class="float-end rounded border border-secondary mb-1 ps-1 pe-1 text-muted small note-mode" title="Double click note for edit mode">{{$strings.read}}</div>
+ <h3 class="float-start">{{$strings.title}}</h3>
{{/if}}
- <textarea name="note_text" id="note-text">{{$text}}</textarea>
+ <textarea name="note_text" id="note-text" class="form-control{{if $app}} border-0{{else}} p-1{{/if}}" style="display: none;">{{$text}}</textarea>
+ <div id="note-text-html" class="{{if !$app}}border rounded p-1{{/if}}">{{$html}}</div>
<script>
var noteSaveTimer = null;
var noteText = $('#note-text');
+ var noteTextHTML = $('#note-text-html');
+ var noteMode = $('.note-mode');
+ var noteEditing = false;
- $(document).ready(function(e){
- noteText.on('change keyup keydown paste cut', function () {
- noteText.height(0).height(noteText[0].scrollHeight);
- }).change();
- });
+ noteText.bbco_autocomplete('bbcode');
$(document).on('focusout',"#note-text",function(e){
if(noteSaveTimer)
clearTimeout(noteSaveTimer);
+
+ noteEditing = false;
notePostFinal();
noteSaveTimer = null;
+ setNoteMode(noteMode, 'saving');
});
- $(document).on('focusin',"#note-text",function(e){
- noteSaveTimer = setTimeout(noteSaveChanges,10000);
+ $(document).on('dblclick',"#note-text-html",function(e){
+ noteEditing = 1;
+ noteText.show().focusin();
+ noteText.height(noteTextHTML.outerHeight());
+ noteText.scrollTop(noteTextHTML.scrollTop());
+ noteTextHTML.hide();
+ setNoteMode(noteMode, 'edit');
+
+ $(document).one('click', function(e) {
+ if (e.target.id !== 'note-text') {
+ noteTextHTML.show();
+ noteTextHTML.height(noteText.outerHeight());
+ noteTextHTML.scrollTop(noteText.scrollTop());
+ noteText.hide();
+ setNoteMode(noteMode, 'read');
+ }
+ });
+
+ $(document).one('click', '#note-text', function(e){
+ noteEditing = 2;
+ setNoteMode(noteMode, 'editing');
+ noteSaveTimer = setTimeout(noteSaveChanges,10000);
+ });
+
});
+
+
function notePostFinal() {
- $.post('notes/sync', { 'note_text' : $('#note-text').val() });
+ $.post(
+ 'notes/sync',
+ {
+ 'note_text' : noteText.val()
+ },
+ function (data) {
+ noteTextHTML.html(data.html);
+ noteTextHTML.show();
+ noteTextHTML.height(noteText.outerHeight());
+ noteTextHTML.scrollTop(noteText.scrollTop());
+ noteText.hide();
+ setNoteMode(noteMode, 'saved');
+ }
+ );
}
function noteSaveChanges() {
- $.post('notes', { 'note_text' : $('#note-text').val() });
- noteSaveTimer = setTimeout(noteSaveChanges,10000);
+ $.post('notes', { 'note_text' : noteText.val() });
+ noteSaveTimer = setTimeout(noteSaveChanges, 10000);
}
+
+ function setNoteMode (obj, mode) {
+ switch(mode) {
+ case 'edit':
+ obj.removeClass('border-secondary border-success text-muted text-success')
+ obj.addClass('border-danger text-danger')
+ obj.html('{{$strings.edit}}');
+ break;
+ case 'editing':
+ obj.removeClass('border-secondary border-success text-muted text-success')
+ obj.addClass('border-danger text-danger')
+ obj.html('{{$strings.editing}}{{$strings.dots}}');
+ break;
+ case 'saving':
+ obj.removeClass('border-secondary border-danger text-muted text-danger')
+ obj.addClass('border-success text-success')
+ obj.html('{{$strings.saving}}{{$strings.dots}}');
+ break;
+ case 'saved':
+ obj.removeClass('border-secondary border-danger text-muted text-danger')
+ obj.addClass('border-success text-success')
+ obj.html('{{$strings.saved}}');
+ setTimeout(function () {
+ if(noteEditing) {
+ setNoteMode(noteMode, noteEditing === 1 ? 'edit' : 'editing');
+ }
+ else {
+ setNoteMode(noteMode, 'read');
+ }
+ }, 3000);
+ break;
+ case 'read':
+ default:
+ obj.removeClass('border-success border-danger text-success text-danger').addClass('border-secondary text-muted').html('{{$strings.read}}');
+ }
+ }
+
</script>
{{if $app}}
</div>
diff --git a/view/tpl/notifications.tpl b/view/tpl/notifications.tpl
index 53ff8de52..92ffa1fdd 100644
--- a/view/tpl/notifications.tpl
+++ b/view/tpl/notifications.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper clearfix">
{{if $notifications_available}}
- <a href="#" class="btn btn-outline-secondary btn-sm float-right" onclick="markRead('notify'); setTimeout(function() { window.location.href=window.location.href; },1500); return false;">{{$notif_link_mark_seen}}</a>
+ <a href="#" class="btn btn-outline-secondary btn-sm float-end" onclick="markRead('notify'); setTimeout(function() { window.location.href=window.location.href; },1500); return false;">{{$notif_link_mark_seen}}</a>
{{/if}}
<h2>{{$notif_header}}</h2>
</div>
diff --git a/view/tpl/notifications_widget.tpl b/view/tpl/notifications_widget.tpl
index 1092bc155..fcadf71e5 100644
--- a/view/tpl/notifications_widget.tpl
+++ b/view/tpl/notifications_widget.tpl
@@ -1,20 +1,23 @@
-{{if $notifications}}
<script>
- var notifications_parent;
+ var sse_bs_active = false;
+ var sse_offset = 0;
+ var sse_type;
+ var sse_partial_result = false;
+ var sse_rmids = [];
+ var sse_fallback_interval;
$(document).ready(function() {
- notifications_parent = $('#notifications_wrapper')[0].parentElement.id;
+ let notifications_parent;
+ if ($('#notifications_wrapper').length) {
+ notifications_parent = $('#notifications_wrapper')[0].parentElement.id;
+ }
+
$('.notifications-btn').click(function() {
if($('#notifications_wrapper').hasClass('fs')) {
$('#notifications_wrapper').prependTo('#' + notifications_parent);
- //undo scrollbar remove
- $('section').css('height', '');
}
else {
$('#notifications_wrapper').prependTo('section');
- //remove superfluous scrollbar
- //setting overflow to hidden here has issues with some browsers
- $('section').css('height', '100vh');
}
$('#notifications_wrapper').toggleClass('fs');
@@ -23,60 +26,130 @@
}
});
- window.onpopstate = function(e) {
- if(e.state !== null && e.state.b64mid !== bParam_mid)
- getData(e.state.b64mid, '');
- };
- });
+ $(document).on('click', '.notification', function() {
+ if($('#notifications_wrapper').hasClass('fs')) {
+ $('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs');
+ }
+ });
- {{if $module == 'display' || $module == 'hq' || $startpage == 'hq'}}
- $(document).on('click', '.notification', function(e) {
- var b64mid = $(this).data('b64mid');
- var notify_id = $(this).data('notify_id');
- var path = $(this)[0].pathname.substr(1,7);
- var stateObj = { b64mid: b64mid };
+ if(sse_enabled) {
+ if(typeof(window.SharedWorker) === 'undefined') {
+ // notifications with multiple tabs open will not work very well in this scenario
+ var evtSource = new EventSource('/sse');
- if(! b64mid && ! notify_id)
- return;
+ evtSource.addEventListener('notifications', function(e) {
+ var obj = JSON.parse(e.data);
+ sse_handleNotifications(obj, false, false);
+ }, false);
- {{if $module != 'hq' && $startpage == 'hq'}}
- e.preventDefault();
- if(notify_id != null) {
- $.post(
- "hq",
- {
- "notify_id" : notify_id
+ document.addEventListener('visibilitychange', function() {
+ if (!document.hidden) {
+ sse_offset = 0;
+ sse_bs_init();
}
- );
+ }, false);
+
}
- window.location.href = 'hq/' + b64mid;
- return;
- {{else}}
- {{if $module == 'display'}}
- history.pushState(stateObj, '', 'display/' + b64mid);
- {{/if}}
+ else {
+ var myWorker = new SharedWorker('/view/js/sse_worker.js', localUser);
- {{if $module == 'hq'}}
- history.pushState(stateObj, '', 'hq/' + b64mid);
- {{/if}}
+ myWorker.port.onmessage = function(e) {
+ obj = e.data;
+ console.log(obj);
+ sse_handleNotifications(obj, false, false);
+ }
- {{if $module == 'hq'}}
- if(b64mid) {
- {{else}}
- if(path === 'display' && b64mid) {
- {{/if}}
- e.preventDefault();
+ myWorker.onerror = function(e) {
+ myWorker.port.close();
+ }
- if(! page_load) {
- getData(b64mid, notify_id);
+ myWorker.port.start();
+ }
+ }
+ else {
+ if (!document.hidden)
+ sse_fallback_interval = setInterval(sse_fallback, updateInterval);
+
+ document.addEventListener('visibilitychange', function() {
+ if (document.hidden) {
+ clearInterval(sse_fallback_interval);
+ }
+ else {
+ sse_offset = 0;
+ sse_bs_init();
+ sse_fallback_interval = setInterval(sse_fallback, updateInterval);
}
- if($('#notifications_wrapper').hasClass('fs'))
- $('#notifications_wrapper').prependTo('#' + notifications_parent).removeClass('fs');
+ }, false);
+ }
+
+ $('.notification-link').on('click', { replace: true, followup: false }, sse_bs_notifications);
+
+ $('.notification-filter').on('keypress', function(e) {
+ if(e.which == 13) { // enter
+ this.blur();
+ sse_offset = 0;
+ $("#nav-" + sse_type + "-menu").html('');
+ $("#nav-" + sse_type + "-loading").show();
+
+ var cn_val = $('#cn-' + sse_type + '-input').length ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : '';
+
+ $.get('/sse_bs/' + sse_type + '/' + sse_offset + '?nquery=' + encodeURIComponent(cn_val), function(obj) {
+ console.log('sse: bootstraping ' + sse_type);
+ console.log(obj);
+
+ sse_bs_active = false;
+ sse_partial_result = true;
+ sse_offset = obj[sse_type].offset;
+ if(sse_offset < 0)
+ $("#nav-" + sse_type + "-loading").hide();
+
+ sse_handleNotifications(obj, true, false);
+
+ });
+ }
+ });
+
+ $('.notifications-textinput-clear').on('click', function(e) {
+ if(! sse_partial_result)
+ return;
+
+ $("#nav-" + sse_type + "-menu").html('');
+ $("#nav-" + sse_type + "-loading").show();
+ $.get('/sse_bs/' + sse_type, function(obj) {
+ console.log('sse: bootstraping ' + sse_type);
+ console.log(obj);
+
+ sse_bs_active = false;
+ sse_partial_result = false;
+ sse_offset = obj[sse_type].offset;
+ if(sse_offset < 0)
+ $("#nav-" + sse_type + "-loading").hide();
+
+ sse_handleNotifications(obj, true, false);
+
+ });
+ });
+
+ $('.notification-content').on('scroll', function() {
+ if(this.scrollTop > this.scrollHeight - this.clientHeight - (this.scrollHeight/7)) {
+ sse_bs_notifications(sse_type, false, true);
}
- {{/if}}
+ });
+
+ });
+
+ $(document).on('hz:sse_setNotificationsStatus', function(e, data) {
+ sse_setNotificationsStatus(data);
+ });
+
+ $(document).on('hz:sse_bs_init', function() {
+ sse_bs_init();
+ });
+
+ $(document).on('hz:sse_bs_counts', function() {
+ sse_bs_counts();
});
- {{/if}}
{{foreach $notifications as $notification}}
{{if $notification.filter}}
@@ -88,15 +161,21 @@
else {
$('#nav-{{$notification.type}}-menu .notification[data-thread_top=false]').addClass('tt-filter-active');
$(this).addClass('active sticky-top');
+ // load more notifications if visible notifications count is low
+ if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':visible').length < 15) {
+ sse_bs_notifications(sse_type, false, true);
+ }
}
});
+
$(document).on('click', '#cn-{{$notification.type}}-input-clear', function(e) {
$('#cn-{{$notification.type}}-input').val('');
$('#cn-{{$notification.type}}-only').removeClass('active sticky-top');
$("#nav-{{$notification.type}}-menu .notification").removeClass('cn-filter-active');
$('#cn-{{$notification.type}}-input-clear').addClass('d-none');
});
+
$(document).on('input', '#cn-{{$notification.type}}-input', function(e) {
var val = $('#cn-{{$notification.type}}-input').val().toString().toLowerCase();
if(val) {
@@ -122,18 +201,322 @@
{{/if}}
{{/foreach}}
- function getData(b64mid, notify_id) {
- $(document).scrollTop(0);
- $('.thread-wrapper').remove();
- bParam_mid = b64mid;
- mode = 'replace';
- page_load = true;
- {{if $module == 'hq'}}
- liveUpdate(notify_id);
- {{/if}}
- {{if $module == 'display'}}
- liveUpdate();
- {{/if}}
+ function sse_bs_init() {
+ if(sessionStorage.getItem('notification_open') !== null || typeof sse_type !== 'undefined' ) {
+ if(typeof sse_type === 'undefined')
+ sse_type = sessionStorage.getItem('notification_open');
+
+ $("#nav-" + sse_type + "-sub").addClass('show');
+ sse_bs_notifications(sse_type, true, false);
+ }
+ else {
+ sse_bs_counts();
+ }
+ }
+
+ function sse_bs_counts() {
+ if(sse_bs_active)
+ return;
+
+ sse_bs_active = true;
+
+ $.ajax({
+ type: 'post',
+ url: '/sse_bs',
+ data: { sse_rmids }
+ }).done( function(obj) {
+ console.log(obj);
+ sse_bs_active = false;
+ sse_rmids = [];
+ sse_handleNotifications(obj, true, false);
+ });
+ }
+
+ function sse_bs_notifications(e, replace, followup) {
+
+ if(sse_bs_active)
+ return;
+
+ var manual = false;
+
+ if(typeof replace === 'undefined')
+ replace = e.data.replace;
+
+ if(typeof followup === 'undefined')
+ followup = e.data.followup;
+
+ if(typeof e === 'string') {
+ sse_type = e;
+ }
+ else {
+ manual = true;
+ sse_offset = 0;
+ sse_type = e.target.dataset.sse_type;
+ }
+
+ if(typeof sse_type === 'undefined')
+ return;
+
+ if(followup || !manual || !$('#notification-link-' + sse_type).hasClass('collapsed')) {
+
+ if(sse_offset >= 0) {
+ $("#nav-" + sse_type + "-loading").show();
+ }
+
+ sessionStorage.setItem('notification_open', sse_type);
+ if(sse_offset !== -1 || replace) {
+
+ var cn_val = (($('#cn-' + sse_type + '-input').length && sse_partial_result) ? $('#cn-' + sse_type + '-input').val().toString().toLowerCase() : '');
+
+ $("#nav-" + sse_type + "-loading").show();
+
+ sse_bs_active = true;
+
+ $.ajax({
+ type: 'post',
+ url: '/sse_bs/' + sse_type + '/' + sse_offset,
+ nquery: encodeURIComponent(cn_val),
+ data: { sse_rmids }
+ }).done(function(obj) {
+ console.log('sse: bootstraping ' + sse_type);
+ console.log(obj);
+ sse_bs_active = false;
+ sse_rmids = [];
+ $("#nav-" + sse_type + "-loading").hide();
+ sse_offset = obj[sse_type].offset;
+ sse_handleNotifications(obj, replace, followup);
+ });
+ }
+ else {
+ $("#nav-" + sse_type + "-loading").hide();
+ }
+ }
+ else {
+ sessionStorage.removeItem('notification_open');
+ }
+ }
+
+ function sse_handleNotifications(obj, replace, followup) {
+
+ var primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
+ var secondary_notifications = ['network', 'forums', 'all_events', 'pubs'];
+ var all_notifications = primary_notifications.concat(secondary_notifications);
+
+ all_notifications.forEach(function(type, index) {
+ if(typeof obj[type] === typeof undefined)
+ return true;
+
+ if(obj[type].count) {
+ $('.' + type + '-button').fadeIn();
+ if(replace || followup)
+ $('.' + type + '-update').html(Number(obj[type].count));
+ else
+ $('.' + type + '-update').html(Number(obj[type].count) + Number($('.' + type + '-update').html()));
+ }
+ else {
+ $('.' + type + '-update').html('0');
+ $('#nav-' + type + '-sub').removeClass('show');
+ $('.' + type + '-button').fadeOut(function() {
+ sse_setNotificationsStatus();
+ });
+ }
+ if(obj[type].notifications.length)
+ sse_handleNotificationsItems(type, obj[type].notifications, replace, followup);
+ });
+
+ sse_setNotificationsStatus();
+
+ // notice and info
+ $.jGrowl.defaults.closerTemplate = '<div>[ ' + aStr.closeAll + ']</div>';
+
+ if(obj.notice) {
+ $(obj.notice.notifications).each(function() {
+ $.jGrowl(this, { sticky: true, theme: 'notice' });
+ });
+ }
+
+ if(obj.info) {
+ $(obj.info.notifications).each(function(){
+ $.jGrowl(this, { sticky: false, theme: 'info', life: 10000 });
+ });
+ }
+
+ // load more notifications if visible notifications count becomes low
+ if(sse_type && sse_offset != -1 && $('#nav-' + sse_type + '-menu').children(':not(.tt-filter-active)').length < 15) {
+ sse_bs_notifications(sse_type, false, true);
+ }
+
+
+ }
+
+ function sse_handleNotificationsItems(notifyType, data, replace, followup) {
+
+ var notifications_tpl = ((notifyType == 'forums') ? decodeURIComponent($("#nav-notifications-forums-template[rel=template]").html().replace('data-src', 'src')) : decodeURIComponent($("#nav-notifications-template[rel=template]").html().replace('data-src', 'src')));
+ var notify_menu = $("#nav-" + notifyType + "-menu");
+ var notify_loading = $("#nav-" + notifyType + "-loading");
+ var notify_count = $("." + notifyType + "-update");
+
+ if(replace && !followup) {
+ notify_menu.html('');
+ notify_loading.hide();
+ }
+
+ $(data).each(function() {
+
+ // do not add a notification if it is already present
+ if($('#nav-' + notifyType + '-menu .notification[data-b64mid=\'' + this.b64mid + '\']').length)
+ return true;
+
+ if(!replace && !followup && (this.thread_top && notifyType === 'network')) {
+ $(document).trigger('hz:handleNetworkNotificationsItems', this);
+ }
+
+ html = notifications_tpl.format(this.notify_link,this.photo,this.name,this.addr,this.message,this.when,this.hclass,this.b64mid,this.notify_id,this.thread_top,this.unseen,this.private_forum, encodeURIComponent(this.mids), this.body);
+ notify_menu.append(html);
+ });
+
+ if(!replace && !followup) {
+ $("#nav-" + notifyType + "-menu .notification").sort(function(a,b) {
+ a = new Date(a.dataset.when);
+ b = new Date(b.dataset.when);
+ return a > b ? -1 : a < b ? 1 : 0;
+ }).appendTo('#nav-' + notifyType + '-menu');
+ }
+
+ $("#nav-" + notifyType + "-menu .notifications-autotime").timeago();
+
+ if($('#tt-' + notifyType + '-only').hasClass('active'))
+ $('#nav-' + notifyType + '-menu [data-thread_top=false]').addClass('tt-filter-active');
+
+ if($('#cn-' + notifyType + '-input').length) {
+ var filter = $('#cn-' + notifyType + '-input').val().toString().toLowerCase();
+ if(filter) {
+ filter = filter.indexOf('%') == 0 ? filter.substring(1) : filter;
+
+ $('#nav-' + notifyType + '-menu .notification').each(function(i, el) {
+ var cn = $(el).data('contact_name').toString().toLowerCase();
+ var ca = $(el).data('contact_addr').toString().toLowerCase();
+ if(cn.indexOf(filter) === -1 && ca.indexOf(filter) === -1)
+ $(el).addClass('cn-filter-active');
+ else
+ $(el).removeClass('cn-filter-active');
+ });
+ }
+ }
+ }
+
+ function sse_updateNotifications(type, mid) {
+
+ if(type === 'pubs')
+ return true;
+
+ if(type === 'notify' && (mid !== bParam_mid || sse_type !== 'notify'))
+ return true;
+ /*
+ var count = Number($('.' + type + '-update').html());
+
+ count--;
+
+ if(count < 1) {
+ $('.' + type + '-update').html(count);
+ $('.' + type + '-button').fadeOut(function() {
+ sse_setNotificationsStatus();
+ });
+ }
+ else {
+ $('.' + type + '-update').html(count);
+ }
+ */
+
+ $('#nav-' + type + '-menu .notification[data-b64mid=\'' + mid + '\']').fadeOut(function() {
+ this.remove();
+ });
+
+ }
+
+ function sse_setNotificationsStatus(data) {
+ var primary_notifications = ['dm', 'home', 'intros', 'register', 'notify', 'files'];
+ var secondary_notifications = ['network', 'forums', 'all_events', 'pubs'];
+ var all_notifications = primary_notifications.concat(secondary_notifications);
+
+ var primary_available = false;
+ var any_available = false;
+
+ all_notifications.forEach(function(type, index) {
+ if($('.' + type + '-button').css('display') == 'block') {
+ any_available = true;
+ if(primary_notifications.indexOf(type) > -1)
+ primary_available = true;
+ }
+ });
+
+ if(primary_available) {
+ $('.notifications-btn-icon').removeClass('fa-exclamation-circle');
+ $('.notifications-btn-icon').addClass('fa-exclamation-triangle');
+ }
+ else {
+ $('.notifications-btn-icon').removeClass('fa-exclamation-triangle');
+ $('.notifications-btn-icon').addClass('fa-exclamation-circle');
+ }
+
+ if(any_available) {
+ $('.notifications-btn').css('opacity', 1);
+ $('#no_notifications').hide();
+ $('#notifications').show();
+ }
+ else {
+ $('.notifications-btn').css('opacity', 0.5);
+ $('#navbar-collapse-1').removeClass('show');
+ $('#no_notifications').show();
+ $('#notifications').hide();
+ }
+
+ if (typeof data !== typeof undefined) {
+ data.forEach(function(nmid, index) {
+
+ sse_rmids.push(nmid);
+
+ if($('.notification[data-b64mid=\'' + nmid + '\']').length) {
+ $('.notification[data-b64mid=\'' + nmid + '\']').each(function() {
+ var n = this.parentElement.id.split('-');
+ return sse_updateNotifications(n[1], nmid);
+ });
+ }
+
+ // special handling for forum notifications
+ $('.notification-forum').filter(function() {
+ var fmids = decodeURIComponent($(this).data('b64mids'));
+ var n = this.parentElement.id.split('-');
+ if(fmids.indexOf(nmid) > -1) {
+ var fcount = Number($('.' + n[1] + '-update').html());
+ fcount--;
+ $('.' + n[1] + '-update').html(fcount);
+ if(fcount < 1) {
+ $('.' + n[1] + '-button').fadeOut();
+ $('#nav-' + n[1] + '-sub').removeClass('show');
+ }
+ var count = Number($(this).find('.bg-secondary').html());
+ count--;
+ $(this).find('.bg-secondary').html(count);
+ if(count < 1)
+ $(this).remove();
+ }
+ });
+ });
+ }
+
+ }
+
+ function sse_fallback() {
+ $.get('/sse', function(obj) {
+ if(! obj)
+ return;
+
+ console.log('sse fallback');
+ console.log(obj);
+
+ sse_handleNotifications(obj, false, false);
+ });
}
</script>
@@ -142,61 +525,59 @@
{{$no_notifications}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
</div>
<div id="nav-notifications-template" rel="template">
- <a class="list-group-item text-decoration-none text-darkclearfix notification {6}" href="{0}" title="{13}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-when="{5}">
+ <a class="list-group-item text-decoration-none text-dark clearfix notification {6}" href="{0}" title="{13}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-when="{5}">
<img class="menu-img-3" data-src="{1}" loading="lazy">
- <div class="contactname"><span class="text-dark font-weight-bold">{2}</span> <span class="text-muted">{3}</span></div>
+ <div class="contactname"><span class="text-dark fw-bold">{2}</span> <span class="text-muted">{3}</span></div>
<span class="text-muted">{4}</span><br>
<span class="text-muted notifications-autotime" title="{5}">{5}</span>
</a>
</div>
<div id="nav-notifications-forums-template" rel="template">
<a class="list-group-item text-decoration-none clearfix notification notification-forum" href="{0}" title="{4} - {3}" data-b64mid="{7}" data-notify_id="{8}" data-thread_top="{9}" data-contact_name="{2}" data-contact_addr="{3}" data-b64mids='{12}'>
- <span class="float-right badge badge-secondary">{10}</span>
+ <span class="float-end badge bg-secondary">{10}</span>
<img class="menu-img-1" data-src="{1}" loading="lazy">
<span class="">{2}</span>
<i class="fa fa-{11} text-muted"></i>
</a>
</div>
- <div id="notifications" class="border border-bottom-0 rounded navbar-nav collapse">
+ <div id="notifications" class="border border-top-0 rounded navbar-nav collapse">
{{foreach $notifications as $notification}}
- <div class="rounded list-group list-group-flush collapse {{$notification.type}}-button">
- <a id="notification-link-{{$notification.type}}" class="collapsed list-group-item text-decoration-none notification-link" href="#" title="{{$notification.title}}" data-target="#nav-{{$notification.type}}-sub" data-toggle="collapse" data-sse_type="{{$notification.type}}">
+ <div class="border border-start-0 border-end-0 border-bottom-0 list-group list-group-flush collapse {{$notification.type}}-button">
+ <a id="notification-link-{{$notification.type}}" class="collapsed list-group-item fakelink notification-link" href="#" title="{{$notification.title}}" data-bs-target="#nav-{{$notification.type}}-sub" data-bs-toggle="collapse" data-sse_type="{{$notification.type}}">
<i class="fa fa-fw fa-{{$notification.icon}}"></i> {{$notification.label}}
- <span class="float-right badge badge-{{$notification.severity}} {{$notification.type}}-update"></span>
+ <span class="float-end badge bg-{{$notification.severity}} {{$notification.type}}-update"></span>
</a>
- <div id="nav-{{$notification.type}}-sub" class="list-group list-group-flush border border-left-0 border-top-0 border-right-0 collapse notification-content" data-parent="#notifications" data-sse_type="{{$notification.type}}">
- {{if $notification.viewall}}
- <a class="list-group-item text-decoration-none text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
- <i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}
- </a>
- {{/if}}
- {{if $notification.markall}}
- <div class="list-group-item cursor-pointer" id="nav-{{$notification.type}}-mark-all" onclick="markRead('{{$notification.type}}'); return false;">
- <i class="fa fa-fw fa-check"></i> {{$notification.markall.label}}
- </div>
- {{/if}}
- {{if $notification.filter}}
- {{if $notification.filter.posts_label}}
- <div class="list-group-item cursor-pointer" id="tt-{{$notification.type}}-only">
- <i class="fa fa-fw fa-filter"></i> {{$notification.filter.posts_label}}
- </div>
- {{/if}}
- {{if $notification.filter.name_label}}
- <div class="list-group-item clearfix notifications-textinput" id="cn-{{$notification.type}}-only">
- <div class="text-muted notifications-textinput-filter"><i class="fa fa-fw fa-filter"></i></div>
- <input id="cn-{{$notification.type}}-input" type="text" class="notification-filter form-control form-control-sm" placeholder="{{$notification.filter.name_label}}">
- <div id="cn-{{$notification.type}}-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="fa fa-times"></i></div>
- </div>
- {{/if}}
- {{/if}}
- <div id="nav-{{$notification.type}}-menu" class="list-group list-group-flush"></div>
- <div id="nav-{{$notification.type}}-loading" class="list-group-item" style="display: none;">
- {{$loading}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
- </div>
-
+ </div>
+ <div id="nav-{{$notification.type}}-sub" class="border border-start-0 border-end-0 border-bottom-0 list-group list-group-flush collapse notification-content" data-bs-parent="#notifications" data-sse_type="{{$notification.type}}">
+ {{if $notification.viewall}}
+ <a class="list-group-item text-decoration-none text-dark" id="nav-{{$notification.type}}-see-all" href="{{$notification.viewall.url}}">
+ <i class="fa fa-fw fa-external-link"></i> {{$notification.viewall.label}}
+ </a>
+ {{/if}}
+ {{if $notification.markall}}
+ <div class="list-group-item cursor-pointer" id="nav-{{$notification.type}}-mark-all" onclick="markRead('{{$notification.type}}'); return false;">
+ <i class="fa fa-fw fa-check"></i> {{$notification.markall.label}}
+ </div>
+ {{/if}}
+ {{if $notification.filter}}
+ {{if $notification.filter.posts_label}}
+ <div class="list-group-item cursor-pointer" id="tt-{{$notification.type}}-only">
+ <i class="fa fa-fw fa-filter"></i> {{$notification.filter.posts_label}}
+ </div>
+ {{/if}}
+ {{if $notification.filter.name_label}}
+ <div class="list-group-item clearfix notifications-textinput" id="cn-{{$notification.type}}-only">
+ <div class="text-muted notifications-textinput-filter"><i class="fa fa-fw fa-filter"></i></div>
+ <input id="cn-{{$notification.type}}-input" type="text" class="notification-filter form-control form-control-sm" placeholder="{{$notification.filter.name_label}}">
+ <div id="cn-{{$notification.type}}-input-clear" class="text-muted notifications-textinput-clear d-none"><i class="fa fa-times"></i></div>
+ </div>
+ {{/if}}
+ {{/if}}
+ <div id="nav-{{$notification.type}}-menu" class="list-group list-group-flush"></div>
+ <div id="nav-{{$notification.type}}-loading" class="list-group-item" style="display: none;">
+ {{$loading}}<span class="jumping-dots"><span class="dot-1">.</span><span class="dot-2">.</span><span class="dot-3">.</span></span>
</div>
</div>
{{/foreach}}
</div>
</div>
-{{/if}}
diff --git a/view/tpl/notify.tpl b/view/tpl/notify.tpl
index b5bccc8a4..029e5aa3e 100644
--- a/view/tpl/notify.tpl
+++ b/view/tpl/notify.tpl
@@ -1,6 +1,6 @@
<div class="mb-4 notif-item">
{{if ! $item_seen}}
- <span class="float-right badge badge-pill badge-success text-uppercase">{{$new}}</span>
+ <span class="float-end badge badge-pill badge-success text-uppercase">{{$new}}</span>
{{/if}}
<a href="{{$item_link}}">
<img src="{{$item_image}}" class="menu-img-3">
diff --git a/view/tpl/pdledit_gui.tpl b/view/tpl/pdledit_gui.tpl
new file mode 100644
index 000000000..8c4ca3e50
--- /dev/null
+++ b/view/tpl/pdledit_gui.tpl
@@ -0,0 +1,243 @@
+<div id="pdledit_gui_offcanvas" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
+ <div id="pdledit_gui_offcanvas_body" class="offcanvas-body"></div>
+ <div class="offcanvas-header">
+ <div class="offcanvas-title h3"></div>
+ <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+</div>
+
+<div id="pdledit_gui_offcanvas_edit" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
+ <div id="pdledit_gui_offcanvas_edit_body" class="offcanvas-body">
+ <textarea id="pdledit_gui_offcanvas_edit_textarea" class="form-control font-monospace h-100"></textarea>
+ </div>
+ <div class="offcanvas-header">
+ <button id="pdledit_gui_offcanvas_edit_submit" type="button" class="btn btn-primary">Submit</button>
+ <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+</div>
+
+<div id="pdledit_gui_offcanvas_submit" class="offcanvas offcanvas-lg offcanvas-bottom shadow border rounded-top start-50 translate-middle-x" tabindex="-1" data-bs-backdrop="false" data-bs-scroll="true" style="min-width: 300px">
+ <div id="pdledit_gui_offcanvas_submit_body" class="offcanvas-body"></div>
+ <div class="offcanvas-header">
+ <button id="pdledit_gui_offcanvas_submit_submit" type="button" class="btn btn-primary">Submit</button>
+ <button type="button" class="btn-close text-reset" data-bs-dismiss="offcanvas" aria-label="Close"></button>
+ </div>
+</div>
+
+<ul class="nav position-fixed bottom-0 start-50 bg-light translate-middle-x text-uppercase" style="min-width: 300px">
+ <li class="nav-item">
+ <a id="pdledit_gui_modules" class="nav-link" href="#">Modules</a>
+ </li>
+ <li class="nav-item">
+ <a id="pdledit_gui_templates" class="nav-link" href="#">Templates</a>
+ </li>
+ <li class="nav-item">
+ <a id="pdledit_gui_items" class="nav-link" href="#">Items</a>
+ </li>
+ <li class="nav-item">
+ <a id="pdledit_gui_src" class="nav-link" href="#">Source</a>
+ </li>
+ {{if $module_modified}}
+ <li class="nav-item">
+ <a id="pdledit_gui_reset" class="nav-link" href="#">Reset</a>
+ </li>
+ {{/if}}
+ <li class="nav-item">
+ <a id="pdledit_gui_save" class="nav-link" href="#">Apply</a>
+ </li>
+</ul>
+
+<script>
+ $(document).ready(function() {
+ let poi;
+ let regions = [];
+ let content_regions = [];
+ let page_src = atob('{{$page_src}}');
+
+ let offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas'));
+ let edit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_edit'));
+ let submit_offcanvas = new bootstrap.Offcanvas(document.getElementById('pdledit_gui_offcanvas_submit'));
+
+ {{foreach $content_regions as $content_region}}
+ regions.push('{{$content_region.0}}');
+ content_regions.push('{{$content_region.1}}');
+
+ let sortable_{{$content_region.1}} = document.getElementById('{{$content_region.1}}');
+ new Sortable(sortable_{{$content_region.1}}, {
+ group: 'shared',
+ handle: '.pdledit_gui_item_handle',
+ animation: 150
+ });
+ {{/foreach}}
+
+ let sortable_items = document.getElementById('pdledit_gui_offcanvas_body');
+ new Sortable(sortable_items, {
+ group: {
+ name: 'shared',
+ pull: 'clone',
+ put: false
+ },
+ sort: false,
+ handle: '.pdledit_gui_item_handle',
+ animation: 150,
+ onEnd: function (e) {
+ $(e.item).find('button').removeClass('disabled');
+ }
+ });
+
+ $(document).on('click', '.pdledit_gui_item_src', function(e) {
+ poi = this.closest('.pdledit_gui_item');
+ let src = atob(poi.dataset.src);
+ $('#pdledit_gui_offcanvas_edit_textarea').val(src);
+ $('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche');
+ edit_offcanvas.show();
+ });
+
+ $(document).on('click', '.pdledit_gui_item_remove', function(e) {
+ poi = this.closest('.pdledit_gui_item');
+ $(poi).remove();
+ });
+
+ $(document).on('click', '#pdledit_gui_offcanvas_edit_submit', function(e) {
+ let src = $('#pdledit_gui_offcanvas_edit_textarea').val();
+
+ if (poi) {
+ poi.dataset.src = btoa(src);
+ }
+ else {
+ $.post(
+ 'pdledit_gui',
+ {
+ 'save_src': 1,
+ 'module': '{{$module}}',
+ 'src': $('#pdledit_gui_offcanvas_edit_textarea').val()
+ }
+ )
+ .done(function(data) {
+ if (data.success) {
+ window.location.href = 'pdledit_gui/' + data.module;
+ }
+ });
+ }
+
+ edit_offcanvas.hide();
+ });
+
+ $(document).on('click', '#pdledit_gui_offcanvas_submit_submit', function(e) {
+ if ($('#pdledit_gui_templates_form').length) {
+ $.post(
+ 'pdledit_gui',
+ {
+ 'save_template': 1,
+ 'module': '{{$module}}',
+ 'data': $('#pdledit_gui_templates_form').serializeArray()
+ }
+ )
+ .done(function(data) {
+ if (data.success) {
+ window.location.href = 'pdledit_gui/' + data.module;
+ }
+ });
+ }
+
+ submit_offcanvas.hide();
+ });
+
+ $(document).on('click', '#pdledit_gui_src', function(e) {
+ e.preventDefault();
+ poi = null; // this is important!
+
+ let obj = {};
+
+ content_regions.forEach(function (content_region, i) {
+ let data_src = [];
+ $('#' + content_region + ' > .card').each(function () {
+ data_src.push(atob(this.dataset.src));
+ });
+ obj[regions[i]] = data_src;
+ });
+
+ for (let [region, entries] of Object.entries(obj)) {
+ let region_pdl = '';
+
+ entries.forEach(function (entry) {
+ region_pdl = region_pdl.concat(entry + "\r\n");
+ });
+
+ let regex_str = '\\[region=' + region + '\\](.*?)\\[\\/region\\]';
+ let replace_str = '[region=' + region + ']' + "\r\n" + region_pdl + "\r\n" + '[/region]'
+ let regex = new RegExp(regex_str, 'ism');
+
+ page_src = page_src.replace(regex, replace_str);
+ }
+
+ $('#pdledit_gui_offcanvas_edit_textarea').val(page_src);
+ $('#pdledit_gui_offcanvas_edit_textarea').bbco_autocomplete('comanche');
+ edit_offcanvas.show();
+ });
+
+ $(document).on('click', '#pdledit_gui_items', function(e) {
+ e.preventDefault();
+ $('#pdledit_gui_offcanvas_body').html(atob('{{$items}}'));
+ offcanvas.show();
+ });
+
+ $(document).on('click', '#pdledit_gui_templates', function(e) {
+ e.preventDefault();
+ $('#pdledit_gui_offcanvas_submit_body').html(atob('{{$templates}}'));
+
+ submit_offcanvas.show();
+ });
+
+ $(document).on('click', '#pdledit_gui_modules', function(e) {
+ e.preventDefault();
+ $('#pdledit_gui_offcanvas_body').html(atob('{{$modules}}'));
+ offcanvas.show();
+ });
+
+ $(document).on('click', '#pdledit_gui_save', function(e) {
+ e.preventDefault();
+
+ let obj = {};
+
+ content_regions.forEach(function (content_region, i) {
+ let data_src = [];
+ $('#' + content_region + ' > .card').each(function () {
+ data_src.push(this.dataset.src);
+ });
+ obj[regions[i]] = data_src;
+ });
+
+ $.post(
+ 'pdledit_gui',
+ {
+ 'save': 1,
+ 'module': '{{$module}}',
+ 'data': JSON.stringify(obj)
+ }
+ )
+ .done(function(data) {
+ if (data.success) {
+ window.location.href = 'pdledit_gui/' + data.module;
+ }
+ });
+ });
+
+ $(document).on('click', '#pdledit_gui_reset', function(e) {
+ e.preventDefault();
+ $.post(
+ 'pdledit_gui',
+ {
+ 'reset': 1,
+ 'module': '{{$module}}'
+ }
+ )
+ .done(function(data) {
+ if (data.success) {
+ window.location.href = 'pdledit_gui/' + data.module;
+ }
+ });
+ });
+
+ });
+</script>
diff --git a/view/tpl/pdledit_gui_item.tpl b/view/tpl/pdledit_gui_item.tpl
new file mode 100644
index 000000000..9d0095ed4
--- /dev/null
+++ b/view/tpl/pdledit_gui_item.tpl
@@ -0,0 +1,18 @@
+<div class="pdledit_gui_item card mb-3" data-src="{{$entry.src}}">
+ <div class="card-header d-flex justify-content-between">
+ <span class="text-uppercase">{{$entry.name}}</span>
+ <div class="badge rounded-pill{{if $entry.type === 'widget'}} bg-info text-dark{{/if}}{{if $entry.type === 'content'}} bg-primary{{/if}}{{if $entry.type === 'menu'}} bg-secondary{{/if}}{{if $entry.type === 'block'}} bg-warning text-dark{{/if}}">
+ {{$entry.type}}
+ </div>
+ </div>
+ <div class="card-body">
+ {{if $entry.desc}}
+ <div class="mb-3 text-muted">{{$entry.desc}}</div>
+ {{/if}}
+ {{if $entry.type !== 'content'}}
+ <button type="button" class="btn btn-sm btn-outline-primary pdledit_gui_item_src{{if $disable_controls}} disabled{{/if}}">Edit</button>
+ <button type="button" class="btn btn-sm btn-outline-danger pdledit_gui_item_remove{{if $disable_controls}} disabled{{/if}}">Remove</button>
+ <i class="fa fa-fw fa-arrows-alt m-2 float-end cursor-pointer pdledit_gui_item_handle"></i>
+ {{/if}}
+ </div>
+</div>
diff --git a/view/tpl/pdledit_gui_templates.tpl b/view/tpl/pdledit_gui_templates.tpl
new file mode 100644
index 000000000..0f3d8a7b6
--- /dev/null
+++ b/view/tpl/pdledit_gui_templates.tpl
@@ -0,0 +1,11 @@
+<form id="pdledit_gui_templates_form">
+ {{foreach $templates as $template}}
+ <div class="form-check mb-2">
+ <input class="form-check-input" type="radio" name="template" id="id_template_{{$template.name}}" value="{{$template.name}}" {{if $template.name == $active}} checked{{/if}}>
+ <label class="form-check-label" for="id_template_{{$template.name}}">
+ {{$template.name}}
+ </label>
+ <small class="text-muted">{{$template.desc}}</small>
+ </div>
+ {{/foreach}}
+</form>
diff --git a/view/tpl/peoplefind.tpl b/view/tpl/peoplefind.tpl
index bbcc0b85b..1dc02e4c3 100644
--- a/view/tpl/peoplefind.tpl
+++ b/view/tpl/peoplefind.tpl
@@ -1,11 +1,9 @@
<div id="peoplefind-sidebar" class="widget">
<h3>{{$findpeople}}</h3>
<form action="directory" method="post" />
- <div class="input-group form-group">
+ <div class="input-group mb-3">
<input class="form-control" type="text" name="search" title="{{$hint}}{{if $advanced_search}}{{$advanced_hint}}{{/if}}" placeholder="{{$desc}}" />
- <div class="input-group-append">
- <button class="btn btn-sm btn-outline-secondary" type="submit" name="submit"><i class="fa fa-fw fa-search"></i></button>
- </div>
+ <button class="btn btn-outline-secondary" type="submit" name="submit"><i class="fa fa-fw fa-search"></i></button>
</div>
</form>
<ul class="nav nav-pills flex-column">
diff --git a/view/tpl/permcats.tpl b/view/tpl/permcats.tpl
index 442b3e11a..d0f175cfb 100644
--- a/view/tpl/permcats.tpl
+++ b/view/tpl/permcats.tpl
@@ -4,61 +4,63 @@
<div class="clear"></div>
</div>
<div class="section-content-tools-wrapper">
- <div class="section-content-info-wrapper">
- {{$desc}}
- </div>
+ <form action="permcats/{{$return_path}}" id="settings-permcats-form" method="post" autocomplete="off" >
+ <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+ <input type="hidden" name="return_path" value="{{$return_path}}">
+
+ {{if $is_system_role}}
+ <input type="hidden" name="is_system_role" value="1">
+ <input type="hidden" name="name" value="{{$is_system_role}}">
+ {{/if}}
- <form action="permcats" id="settings-permcats-form" method="post" autocomplete="off" >
- <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
{{include file="field_input.tpl" field=$name}}
+ {{include file="field_checkbox.tpl" field=$default_role}}
+
+ {{$group_select}}
- <div class="settings-submit-wrapper form-group">
- <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ <div class="section-subtitle-wrapper" id="perms-tool">
+ <h3>
+ {{$permlbl}}
+ </h3>
</div>
+ <div class="section-content-warning-wrapper">
+ {{$permnote}}
+ </div>
+ <table id="" class="table table-hover">
+ {{foreach $perms as $prm}}
+ {{include file="field_acheckbox.tpl" field=$prm}}
+ {{/foreach}}
+ </table>
+ <div class="clearfix">
+ {{if !$is_system_role && $return_path}}
+ <button type="button" class="btn btn-outline-danger" data-bs-toggle="modal" data-bs-target="#delete-modal">{{$delet_role_button}}</button>
+ {{/if}}
+ <button type="submit" name="submit" class="btn btn-primary float-end">{{$submit}}</button>
+ </div>
+ </form>
</div>
-
- <div class="panel" id="permission-settings">
- <div class="section-subtitle-wrapper" role="tab" id="perms-tool">
- <h3>
- <a data-toggle="collapse" data-parent="#permission-settings" href="#perms-tool-collapse" aria-expanded="true" aria-controls="perms-tool-collapse">
- {{$permlbl}}
- </a>
- </h3>
- </div>
- <div id="perms-tool-collapse" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="perms-tool">
- <div class="section-content-tools-wrapper">
- <div class="section-content-warning-wrapper">
- {{$permnote}}
- </div>
-
- <table id="perms-tool-table" class=form-group>
- <tr>
- <td></td><td colspan="2" class="abook-me">{{$me}}</td>
- </tr>
- {{foreach $perms as $prm}}
- {{include file="field_acheckbox.tpl" field=$prm}}
- {{/foreach}}
- </table>
-
- <div class="settings-submit-wrapper" >
- <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+</div>
+{{if !$is_system_role && $return_path}}
+<div id="delete-modal" class="modal" tabindex="-1">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <div class="h3">
+ {{$delete_label}}
</div>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
+ <form action="permcats" id="delete-permcat-form" method="post">
+ <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+ <input type="hidden" name="deleted_role" value="{{$current_role}}">
+ <div id="edit-modal-body" class="modal-body">
+ {{include file="field_select.tpl" field=$delete_role_select}}
+ </div>
+ <div class="modal-footer">
+ <button id="" type="submit" class="btn btn-danger">{{$delet_role_button}}</button>
+ </div>
+ </form>
</div>
- {{if $permcats}}
- <div class="section-content-wrapper-np">
- <table id="permcat-index">
- {{foreach $permcats as $k => $v}}
- <tr class="permcat-row-{{$k}}">
- <td width="99%"><a href="permcats/{{$k}}">{{$v}}</a></td>
- <td width="1%"><i class="fa fa-trash-o drop-icons" onClick="dropItem('permcats/{{$k}}/drop', '.permcat-row-{{$k}}')"></i></td>
- </tr>
- {{/foreach}}
- </table>
- </div>
- {{/if}}
-
</div>
- </form>
-
</div>
+{{/if}}
diff --git a/view/tpl/permcats_widget.tpl b/view/tpl/permcats_widget.tpl
new file mode 100644
index 000000000..a7ebd91ba
--- /dev/null
+++ b/view/tpl/permcats_widget.tpl
@@ -0,0 +1,27 @@
+<div class="widget">
+ <h3>{{$roles_label}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $roles as $role}}
+ <li class="nav-item">
+ <a class="nav-link{{if $role.active}} active{{/if}}" href="{{$role.url}}">
+ {{$role.name}}
+ </a>
+ </li>
+ {{/foreach}}
+ </ul>
+</div>
+
+{{if $members}}
+<div class="widget">
+ <h3>{{$members_label}}</h3>
+ <div class="border rounded overflow-auto" style="height: 19rem;">
+ {{foreach $members as $member}}
+ <a href="{{$member.url}}" class="lh-sm border-bottom p-2 d-block text-truncate">
+ <img src="{{$member.photo}}" class="float-start rounded me-2" style="height: 2.2rem; width: 2.2rem;" loading="lazy">
+ {{$member.name}}<br>
+ <span class="text-muted small">{{$member.addr}}</span>
+ </a>
+ {{/foreach}}
+ </div>
+</div>
+{{/if}}
diff --git a/view/tpl/photo_album.tpl b/view/tpl/photo_album.tpl
index ad4e2a38c..d01260f07 100644
--- a/view/tpl/photo_album.tpl
+++ b/view/tpl/photo_album.tpl
@@ -1,6 +1,6 @@
<div class="{{if !$no_fullscreen_btn}}generic-content-wrapper{{/if}}">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $order}}
<a class="btn btn-outline-secondary btn-sm" href="{{$order.1}}" title="{{$order.0}}"><i class="fa fa-sort"></i></a>
{{/if}}
@@ -24,7 +24,7 @@
{{include file="photo_top.tpl"}}
{{/foreach}}
{{** make sure this element is at the bottom - we rely on that for endless scroll **}}
- <span id="page-end" class="d-block float-left w-100" style="position: absolute; bottom: 0px"></span>
+ <span id="page-end" class="d-block float-start w-100" style="position: absolute; bottom: 0px"></span>
</div>
</div>
</div>
diff --git a/view/tpl/photo_album_portfolio.tpl b/view/tpl/photo_album_portfolio.tpl
index 1635e0ae1..e939ac3e1 100644
--- a/view/tpl/photo_album_portfolio.tpl
+++ b/view/tpl/photo_album_portfolio.tpl
@@ -1,7 +1,7 @@
{{if isset($mode) && $mode == 'orbit'}}
<div class="row">
<div class="orbit small-12 medium-9 large-9 columns" id="photo-album-contents-{{$album_id}}" role="region" aria-label="portfolioOrbit-{{$album_id}}" data-orbit data-options="animInFromLeft:fade-in; animInFromRight:fade-in; animOutToLeft:fade-out; animOutToRight:fade-out;">
-
+
<ul class="orbit-container">
<button class="orbit-previous"><span class="show-for-sr">Previous Slide</span>&#9664;&#xFE0E;</button>
<button class="orbit-next"><span class="show-for-sr">Next Slide</span>&#9654;&#xFE0E;</button>
diff --git a/view/tpl/photo_albums.tpl b/view/tpl/photo_albums.tpl
index 83bdd95e7..e2edec687 100644
--- a/view/tpl/photo_albums.tpl
+++ b/view/tpl/photo_albums.tpl
@@ -5,7 +5,7 @@
{{if $albums}}
{{foreach $albums as $al}}
{{if $al.shorttext}}
- <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/photos/{{$nick}}/album/{{$al.bin2hex}}"><span class="badge badge-secondary float-right">{{$al.total}}</span>{{$al.shorttext}}</a></li>
+ <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/photos/{{$nick}}/album/{{$al.bin2hex}}"><span class="badge bg-secondary float-end">{{$al.total}}</span>{{$al.shorttext}}</a></li>
{{/if}}
{{/foreach}}
{{/if}}
diff --git a/view/tpl/photo_item.tpl b/view/tpl/photo_item.tpl
index b6ee4508b..6ddca70e3 100644
--- a/view/tpl/photo_item.tpl
+++ b/view/tpl/photo_item.tpl
@@ -21,7 +21,7 @@
</div>
{{if $drop}}
<div class="p-2 clearfix wall-item-tools" id="wall-item-tools-{{$id}}" >
- <div class="wall-item-tools-right pull-right">
+ <div class="wall-item-tools-right float-end">
{{$drop}}
</div>
</div>
diff --git a/view/tpl/photo_view.tpl b/view/tpl/photo_view.tpl
index 6d566cab9..473e34123 100644
--- a/view/tpl/photo_view.tpl
+++ b/view/tpl/photo_view.tpl
@@ -1,13 +1,13 @@
<div id="live-photos"></div>
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $tools || $map || $edit}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown">
<i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
</button>
- <div class="dropdown-menu dropdown-menu-right flex-column">
+ <div class="dropdown-menu dropdown-menu-end flex-column">
{{if $tools}}
<a class="dropdown-item" href="{{$tools.profile.0}}"><i class="fa fa-user"></i>&nbsp;{{$tools.profile.1}}</a>
<a class="dropdown-item" href="{{$tools.cover.0}}"><i class="fa fa-picture-o"></i>&nbsp;{{$tools.cover.1}}</a>
@@ -23,8 +23,8 @@
{{/if}}
{{if $lock}}
<div class="btn-group">
- <button id="lockview" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" title="{{$lock}}" onclick="lockview('photo',{{$id}});" ><i class="fa fa-lock"></i></button>
- <ul id="panel-{{$id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
+ <button id="lockview" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" title="{{$lock}}" onclick="lockview('photo',{{$id}});" ><i class="fa fa-lock"></i></button>
+ <ul id="panel-{{$id}}" class="lockview-panel dropdown-menu dropdown-menu-end"></ul>
</div>
{{/if}}
{{if $prevlink || $nextlink}}
@@ -48,7 +48,7 @@
<form action="photos/{{$edit.nickname}}/{{$edit.resource_id}}" method="post" id="photo_edit_form" class="acl-form" data-form_id="photo_edit_form" data-allow_cid='{{$edit.allow_cid}}' data-allow_gid='{{$edit.allow_gid}}' data-deny_cid='{{$edit.deny_cid}}' data-deny_gid='{{$edit.deny_gid}}'>
<input type="hidden" name="item_id" value="{{$edit.item_id}}" />
{{* album renaming is not supported atm.
- <div class="form-group">
+ <div class="mb-3">
<label id="photo-edit-albumname-label" for="photo-edit-albumname">{{$edit.newalbum_label}}</label>
<input id="photo-edit-albumname" class="form-control" type="text" name="albname" value="{{$edit.album}}" placeholder="{{$edit.newalbum_placeholder}}" list="dl-albums" />
{{if $edit.albums}}
@@ -62,33 +62,35 @@
{{/if}}
</div>
*}}
- <div class="form-group">
+ <div class="mb-3">
<label id="photo-edit-caption-label" for="photo-edit-caption">{{$edit.capt_label}}</label>
<input id="photo-edit-caption" class="form-control" type="text" name="desc" value="{{$edit.caption}}" />
</div>
+ {{*
<div class="form-group">
<label id="photo-edit-tags-label" for="photo-edit-newtag">{{$edit.tag_label}}</label>
<input name="newtag" id="photo-edit-newtag" class="form-control" title="{{$edit.help_tags}}" type="text" />
</div>
+ *}}
<div class="form-group">
{{include file="field_select.tpl" field=$edit.album_select}}
</div>
- <div class="form-group">
+ <div class="mb-3">
<label class="radio-inline" id="photo-edit-rotate-cw-label" for="photo-edit-rotate-cw"><input id="photo-edit-rotate-cw" type="radio" name="rotate" value="1" />{{$edit.rotatecw}}</label>
<label class="radio-inline" id="photo-edit-rotate-ccw-label" for="photo-edit-rotate-ccw"><input id="photo-edit-rotate-ccw" type="radio" name="rotate" value="2" />{{$edit.rotateccw}}</label>
</div>
{{if $edit.adult_enabled}}
- <div class="form-group">
+ <div class="mb-3">
{{include file="field_checkbox.tpl" field=$edit.adult}}
</div>
{{/if}}
- <div class="form-group pull-left">
+ <div class="mb-3 float-start">
<button class="btn btn-danger btn-sm" id="photo-edit-delete-button" type="submit" name="delete" value="{{$edit.delete}}" onclick="return confirmDelete();" />{{$edit.delete}}</button>
</div>
- <div class="form-group btn-group pull-right">
+ <div class="mb-3 btn-group float-end">
{{if $edit.aclselect}}
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$edit.lockstate}}"></i>
</button>
{{/if}}
@@ -111,12 +113,12 @@
{{/if}}
<div class="photo-item-tools">
{{if $responses.count }}
- <div class="photo-item-tools-left pull-left">
+ <div class="photo-item-tools-left float-start">
<div class="{{if $responses.count > 1}}btn-group{{/if}}">
{{foreach $responses as $verb=>$response}}
{{if $response.count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="wall-item-{{$verb}}-{{$id}}">{{$response.count}} {{$response.button}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="wall-item-{{$verb}}-{{$id}}">{{$response.count}} {{$response.button}}</button>
{{if $response.list_part}}
<ul class="dropdown-menu" role="menu" aria-labelledby="wall-item-{{$verb}}-{{$id}}">{{foreach $response.list_part as $liker}}<li role="presentation">{{$liker}}</li>{{/foreach}}</ul>
{{else}}
@@ -127,14 +129,14 @@
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
<h4 class="modal-title">{{$response.title}}</h4>
</div>
<div class="modal-body">
<ul>{{foreach $response.list as $liker}}<li role="presentation">{{$liker}}</li>{{/foreach}}</ul>
</div>
<div class="modal-footer clear">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$modal_dismiss}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$modal_dismiss}}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
@@ -147,7 +149,7 @@
</div>
{{/if}}
{{if $likebuttons}}
- <div class="photo-item-tools-right btn-group pull-right">
+ <div class="photo-item-tools-right btn-group float-end">
<button type="button" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$likebuttons.id}},'like'); return false">
<i class="fa fa-thumbs-o-up" title="{{$likebuttons.likethis}}"></i>
</button>
@@ -155,7 +157,7 @@
<i class="fa fa-thumbs-o-down" title="{{$likebuttons.nolike}}"></i>
</button>
</div>
- <div id="like-rotator-{{$likebuttons.id}}" class="photo-like-rotator pull-right"></div>
+ <div id="like-rotator-{{$likebuttons.id}}" class="photo-like-rotator float-end"></div>
{{/if}}
<div class="clear"></div>
</div>
diff --git a/view/tpl/photos_recent.tpl b/view/tpl/photos_recent.tpl
index 63c8b3515..fe770d72e 100644
--- a/view/tpl/photos_recent.tpl
+++ b/view/tpl/photos_recent.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
{{if $can_post}}
<button class="btn btn-sm btn-success acl-form-trigger" title="{{$usage}}" onclick="openClose('photo-upload-form');" data-form_id="photos-upload-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$upload.0}}</button>
{{/if}}
@@ -15,7 +15,7 @@
{{include file="photo_top.tpl"}}
{{/foreach}}
{{** make sure this element is at the bottom - we rely on that in endless scroll **}}
- <span id="page-end" class="d-block float-left w-100" style="position: absolute; bottom: 0px"></span>
+ <span id="page-end" class="d-block float-start w-100" style="position: absolute; bottom: 0px"></span>
</div>
</div>
</div>
diff --git a/view/tpl/photos_upload.tpl b/view/tpl/photos_upload.tpl
index ea173049b..72f6c4611 100644
--- a/view/tpl/photos_upload.tpl
+++ b/view/tpl/photos_upload.tpl
@@ -4,7 +4,7 @@
<form action="#" enctype="multipart/form-data" method="post" name="photos-upload-form" id="photos-upload-form" class="acl-form" data-form_id="photos-upload-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
<input type="hidden" id="photos-upload-source" name="source" value="photos" />
- <div class="form-group">
+ <div class="mb-3">
<label for="photos-upload-album">{{$newalbum_label}}</label>
<input type="text" class="form-control" id="photos-upload-album" name="newalbum" placeholder="{{$newalbum_placeholder}}" value="{{$selname}}" list="dl-photo-upload">
<datalist id="dl-photo-upload">
@@ -16,18 +16,16 @@
</datalist>
</div>
{{if $default}}
- <!-- div class="form-group">
+ <!-- div class="mb-3">
<input id="photos-upload-choose" type="file" name="userfile" />
</div -->
{{include file="field_input.tpl" field=$caption}}
- {{include file="field_checkbox.tpl" field=$visible}}
- <div id="body-textarea">
{{include file="field_textarea.tpl" field=$body}}
- </div>
+ {{include file="field_checkbox.tpl" field=$visible}}
<div class="pull-right btn-group">
<div class="btn-group">
{{if $lockstate}}
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
@@ -40,17 +38,16 @@
{{if $uploader}}
{{include file="field_input.tpl" field=$caption}}
- {{include file="field_checkbox.tpl" field=$visible}}
- <div id="body-textarea">
{{include file="field_textarea.tpl" field=$body}}
- </div>
+ {{include file="field_checkbox.tpl" field=$visible}}
+
<div id="photos-upload-perms" class="btn-group pull-right">
{{if $lockstate}}
- <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
- <div class="pull-right">
+ <div class="float-end">
{{$uploader}}
</div>
</div>
@@ -58,7 +55,7 @@
</form>
</div>
<table id="upload-index">
- <tr id="new-upload-progress-bar-1"></tr> {{* this is needed to append the upload files in the right order *}}
+ <tr id="new-upload-progress-bar-0"></tr> {{* this is needed to append the upload files in the right order *}}
</table>
{{$aclselect}}
<div id="photos-upload-end" class="clear"></div>
diff --git a/view/tpl/pinned_item.tpl b/view/tpl/pinned_item.tpl
index a24c4ae44..4d059e0a4 100644
--- a/view/tpl/pinned_item.tpl
+++ b/view/tpl/pinned_item.tpl
@@ -41,12 +41,12 @@
{{/if}}
{{/if}}
<div class="p-2 clearfix wall-item-head{{if !$title && !$event && !$photo}} rounded-top{{/if}}{{if $is_new && !$event}} wall-item-head-new{{/if}}">
- <span class="float-right" title="{{$pinned}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
+ <span class="float-end" title="{{$pinned}}"><i class="fa fa-thumb-tack">&nbsp;</i></span>
<div class="wall-item-info" id="pinned-item-info-{{$id}}" >
<div class="wall-item-photo-wrapper{{if $owner_url}} wwfrom{{/if}} h-card p-author" id="pinned-item-photo-wrapper-{{$id}}">
- <img src="{{$thumb}}" class="fakelink wall-item-photo u-photo p-name" id="pinned-item-photo-{{$id}}" alt="{{$name}}" data-toggle="dropdown" />
+ <img src="{{$thumb}}" class="fakelink wall-item-photo u-photo p-name" id="pinned-item-photo-{{$id}}" alt="{{$name}}" data-bs-toggle="dropdown" />
{{if $thread_author_menu}}
- <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-toggle="dropdown"></i>
+ <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
<div class="dropdown-menu">
{{foreach $thread_author_menu as $mitem}}
<a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
@@ -80,7 +80,7 @@
</div>
{{/if}}
<div class="p-2 clearfix wall-item-tools">
- <div class="float-right wall-item-tools-right">
+ <div class="float-end wall-item-tools-right">
<div class="btn-group">
<div id="pinned-rotator-{{$id}}" class="spinner-wrapper">
<div class="spinner s"></div>
@@ -89,10 +89,10 @@
<div class="btn-group">
{{if $isevent}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="pinned-item-attend-menu-{{$id}}" title="{{$attend_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="pinned-item-attend-menu-{{$id}}" title="{{$attend_title}}">
<i class="fa fa-calendar-check-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
<a class="dropdown-item" href="#" title="{{$attend.0}}" onclick="itemAddToCal({{$id}}); dolike({{$id}},'attendyes'); return false;">
<i class="item-act-list fa fa-check{{if $my_responses.attend}} ivoted{{/if}}" ></i> {{$attend.0}}
</a>
@@ -107,16 +107,16 @@
{{/if}}
{{if $canvote}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="pinned-item-consensus-menu-{{$id}}" title="{{$vote_title}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="pinned-item-consensus-menu-{{$id}}" title="{{$vote_title}}">
<i class="fa fa-check-square-o"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-consensus-menu-{{$id}}">
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="wall-item-consensus-menu-{{$id}}">
<a class="dropdown-item" href="#" title="{{$conlabels.0}}" onclick="dolike({{$id}},'agree'); return false;">
<i class="item-act-list fa fa-check{{if $my_responses.agree}} ivoted{{/if}}" ></i> {{$conlabels.0}}
</a>
<a class="dropdown-item" href="#" title="{{$conlabels.1}}" onclick="dolike({{$id}},'disagree'); return false;">
<i class="item-act-list fa fa-times{{if $my_responses.disagree}} ivoted{{/if}}" ></i> {{$conlabels.1}}
- </a>
+ </a>
<a class="dropdown-item" href="#" title="{{$conlabels.2}}" onclick="dolike({{$id}},'abstain'); return false;">
<i class="item-act-list fa fa-question{{if $my_responses.abstain}} ivoted{{/if}}" ></i> {{$conlabels.2}}
</a>
@@ -124,10 +124,10 @@
</div>
{{/if}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="pinned-item-menu-{{$id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="pinned-item-menu-{{$id}}">
<i class="fa fa-cog"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-menu-{{$id}}">
+ <div class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="wall-item-menu-{{$id}}">
{{if $share}}
<a class="dropdown-item" href="#" onclick="jotShare({{$id}},{{$item_type}}); return false;"><i class="generic-icons-nav fa fa-fw fa-retweet" title="{{$share.0}}"></i>{{$share.0}}</a>
{{/if}}
@@ -152,7 +152,7 @@
{{if $attachments}}
<div class="wall-item-tools-left btn-group" id="pinned-item-tools-left-{{$id}}">
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="pinned-attachment-menu-{{$id}}">
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="pinned-attachment-menu-{{$id}}">
<i class="fa fa-paperclip"></i>
</button>
<div class="dropdown-menu">{{$attachments}}</div>
@@ -162,14 +162,14 @@
{{foreach $responses as $verb=>$response}}
{{if $response.count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-toggle="modal" data-target="#{{$verb}}Modal-{{$id}}"{{else}} data-toggle="dropdown"{{/if}} id="pinned-item-{{$verb}}-{{$id}}">{{$response.count}} {{$response.button}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle"{{if $response.modal}} data-bs-toggle="modal" data-bs-target="#{{$verb}}Modal-{{$id}}"{{else}} data-bs-toggle="dropdown"{{/if}} id="pinned-item-{{$verb}}-{{$id}}">{{$response.count}} {{$response.button}}</button>
{{if $response.modal}}
<div class="modal" id="pinned-{{$verb}}Modal-{{$id}}">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h3 class="modal-title">{{$response.count}} {{$response.button}}</h3>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body response-list">
<ul class="nav nav-pills flex-column">
@@ -177,7 +177,7 @@
</ul>
</div>
<div class="modal-footer clear">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$modal_dismiss}}</button>
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">{{$modal_dismiss}}</button>
</div>
</div>
</div>
diff --git a/view/tpl/poke_content.tpl b/view/tpl/poke_content.tpl
index f368cb024..3872d21ff 100644
--- a/view/tpl/poke_content.tpl
+++ b/view/tpl/poke_content.tpl
@@ -14,7 +14,7 @@
<form action="poke" method="get">
-<div class="form-group field input">
+<div class="mb-3 field input">
<label id="poke-recip-label" for="poke-recip">{{$clabel}}</label>
<input class="form-control" id="poke-recip" type="text" value="{{$name}}" name="pokename" autocomplete="off" />
</div>
@@ -26,7 +26,7 @@
{{if $poke_basic}}
<input type="hidden" name="verb" value="poke" />
{{else}}
-<div class="form-group field custom">
+<div class="mb-3 field custom">
<label for="poke-verb-select" id="poke-verb-lbl">{{$choice}}</label>
<select class="form-control" name="verb" id="poke-verb-select" >
{{foreach $verbs as $v}}
diff --git a/view/tpl/privacy_groups.tpl b/view/tpl/privacy_groups.tpl
index 327a15aee..b52cec4c8 100644
--- a/view/tpl/privacy_groups.tpl
+++ b/view/tpl/privacy_groups.tpl
@@ -1,29 +1,16 @@
<div class="generic-content-wrapper">
<div class="clearfix section-title-wrapper">
- <button type="button" class="btn btn-sm btn-success float-right" onclick="openClose('group_tools')"><i class="fa fa-plus-circle"></i> {{$add_new_label}}</button>
<h2>{{$title}}</h2>
</div>
- <div id="group_tools" class="clearfix section-content-tools-wrapper"{{if ! $new}} style="display: none"{{/if}}>
+ <div id="group_tools" class="clearfix section-content-tools-wrapper">
<form action="group/new" id="group-edit-form" method="post" >
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
{{include file="field_input.tpl" field=$gname}}
{{include file="field_checkbox.tpl" field=$public}}
+ {{include file="field_checkbox.tpl" field=$is_default_acl}}
+ {{include file="field_checkbox.tpl" field=$is_default_group}}
{{$pgrp_extras}}
- <button type="submit" name="submit" class="btn btn-sm btn-primary float-right">{{$submit}}</button>
+ <button type="submit" name="submit" class="btn btn-primary float-end">{{$submit}}</button>
</form>
</div>
-
- <table id="groups-index">
- <tr>
- <th width="99%">{{$name_label}}</th>
- <th width="1%">{{$count_label}}</th>
- </tr>
-
- {{foreach $entries as $group}}
- <tr id="groups-index-{{$group.id}}" class="group-index-row">
- <td><a href="group/{{$group.id}}">{{$group.name}}</a></td>
- <td>{{$group.count}}</td>
- </tr>
- {{/foreach}}
- </table>
</div>
diff --git a/view/tpl/profile_advanced.tpl b/view/tpl/profile_advanced.tpl
index e6653c130..2ee5e9d09 100644
--- a/view/tpl/profile_advanced.tpl
+++ b/view/tpl/profile_advanced.tpl
@@ -1,11 +1,11 @@
<div id="profile-content-wrapper" class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="float-right">
+ <div class="float-end">
{{if $profile.like_count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="profile-like">{{$profile.like_count}} {{$profile.like_button_label}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="profile-like">{{$profile.like_count}} {{$profile.like_button_label}}</button>
{{if $profile.likers}}
- <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="profile-like">{{foreach $profile.likers as $liker}}<li role="presentation"><a href="{{$liker.url}}"><img class="menu-img-1" src="{{$liker.photo}}" alt="{{$liker.name}}" /> {{$liker.name}}</a></li>{{/foreach}}</ul>
+ <ul class="dropdown-menu dropdown-menu-end" role="menu" aria-labelledby="profile-like">{{foreach $profile.likers as $liker}}<li role="presentation"><a href="{{$liker.url}}"><img class="menu-img-1" src="{{$liker.photo}}" alt="{{$liker.name}}" /> {{$liker.name}}</a></li>{{/foreach}}</ul>
{{/if}}
</div>
{{/if}}
@@ -18,12 +18,11 @@
{{/if}}
{{if $editmenu.multi}}
<div class="btn-group">
- <a class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" href="#" ><i class="fa fa-pencil"></i>&nbsp;{{$editmenu.edit.3}}</a>
- <div class="dropdown-menu dropdown-menu-right">
+ <a class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" href="#" ><i class="fa fa-pencil"></i>&nbsp;{{$editmenu.edit.3}}</a>
+ <div class="dropdown-menu dropdown-menu-end">
{{foreach $editmenu.menu.entries as $e}}
- <a class="dropdown-item" href="profiles/{{$e.id}}"><img class="dropdown-menu-img-xs" src='{{$e.photo}}'> {{$e.profile_name}}</a>
+ <a class="dropdown-item" href="profiles/{{$e.id}}"><img class="menu-img-1" src='{{$e.photo}}'> {{$e.profile_name}}</a>
{{/foreach}}
- <a class="dropdown-item" href="profile_photo" >{{$editmenu.menu.chg_photo}}</a>
{{if $editmenu.menu.cr_new}}
<a class="dropdown-item" href="profiles/new" id="profile-listing-new-link">{{$editmenu.menu.cr_new}}</a>
{{/if}}
@@ -34,11 +33,11 @@
<a class="btn btn-primary btn-sm" href="{{$editmenu.edit.0}}" ><i class="fa fa-pencil"></i>&nbsp;{{$editmenu.edit.3}}</a>
</div>
{{/if}}
- {{if $exportlink}}
+ {{** if $exportlink}}
<div class="btn-group">
<a class="btn btn-outline-secondary btn-sm" href="{{$exportlink}}" ><i class="fa fa-vcard"></i>&nbsp;{{$export}}</a>
</div>
- {{/if}}
+ {{/if **}}
</div>
<h2>{{$title}}</h2>
<div class="clear"></div>
@@ -325,7 +324,7 @@
{{/if}}
{{if $item.like_count}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="thing-like-{{$item.term_hash}}">{{$item.like_count}} {{$item.like_label}}</button>
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" id="thing-like-{{$item.term_hash}}">{{$item.like_count}} {{$item.like_label}}</button>
{{if $item.likes}}
<ul class="dropdown-menu" role="menu" aria-labelledby="thing-like-{{$item.term_hash}}">{{foreach $item.likes as $liker}}<li role="presentation"><a href="{{$liker.xchan_url}}"><img class="dropdown-menu-img-xs" src="{{$liker.xchan_photo_s}}" alt="{{$liker.name}}" /> {{$liker.xchan_name}}</a></li>{{/foreach}}</ul>
{{/if}}
diff --git a/view/tpl/profile_edit.tpl b/view/tpl/profile_edit.tpl
index 8add9bb9d..5c48f4bd3 100644
--- a/view/tpl/profile_edit.tpl
+++ b/view/tpl/profile_edit.tpl
@@ -1,11 +1,11 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="dropdown float-right" id="profile-edit-links">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+ <div class="dropdown float-end" id="profile-edit-links">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
</button>
- <div class="dropdown-menu dropdown-menu-right">
- <a class="dropdown-item" href="profile_photo" id="profile-photo_upload-link" title="{{$profpic}}"><i class="fa fa-fw fa-user"></i>&nbsp;{{$profpic}}</a>
+ <div class="dropdown-menu dropdown-menu-end">
+ <a class="dropdown-item" href="profile_photo/{{$profile_id}}" id="profile-photo_upload-link" title="{{$profpic}}"><i class="fa fa-fw fa-user"></i>&nbsp;{{$profpic}}</a>
{{if $is_default}}
<a class="dropdown-item" href="cover_photo" id="cover-photo_upload-link" title="{{$coverpic}}"><i class="fa fa-fw fa-picture-o"></i>&nbsp;{{$coverpic}}</a>
{{/if}}
@@ -30,7 +30,7 @@
{{/if}}
</div>
</div>
- <h2>{{$banner}}</h2>
+ <h2>{{$banner}}{{if $multi_profiles}}: {{$profile_name.2}}{{/if}}</h2>
<div class="clear"></div>
</div>
<div class="section-content-tools-wrapper" id="profile-upload-form">
@@ -49,12 +49,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="personal">
<h3>
- <a data-toggle="collapse" data-target="#personal-collapse" href="#" aria-expanded="true" aria-controls="personal-collapse">
- {{$personal}}
+ <a data-bs-toggle="collapse" data-bs-target="#personal-collapse" href="#" aria-expanded="true" aria-controls="personal-collapse">
+ {{$basic}}
</a>
</h3>
</div>
- <div id="personal-collapse" class="panel-collapse collapse show" data-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="personal">
+ <div id="personal-collapse" class="panel-collapse collapse show" data-bs-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="personal">
<div class="section-content-tools-wrapper">
{{if $multi_profiles}}
{{include file="field_input.tpl" field=$profile_name}}
@@ -69,7 +69,7 @@
{{/if}}
{{if $fields.gender}}
- <div id="profile-edit-gender-wrapper" class="form-group field select" >
+ <div id="profile-edit-gender-wrapper" class="mb-3 field select" >
<label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}}</label>
{{if $advanced}}
{{$gender}}
@@ -84,9 +84,19 @@
{{$dob}}
{{/if}}
+ {{$profile_in_dir}}
+
+ {{$suggestme}}
+
+ {{if $show_presence}}
+ {{include file="field_checkbox.tpl" field=$show_presence}}
+ {{/if}}
+
+ {{if $hide_friends}}
{{include file="field_checkbox.tpl" field=$hide_friends}}
+ {{/if}}
- <div class="form-group" >
+ <div class="mb-3" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
@@ -94,9 +104,9 @@
</div>
</div>
- {{if $fields.comms }}
+ {{if $fields.comms && $vcard}}
- <div id="template-form-vcard-tel" class="form-group form-vcard-tel">
+ <div id="template-form-vcard-tel" class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value="CELL">{{$mobile}}</option>
<option value="HOME">{{$home}}</option>
@@ -107,7 +117,7 @@
<i data-remove="vcard-tel" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-email" class="form-group form-vcard-email">
+ <div id="template-form-vcard-email" class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -117,7 +127,7 @@
<i data-remove="vcard-email" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
</div>
- <div id="template-form-vcard-impp" class="form-group form-vcard-impp">
+ <div id="template-form-vcard-impp" class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value="HOME">{{$home}}</option>
<option value="WORK">{{$work}}</option>
@@ -129,8 +139,8 @@
<div class="section-content-wrapper-np">
<div id="vcard-cancel-{{$vcard.id}}" class="vcard-cancel vcard-cancel-btn" data-id="{{$vcard.id}}" data-action="cancel"><i class="fa fa-close"></i></div>
- <div id="vcard-add-field-{{$vcard.id}}" class="dropdown pull-right vcard-add-field">
- <button data-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
+ <div id="vcard-add-field-{{$vcard.id}}" class="dropdown float-end vcard-add-field">
+ <button data-bs-toggle="dropdown" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle"><i class="fa fa-plus"></i> {{$add_field}}</button>
<ul class="dropdown-menu">
<li class="add-vcard-tel"><a href="#" data-add="vcard-tel" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$tel_label}}</a></li>
<li class="add-vcard-email"><a href="#" data-add="vcard-email" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$email_label}}</a></li>
@@ -149,11 +159,11 @@
</div>
<div id="vcard-info-{{$vcard.id}}" class="vcard-info section-content-wrapper">
- <div class="vcard-tel form-group">
+ <div class="vcard-tel mb-3">
<div class="form-vcard-tel-wrapper">
{{if $vcard.tels}}
{{foreach $vcard.tels as $tel}}
- <div class="form-group form-vcard-tel">
+ <div class="mb-3 form-vcard-tel">
<select name="tel_type[]">
<option value=""{{if $tel.type.0 != 'CELL' && $tel.type.0 != 'HOME' && $tel.type.0 != 'WORK' && $tel.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$tel.type.1}}</option>
<option value="CELL"{{if $tel.type.0 == 'CELL'}} selected="selected"{{/if}}>{{$mobile}}</option>
@@ -170,11 +180,11 @@
</div>
- <div class="vcard-email form-group">
+ <div class="vcard-email mb-3">
<div class="form-vcard-email-wrapper">
{{if $vcard.emails}}
{{foreach $vcard.emails as $email}}
- <div class="form-group form-vcard-email">
+ <div class="mb-3 form-vcard-email">
<select name="email_type[]">
<option value=""{{if $email.type.0 != 'HOME' && $email.type.0 != 'WORK' && $email.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$email.type.1}}</option>
<option value="HOME"{{if $email.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -189,11 +199,11 @@
</div>
</div>
- <div class="vcard-impp form-group">
+ <div class="vcard-impp mb-3">
<div class="form-vcard-impp-wrapper">
{{if $vcard.impps}}
{{foreach $vcard.impps as $impp}}
- <div class="form-group form-vcard-impp">
+ <div class="mb-3 form-vcard-impp">
<select name="impp_type[]">
<option value=""{{if $impp.type.0 != 'HOME' && $impp.type.0 != 'WORK' && $impp.type.0 != 'OTHER'}} selected="selected"{{/if}}>{{$impp.type.1}}</option>
<option value="HOME"{{if $impp.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
@@ -219,12 +229,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="location">
<h3>
- <a data-toggle="collapse" data-target="#location-collapse" href="#" aria-expanded="true" aria-controls="location-collapse">
+ <a data-bs-toggle="collapse" data-bs-target="#location-collapse" href="#" aria-expanded="true" aria-controls="location-collapse">
{{$location}}
</a>
</h3>
</div>
- <div id="location-collapse" class="panel-collapse collapse" data-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="location">
+ <div id="location-collapse" class="panel-collapse collapse" data-bs-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="location">
<div class="section-content-tools-wrapper">
{{if $fields.address}}
{{include file="field_input.tpl" field=$address}}
@@ -250,7 +260,7 @@
{{include file="field_input.tpl" field=$hometown}}
{{/if}}
- <div class="form-group" >
+ <div class="mb-3" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
@@ -264,15 +274,15 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="relation">
<h3>
- <a data-toggle="collapse" data-target="#relation-collapse" href="#" aria-expanded="true" aria-controls="relation-collapse">
+ <a data-bs-toggle="collapse" data-bs-target="#relation-collapse" href="#" aria-expanded="true" aria-controls="relation-collapse">
{{$relation}}
</a>
</h3>
</div>
- <div id="relation-collapse" class="panel-collapse collapse" data-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="relation">
+ <div id="relation-collapse" class="panel-collapse collapse" data-bs-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="relation">
<div class="section-content-tools-wrapper">
{{if $fields.marital }}
- <div id="profile-edit-marital-wrapper" class="form-group field" >
+ <div id="profile-edit-marital-wrapper" class="mb-3 field" >
<label id="profile-edit-marital-label" for="profile-edit-marital" ><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$lbl_marital}}</label>
{{if $advanced}}
{{$marital}}
@@ -292,7 +302,7 @@
{{/if}}
{{if $fields.sexual}}
- <div id="profile-edit-sexual-wrapper" class="form-group field" >
+ <div id="profile-edit-sexual-wrapper" class="mb-3 field" >
<label id="profile-edit-sexual-label" for="sexual-select" >{{$lbl_sexual}}</label>
{{if $advanced}}
{{$sexual}}
@@ -303,7 +313,7 @@
<div class="clear"></div>
{{/if}}
- <div class="form-group" >
+ <div class="mb-3" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
@@ -315,12 +325,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="miscellaneous">
<h3>
- <a data-toggle="collapse" data-target="#miscellaneous-collapse" href="#" aria-expanded="true" aria-controls="miscellaneous-collapse">
+ <a data-bs-toggle="collapse" data-bs-target="#miscellaneous-collapse" href="#" aria-expanded="true" aria-controls="miscellaneous-collapse">
{{$miscellaneous}}
</a>
</h3>
</div>
- <div id="miscellaneous-collapse" class="panel-collapse collapse" data-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="miscellaneous">
+ <div id="miscellaneous-collapse" class="panel-collapse collapse" data-bs-parent="#profile-edit-wrapper" role="tabpanel" aria-labelledby="miscellaneous">
<div class="section-content-tools-wrapper">
{{if $fields.homepage}}
{{include file="field_input.tpl" field=$homepage}}
@@ -395,7 +405,7 @@
{{include file="field_input.tpl" field=$field}}
{{/foreach}}
{{/if}}
- <div class="form-group" >
+ <div class="mb-3" >
<button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
</div>
<div class="clear"></div>
diff --git a/view/tpl/profile_listing_header.tpl b/view/tpl/profile_listing_header.tpl
index 42abf2735..4fa2d6783 100644
--- a/view/tpl/profile_listing_header.tpl
+++ b/view/tpl/profile_listing_header.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <a class="btn btn-success btn-sm pull-right" href="{{$cr_new_link}}" id="profile-listing-new-link" title="{{$cr_new}}" ><i class="fa fa-plus-circle"></i>&nbsp;{{$cr_new}}</a>
+ <a class="btn btn-success btn-sm float-end" href="{{$cr_new_link}}" id="profile-listing-new-link" title="{{$cr_new}}" ><i class="fa fa-plus-circle"></i>&nbsp;{{$cr_new}}</a>
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper">
diff --git a/view/tpl/profile_photo.tpl b/view/tpl/profile_photo.tpl
index 61d8f4254..c8f5b939a 100644
--- a/view/tpl/profile_photo.tpl
+++ b/view/tpl/profile_photo.tpl
@@ -1,152 +1,56 @@
-<script>
- var initializeEmbedPhotoDialog = function () {
- $('.embed-photo-selected-photo').each(function (index) {
- $(this).removeClass('embed-photo-selected-photo');
- });
- getPhotoAlbumList();
- $('#embedPhotoModalBodyAlbumDialog').off('click');
- $('#embedPhotoModal').modal('show');
- };
-
- var choosePhotoFromAlbum = function (album) {
- $.post("embedphotos/album", {name: album},
- function(data) {
- if (data['status']) {
- $('#embedPhotoModalLabel').html("{{$modalchooseimages}}");
- $('#embedPhotoModalBodyAlbumDialog').html('\
- <div><div class="nav nav-pills flex-column">\n\
- <li class="nav-item"><a class="nav-link" href="#" onclick="initializeEmbedPhotoDialog();return false;">\n\
- <i class="fa fa-chevron-left"></i>&nbsp\n\
- {{$modaldiffalbum}}\n\
- </a>\n\
- </li>\n\
- </div><br></div>')
- $('#embedPhotoModalBodyAlbumDialog').append(data['content']);
- $('#embedPhotoModalBodyAlbumDialog').click(function (evt) {
- evt.preventDefault();
- var image = document.getElementById(evt.target.id);
- if (typeof($(image).parent()[0]) !== 'undefined') {
- var imageparent = document.getElementById($(image).parent()[0].id);
- $(imageparent).toggleClass('embed-photo-selected-photo');
- var href = $(imageparent).attr('href');
- $.post("embedphotos/photolink", {href: href},
- function(ddata) {
- if (ddata['status']) {
- var pf = $('#profile-photo-profiles').val();
- var prof = ((typeof pf !== 'undefined') ? '?f=&pf=' + pf : '');
- window.location.href = 'profile_photo/use/' + ddata['resource_id'] + prof;
- } else {
- window.console.log("{{$modalerrorlink}}" + ':' + ddata['errormsg']);
- }
- return false;
- },
- 'json');
- $('#embedPhotoModalBodyAlbumDialog').html('');
- $('#embedPhotoModalBodyAlbumDialog').off('click');
- $('#embedPhotoModal').modal('hide');
- }
- });
-
- $('#embedPhotoModalBodyAlbumListDialog').addClass('d-none');
- $('#embedPhotoModalBodyAlbumDialog').removeClass('d-none');
- } else {
- window.console.log("{{$modalerroralbum}} " + JSON.stringify(album) + ':' + data['errormsg']);
- }
- return false;
- },
- 'json');
- };
-
- var getPhotoAlbumList = function () {
- $.post("embedphotos/albumlist", {},
- function(data) {
- if (data['status']) {
- var albums = data['albumlist']; //JSON.parse(data['albumlist']);
- $('#embedPhotoModalLabel').html("{{$modalchoosealbum}}");
- $('#embedPhotoModalBodyAlbumList').html('<ul class="nav nav-pills flex-column"></ul>');
- for(var i=0; i<albums.length; i++) {
- var albumName = albums[i].text;
- var jsAlbumName = albums[i].jstext;
- var albumLink = '<li class="nav-item">';
- albumLink += '<a class="nav-link" href="#" onclick="choosePhotoFromAlbum(\'' + jsAlbumName + '\'); return false;">' + albumName + '</a>';
- albumLink += '</li>';
- $('#embedPhotoModalBodyAlbumList').find('ul').append(albumLink);
- }
- $('#embedPhotoModalBodyAlbumDialog').addClass('d-none');
- $('#embedPhotoModalBodyAlbumListDialog').removeClass('d-none');
- } else {
- window.console.log("{{$modalerrorlist}}" + ':' + data['errormsg']);
- }
- return false;
- },
- 'json');
- };
-</script>
-
+<input id="invisible-photos-file-upload" type="file" name="files" style="visibility:hidden;position:absolute;top:-50px;left:-50px;width:0;height:0;">
<div id="profile-photo-content" class="generic-content-wrapper">
- <div class="section-title-wrapper">
- <h2>{{$title}}</h2>
- </div>
- <div class="section-content-wrapper">
-
- <form enctype="multipart/form-data" action="profile_photo" method="post">
- <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
-
- <div id="profile-photo-upload-wrapper">
- {{if $info}}
- <div class="section-content-warning-wrapper">{{$info}}</div>
- {{/if}}
- {{if $importfile}}
- <input type="hidden" name="importfile" value="{{$importfile}}">
- {{else}}
- <label id="profile-photo-upload-label" class="form-label" for="profile-photo-upload">{{$lbl_upfile}}</label>
- <input name="userfile" class="form-input" type="file" id="profile-photo-upload" size="48" />
- {{/if}}
- <div class="clear"></div>
-
-
- {{if $single}}
- <input type="hidden" name="profile" value="{{$profile0.id}}" />
- {{else}}
-
-
-
- <label id="profile-photo-profiles-label" class="form-label" for="profile-photo-profiles">{{$lbl_profiles}}</label>
- <select name="profile" id="profile-photo-profiles" class="form-control" >
- {{foreach $profiles as $p}}
- <option value="{{$p.id}}" {{if $p.selected}}selected="selected"{{/if}}>{{$p.name}}</option>
- {{/foreach}}
- </select>
- <div class="clear"></div>
- <br />
- <br />
- {{/if}}
-
- <div id="profile-photo-submit-wrapper">
- <button type="submit" class="btn btn-outline-primary" name="submit" id="profile-photo-submit">{{$submit}}</button>
- <button type="submit" class="btn btn-outline-danger" name="remove" id="profile-photo-remove">{{$remove}}</button>
+ <div class="section-title-wrapper">
+ <h2>{{$title}}: {{$profile.name}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+
+ <form enctype="multipart/form-data" id="profile-photo-form" action="profile_photo" method="post">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <div id="profile-photo-upload-wrapper">
+ {{if $info}}
+ <div class="section-content-warning-wrapper">{{$info}}</div>
+ {{/if}}
+ {{if $importfile}}
+ <input type="hidden" name="importfile" value="{{$importfile}}">
+ {{/if}}
+ <div class="clear mb-3"></div>
+
+ <input type="hidden" name="profile" value="{{$profile_id}}"/>
+
+ <div id="profile-photo-upload-spinner" class="spinner-wrapper">
+ <div class="spinner m"></div>
+ </div>
+ <div id="profile-photo-submit-wrapper">
+ <button type="submit" class="btn btn-primary float-end" name="submit" id="profile-photo-submit">
+ {{$submit}}
+ </button>
+ <button id="embed-photo-wrapper" type="button"
+ class="btn btn-default btn-outline-success float-end me-1" title="{{$embedPhotos}}"
+ onclick="initializeEmbedPhotoDialog();">
+ <i id="embed-photo" class="fa fa-file-image-o"></i> {{$select}}
+ </button>
+ <button type="submit" class="btn btn-outline-danger" name="remove" id="profile-photo-remove">
+ {{$remove}}
+ </button>
+ </div>
</div>
- </div>
</form>
- <br />
- <div id="profile-photo-link-select-wrapper">
- <button id="embed-photo-wrapper" class="btn btn-default btn-primary" title="{{$embedPhotos}}" onclick="initializeEmbedPhotoDialog();return false;">
- <i id="embed-photo" class="fa fa-file-image-o"></i> {{$select}}
- </button>
- </div>
</div>
</div>
-<div class="modal" id="embedPhotoModal" tabindex="-1" role="dialog" aria-labelledby="embedPhotoLabel" aria-hidden="true">
+<div class="modal" id="embedPhotoModal" tabindex="-1" role="dialog" aria-labelledby="embedPhotoLabel"
+ aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
- <div class="modal-body" id="embedPhotoModalBody" >
+ <div class="modal-body" id="embedPhotoModalBody">
<div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
<div id="embedPhotoModalBodyAlbumList"></div>
</div>
@@ -155,3 +59,115 @@
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
+
+<script src="vendor/blueimp/jquery-file-upload/js/vendor/jquery.ui.widget.js"></script>
+<script src="vendor/blueimp/jquery-file-upload/js/jquery.iframe-transport.js"></script>
+<script src="vendor/blueimp/jquery-file-upload/js/jquery.fileupload.js"></script>
+<script>
+ var initializeEmbedPhotoDialog = function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ $(this).removeClass('embed-photo-selected-photo');
+ });
+ getPhotoAlbumList();
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('show');
+ };
+
+ var choosePhotoFromAlbum = function (album) {
+ $.post("embedphotos/album", {name: album},
+ function (data) {
+ if (data['status']) {
+ $('#embedPhotoModalLabel').html("{{$modalchooseimages}}");
+ $('#embedPhotoModalBodyAlbumDialog').html('\
+ <div><div class="nav nav-pills flex-column">\n\
+ <li class="nav-item"><a class="nav-link" href="#" onclick="initializeEmbedPhotoDialog();return false;">\n\
+ <i class="fa fa-chevron-left"></i>&nbsp\n\
+ {{$modaldiffalbum}}\n\
+ </a>\n\
+ </li>\n\
+ </div><br></div>')
+ $('#embedPhotoModalBodyAlbumDialog').append(data['content']);
+ $('#embedPhotoModalBodyAlbumDialog').click(function (evt) {
+ evt.preventDefault();
+ var image = document.getElementById(evt.target.id);
+ if (typeof ($(image).parent()[0]) !== 'undefined') {
+ var imageparent = document.getElementById($(image).parent()[0].id);
+ $(imageparent).toggleClass('embed-photo-selected-photo');
+ var href = $(imageparent).attr('href');
+ $.post("embedphotos/photolink", {href: href},
+ function (ddata) {
+ if (ddata['status']) {
+ window.location.href = 'profile_photo/use/' + ddata['resource_id'] + '?f=&profile={{$profile_id}}';
+ } else {
+ window.console.log("{{$modalerrorlink}}" + ':' + ddata['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ $('#embedPhotoModalBodyAlbumDialog').html('');
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('hide');
+ }
+ });
+
+ $('#embedPhotoModalBodyAlbumListDialog').addClass('d-none');
+ $('#embedPhotoModalBodyAlbumDialog').removeClass('d-none');
+ } else {
+ window.console.log("{{$modalerroralbum}} " + JSON.stringify(album) + ':' + data['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ };
+
+ var getPhotoAlbumList = function () {
+ $.post("embedphotos/albumlist", {},
+ function (data) {
+ if (data['status']) {
+ var albums = data['albumlist']; //JSON.parse(data['albumlist']);
+ $('#embedPhotoModalLabel').html("{{$modalchoosealbum}}");
+ $('#embedPhotoModalBodyAlbumList').html('<ul class="nav nav-pills flex-column"></ul>');
+ for (var i = 0; i < albums.length; i++) {
+ var albumName = albums[i].text;
+ var jsAlbumName = albums[i].jstext;
+ var albumLink = '<li class="nav-item">';
+ albumLink += '<a class="nav-link" href="#" onclick="choosePhotoFromAlbum(\'' + jsAlbumName + '\'); return false;">' + albumName + '</a>';
+ albumLink += '</li>';
+ $('#embedPhotoModalBodyAlbumList').find('ul').append(albumLink);
+ }
+ $('#embedPhotoModalBodyAlbumDialog').addClass('d-none');
+ $('#embedPhotoModalBodyAlbumListDialog').removeClass('d-none');
+ } else {
+ window.console.log("{{$modalerrorlist}}" + ':' + data['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ };
+
+
+ $('#invisible-photos-file-upload').fileupload({
+ url: 'profile_photo',
+ dataType: 'json',
+ // dropZone: filedrag,
+ maxChunkSize: 2 * 1024 * 1024,
+
+ add: function (e, data) {
+ data.formData = $('#profile-photo-form').serializeArray();
+ data.submit();
+ $('#profile-photo-upload-spinner').show();
+ },
+
+ done: function (e, data) {
+ $('#profile-photo-upload-spinner').hide();
+ window.location.href = 'profile_photo/use/' + data.result.message + '?profile={{$profile_id}}';
+ }
+
+ });
+
+ $('#profile-photo-submit').click(function (event) {
+ event.preventDefault();
+ $('#invisible-photos-file-upload').trigger('click');
+ return false;
+ });
+</script>
diff --git a/view/tpl/profile_tabs.tpl b/view/tpl/profile_tabs.tpl
index dd9fbc52b..84ebf12bd 100644
--- a/view/tpl/profile_tabs.tpl
+++ b/view/tpl/profile_tabs.tpl
@@ -1,5 +1,3 @@
-<div class="dropdown-header text-white-50 d-lg-none" ><img src="{{$thumb}}" class="menu-img-1"> {{$name}}</div>
-<div class="dropdown-header text-black-50 d-none d-lg-block"><img src="{{$thumb}}" class="menu-img-1"> {{$name}}</div>
{{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}}
diff --git a/view/tpl/profile_vcard.tpl b/view/tpl/profile_vcard.tpl
index 262bf257f..3da580f60 100644
--- a/view/tpl/profile_vcard.tpl
+++ b/view/tpl/profile_vcard.tpl
@@ -1,60 +1,100 @@
-<div class="vcard h-card">
- {{if ! $zcard}}
- <div id="profile-photo-wrapper">{{if $editmenu}}<a href="profile_photo" title="{{$change_photo}}">{{/if}}<img class="photo u-photo" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.fullname}}">{{if $editmenu}}</a>{{/if}}</div>
- {{/if}}
- {{if $connect}}
- <div class="connect-btn-wrapper"><a href="{{$connect_url}}" class="btn btn-block btn-success btn-sm"><i class="fa fa-plus"></i> {{$connect}}</a></div>
- {{/if}}
- {{if ! $zcard}}
- {{if $editmenu.multi}}
- <div class="dropdown float-right">
- <a class="dropdown-toggle" data-toggle="dropdown" href="#" ><i class="fa fa-pencil" title="{{$editmenu.edit.1}}"></i></a>
- <div class="dropdown-menu dropdown-menu-right" role="menu">
- {{foreach $editmenu.menu.entries as $e}}
- <a href="profiles/{{$e.id}}" class="dropdown-item"><img class="menu-img-1" src='{{$e.photo}}'> {{$e.profile_name}}</a>
- {{/foreach}}
- <a href="profile_photo" class="dropdown-item">{{$editmenu.menu.chg_photo}}</a>
- {{if $editmenu.menu.cr_new}}<a href="profiles/new" id="profile-listing-new-link" class="dropdown-item">{{$editmenu.menu.cr_new}}</a>{{/if}}
+<div class="rounded mb-3 vcard-card h-card">
+ <div class="card mb-2">
+ <div class="row">
+ <div class="col-4" style="width: fit-content;">
+ <div id="profile-photo-wrapper">
+ <img class="rounded-start u-photo" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.fullname}}" style="width: 6rem; height:6rem;">
+ </div>
+ </div>
+ <div class="col-7 m-1 p-0">
+ {{if $editmenu.multi}}
+ <div class="dropdown float-end">
+ <a class="profile-edit-side-link float-end" data-bs-toggle="dropdown" href="#" ><i class="fa fa-pencil" title="{{$editmenu.edit.1}}"></i></a>
+ <div class="dropdown-menu dropdown-menu-end" role="menu">
+ {{foreach $editmenu.menu.entries as $e}}
+ <a href="profiles/{{$e.id}}" class="dropdown-item"><img class="menu-img-1" src='{{$e.photo}}'> {{$e.profile_name}}</a>
+ {{/foreach}}
+ {{if $editmenu.menu.cr_new}}
+ <a href="profiles/new" id="profile-listing-new-link" class="dropdown-item">{{$editmenu.menu.cr_new}}</a>
+ {{/if}}
+ </div>
+ </div>
+ {{elseif $editmenu}}
+ <a class="profile-edit-side-link float-end" href="{{$editmenu.edit.0}}" ><i class="fa fa-pencil" title="{{$editmenu.edit.1}}"></i></a>
+ {{/if}}
+
+ <div class="text-truncate">
+ <strong class="fn p-name">{{$profile.fullname}}{{if $profile.online}}<i class="fa fa-fw fa-asterisk text-danger ps-2" title="{{$profile.online}}"></i>{{/if}}</strong>
+ </div>
+ <div class="text-truncate">
+ <small class="text-muted p-adr">{{$profile.reddress}}</small>
+ </div>
+ {{if $connect}}
+ <div class="mt-1">
+ <a href="{{$connect_url}}" class="btn btn-success btn-sm" rel="nofollow">
+ <i class="fa fa-plus"></i> {{$connect}}
+ </a>
+ </div>
+ {{/if}}
+ </div>
</div>
</div>
- {{elseif $editmenu}}
- <a class="profile-edit-side-link" href="{{$editmenu.edit.0}}" ><i class="fa fa-pencil" title="{{$editmenu.edit.1}}"></i></a>
- {{/if}}
- {{/if}}
-
- {{if ! $zcard}}
- <div class="fn p-name">{{$profile.fullname}}{{if $profile.online}} <i class="fa fa-asterisk online-now" title="{{$profile.online}}"></i>{{/if}}</div>
- {{if $reddress}}<div class="reddress">{{$profile.reddress}}</div>{{/if}}
- {{/if}}
- {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
- {{if $location}}
- <dl class="location"><dt class="location-label">{{$location}}</dt>
- <dd class="adr h-adr">
- {{if $profile.address}}<div class="street-address p-street-address">{{$profile.address}}</div>{{/if}}
- <span class="city-state-zip">
- <span class="locality p-locality">{{$profile.locality}}</span>{{if $profile.locality}}, {{/if}}
- <span class="region p-region">{{$profile.region}}</span>
- <span class="postal-code p-postal-code">{{$profile.postal_code}}</span>
- </span>
- {{if $profile.country_name}}<span class="country-name p-country-name">{{$profile.country_name}}</span>{{/if}}
- </dd>
+ {{if $details}}
+ <div class="vcard ps-2 pe-2">
+ {{if $profile.pdesc}}
+ <div class="mb-2">{{$profile.pdesc}}</div>
+ {{/if}}
+ {{if $location}}
+ <dl class="mb-0 pb-1">
+ <dt class="location-label">{{$location}}</dt>
+ <dd class="adr h-adr">
+ {{if $profile.address}}
+ <div class="street-address p-street-address">{{$profile.address}}</div>
+ {{/if}}
+ <div class="city-state-zip">
+ <span class="postal-code p-postal-code">{{$profile.postal_code}}</span>
+ <span class="locality p-locality">{{$profile.locality}}</span>
+ </div>
+ {{if $profile.region}}
+ <div class="region p-region">{{$profile.region}}</div>
+ {{/if}}
+ {{if $profile.country_name}}
+ <div class="country-name p-country-name">{{$profile.country_name}}</div>
+ {{/if}}
+ </dd>
+ </dl>
+ {{/if}}
+ {{if $hometown}}
+ <dl class="mb-0 pb-1">
+ <dt class="hometown-label">{{$hometown}}</dt>
+ <dd class="p-hometown">{{$profile.hometown}}</dd>
+ </dl>
+ {{/if}}
+ {{if $gender}}
+ <dl class="mb-0 pb-1">
+ <dt class="gender-label">{{$gender}}</dt>
+ <dd class="p-gender">{{if $profile.gender_icon}}<i class="fa fa-{{$profile.gender_icon}}"></i>&nbsp;{{/if}}{{$profile.gender}}</dd>
+ </dl>
+ {{/if}}
+ {{if $marital}}
+ <dl class="mb-0 pb-1">
+ <dt class="marital-label"><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$marital}}</dt>
+ <dd class="marital-text">{{$profile.marital}}</dd>
</dl>
+ {{/if}}
+ {{if $homepage}}
+ <dl class="mb-0 pb-1">
+ <dt class="homepage-label">{{$homepage}}</dt>
+ <dd class="homepage-url u-url">{{$profile.homepage}}</dd>
+ </dl>
+ {{/if}}
+ <div class="hcard-addon"></div>
+ </div>
{{/if}}
-
- {{if $gender}}<dl class="mf"><dt class="gender-label">{{$gender}}</dt> <dd class="p-gender">{{if $profile.gender_icon}}<i class="fa fa-{{$profile.gender_icon}}"></i>&nbsp;{{/if}}{{$profile.gender}}</dd></dl>{{/if}}
-
- {{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$marital}}</dt><dd class="marital-text">{{$profile.marital}}</dd></dl>{{/if}}
-
- {{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url u-url">{{$profile.homepage}}</dd></dl>{{/if}}
-
-<div class="hcard-addon"></div>
</div>
-<div class="clear"></div>
-
-{{$rating}}
-
+{{if $details}}
{{$chanmenu}}
-
{{$contact_block}}
+{{/if}}
diff --git a/view/tpl/prv_message.tpl b/view/tpl/prv_message.tpl
deleted file mode 100644
index b8c81539d..000000000
--- a/view/tpl/prv_message.tpl
+++ /dev/null
@@ -1,107 +0,0 @@
-{{if $new}}
-<div class="generic-content-wrapper">
- <div class="section-title-wrapper">
- <h2>{{$header}}</h2>
- </div>
- <div class="section-content-wrapper">
-{{/if}}
- <div id="prvmail-wrapper">
- <input id="invisible-wall-file-upload" type="file" name="files" style="visibility:hidden;position:absolute;top:-50;left:-50;width:0;height:0;" multiple>
- <form id="prvmail-form" action="mail" method="post" >
- <input type="hidden" id="inp-prvmail-expires" name="expires" value="{{$defexpire}}" />
- <input type="hidden" name="media_str" id="jot-media" value="" />
- <input type="hidden" name="preview" id="mail-preview" value="0" />
- <input type="hidden" name="signature" id="mail-sig" value="" />
- {{if $new}}
- <div class="form-group">
- <label for="recip">{{$to}}</label>
- <input class="form-control" type="text" id="recip" name="messagerecip" value="{{$prefill}}" maxlength="255" />
- <input type="hidden" id="recip-complete" name="messageto" value="{{$preid}}">
- </div>
- <div class="form-group">
- <label for="prvmail-subject">{{$subject}}</label>
- <input class="form-control" type="text" maxlength="255" id="prvmail-subject" name="subject" value="{{$subjtxt}}" />
- </div>
- {{/if}}
- {{if $reply}}
- <input type="hidden" name="replyto" value="{{$parent}}" />
- <input type="hidden" name="messageto" value="{{$recphash}}" />
- <input type="hidden" name="subject" value="{{$subjtxt}}" />
- {{/if}}
- <div class="form-group">
- <label for="prvmail-text">{{$yourmessage}}</label>
- <textarea class="form-control" id="prvmail-text" name="body"{{if $new}} style="height: 10em;"{{/if}}>{{$text}}</textarea>
- </div>
- <div id="prvmail-submit-wrapper" class="form-group clearfix">
- <div id="prvmail-submit" class="float-right btn-group">
- <button class="btn btn-outline-secondary btn-sm" id="prvmail-preview" title="{{$preview}}" onclick="preview_mail(); return false;"><i class="fa fa-eye"></i></button>
- <button class="btn btn-primary btn-sm" type="submit" id="prvmail-submit" name="submit" value="{{$submit}}">{{$submit}}</button>
- </div>
- <div id="prvmail-tools" class="btn-toolbar">
- <div class="btn-group mr-2">
- <button id="main-editor-bold" class="btn btn-outline-secondary btn-sm" title="{{$bold}}" onclick="inserteditortag('b', 'prvmail-text'); return false;">
- <i class="fa fa-bold jot-icons"></i>
- </button>
- <button id="main-editor-italic" class="btn btn-outline-secondary btn-sm" title="{{$italic}}" onclick="inserteditortag('i', 'prvmail-text'); return false;">
- <i class="fa fa-italic jot-icons"></i>
- </button>
- <button id="main-editor-underline" class="btn btn-outline-secondary btn-sm" title="{{$underline}}" onclick="inserteditortag('u', 'prvmail-text'); return false;">
- <i class="fa fa-underline jot-icons"></i>
- </button>
- <button id="main-editor-quote" class="btn btn-outline-secondary btn-sm" title="{{$quote}}" onclick="inserteditortag('quote', 'prvmail-text'); return false;">
- <i class="fa fa-quote-left jot-icons"></i>
- </button>
- <button id="main-editor-code" class="btn btn-outline-secondary btn-sm" title="{{$code}}" onclick="inserteditortag('code', 'prvmail-text'); return false;">
- <i class="fa fa-terminal jot-icons"></i>
- </button>
- </div>
- <div class="btn-group d-none d-lg-flex mr-2">
- <button id="prvmail-attach-wrapper" class="btn btn-outline-secondary btn-sm" >
- <i id="prvmail-attach" class="fa fa-paperclip jot-icons" title="{{$attach}}"></i>
- </button>
- <button id="prvmail-link-wrapper" class="btn btn-outline-secondary btn-sm" onclick="prvmailJotGetLink(); return false;" >
- <i id="prvmail-link" class="fa fa-link jot-icons" title="{{$insert}}" ></i>
- </button>
- </div>
- {{if $feature_expire || $feature_encrypt}}
- <div class="btn-group d-none d-lg-flex">
- {{if $feature_expire}}
- <button id="prvmail-expire-wrapper" class="btn btn-outline-secondary btn-sm" onclick="prvmailGetExpiry();return false;" >
- <i id="prvmail-expires" class="fa fa-eraser jot-icons" title="{{$expires}}" ></i>
- </button>
- {{/if}}
- {{if $feature_encrypt}}
- <button id="prvmail-encrypt-wrapper" class="btn btn-outline-secondary btn-sm" onclick="red_encrypt('{{$cipher}}','#prvmail-text',$('#prvmail-text').val());return false;">
- <i id="prvmail-encrypt" class="fa fa-key jot-icons" title="{{$encrypt}}" ></i>
- </button>
- {{/if}}
- </div>
- {{/if}}
- <div class="btn-group d-lg-none">
- <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
- <i id="more-tools-icon" class="fa fa-cog jot-icons"></i>
- </button>
- <div class="dropdown-menu dropdown-menu-right" role="menu">
- <a class="dropdown-item" href="#" id="prvmail-attach-sub"><i class="fa fa-paperclip"></i>&nbsp;{{$attach}}</a>
- <a class="dropdown-item" href="#" onclick="prvmailJotGetLink(); return false;" ><i class="fa fa-link"></i>&nbsp;{{$insert}}</a>
- {{if $feature_expire || $feature_encrypt}}
- <div class="dropdown-divider"></div>
- <a class="dropdown-item" href="#" onclick="prvmailGetExpiry(); return false;"><i id="prvmail-expires" class="fa fa-eraser"></i>&nbsp;{{$expires}}</a>
- <a class="dropdown-item" href="#" onclick="red_encrypt('{{$cipher}}','#prvmail-text',$('#prvmail-text').val()); return false;"><i class="fa fa-key"></i>&nbsp;{{$encrypt}}</a>
- {{/if}}
- </div>
- </div>
- <div class="btn-group">
- <div id="prvmail-rotator" class="m-2 spinner-wrapper">
- <div class="spinner s"></div>
- </div>
- </div>
- </div>
- </div>
- <div id="mail-preview-content" style="display: none;"></div>
- </form>
- </div>
-{{if $new}}
- </div>
-</div>
-{{/if}}
diff --git a/view/tpl/rating_slider.tpl b/view/tpl/rating_slider.tpl
index 4c36504e6..667dafdd0 100644
--- a/view/tpl/rating_slider.tpl
+++ b/view/tpl/rating_slider.tpl
@@ -1,4 +1,4 @@
-<div id="rating-slider" class="slider form-group"><input id="rating-range" type="text" name="fake-rating" value="{{$val}}" /></div>
+<div id="rating-slider" class="slider mb-3"><input id="rating-range" type="text" name="fake-rating" value="{{$val}}" /></div>
<script>
$(document).ready(function() {
// The slider does not render correct if width is given in % and
diff --git a/view/tpl/regate.tpl b/view/tpl/regate.tpl
index 57ca2c1b3..e50738b19 100644
--- a/view/tpl/regate.tpl
+++ b/view/tpl/regate.tpl
@@ -19,7 +19,7 @@
<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
{{include file="field_input.tpl" field=[$acpin.0,$acpin.1,"","","",$atform]}}
- <div class="pull-right submit-wrapper">
+ <div class="float-end submit-wrapper">
<button type="submit" name="submit" class="btn btn-primary" {{$atform}}>{{$submit}}</button>
</div>
diff --git a/view/tpl/removeaccount.tpl b/view/tpl/removeaccount.tpl
index 6cd554082..3ea2ef070 100644
--- a/view/tpl/removeaccount.tpl
+++ b/view/tpl/removeaccount.tpl
@@ -8,7 +8,7 @@
<div class="section-content-tools-wrapper">
<form action="{{$basedir}}/removeaccount" autocomplete="off" method="post" >
<input type="hidden" name="verify" value="{{$hash}}" />
- <div class="form-group" id="remove-account-pass-wrapper">
+ <div class="mb-3" id="remove-account-pass-wrapper">
<label id="remove-account-pass-label" for="remove-account-pass">{{$passwd}}</label>
<input class="form-control" type="password" id="remove-account-pass" autocomplete="off" name="qxz_password" value=" " />
</div>
diff --git a/view/tpl/removeme.tpl b/view/tpl/removeme.tpl
index 814701fff..382808b4d 100644
--- a/view/tpl/removeme.tpl
+++ b/view/tpl/removeme.tpl
@@ -8,7 +8,7 @@
<div class="section-content-tools-wrapper">
<form action="{{$basedir}}/removeme" autocomplete="off" method="post" >
<input type="hidden" name="verify" value="{{$hash}}" />
- <div class="form-group" id="remove-account-pass-wrapper">
+ <div class="mb-3" id="remove-account-pass-wrapper">
<label id="remove-account-pass-label" for="remove-account-pass">{{$passwd}}</label>
<input class="form-control" type="password" id="remove-account-pass" autocomplete="off" name="qxz_password" value=" " />
</div>
diff --git a/view/tpl/rmagic.tpl b/view/tpl/rmagic.tpl
index 9d84e4a36..bc181c323 100644
--- a/view/tpl/rmagic.tpl
+++ b/view/tpl/rmagic.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper-styled">
<h3>{{$title}}</h3>
<form action="rmagic" method="post" >
- <div class="form-group">
+ <div class="mb-3">
{{include file="field_input.tpl" field=$address}}
<input class="btn btn-primary" type="submit" name="submit" id="rmagic-submit-button" value="{{$submit}}" />
</div>
diff --git a/view/tpl/search_item.tpl b/view/tpl/search_item.tpl
index f94aaf37d..7b63d83b8 100644
--- a/view/tpl/search_item.tpl
+++ b/view/tpl/search_item.tpl
@@ -23,12 +23,18 @@
<div class="p-2 clearfix wall-item-head{{if !$item.title && !$item.event && !$item.photo}} rounded-top{{/if}}{{if $item.is_new && !$item.event && !$item.is_comment}} wall-item-head-new{{/if}}" >
<div class="wall-item-info" id="wall-item-info-{{$item.id}}" >
<div class="wall-item-photo-wrapper{{if $item.owner_url}} wwfrom{{/if}}" id="wall-item-photo-wrapper-{{$item.id}}">
- <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-toggle="dropdown" loading="lazy" />
+ {{if $item.contact_id}}
+ <div class="spinner-wrapper contact-edit-rotator contact-edit-rotator-{{$item.contact_id}}"><div class="spinner s"></div></div>
+ {{/if}}
+ <img src="{{$item.thumb}}" class="fakelink wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" data-bs-toggle="dropdown" loading="lazy" />
+ {{if $item.author_is_group_actor}}
+ <i class="fa fa-comments-o wall-item-photo-group-actor" title="{{$item.author_is_group_actor}}"></i>
+ {{/if}}
{{if $item.thread_author_menu}}
- <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-toggle="dropdown"></i>
+ <i class="fa fa-caret-down wall-item-photo-caret cursor-pointer" data-bs-toggle="dropdown"></i>
<div class="dropdown-menu">
{{foreach $item.thread_author_menu as $mitem}}
- <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} >{{$mitem.title}}</a>
+ <a class="dropdown-item{{if $mitem.class}} {{$mitem.class}}{{/if}}" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}}{{if $mitem.data}} {{$mitem.data}}{{/if}}>{{$mitem.title}}</a>
{{/foreach}}
</div>
{{/if}}
@@ -36,7 +42,7 @@
</div>
{{if $item.lock}}
<div class="wall-item-lock dropdown">
- <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else}}fa-lock{{/if}} lockview" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i><ul id="panel-{{$item.id}}" class="lockview-panel dropdown-menu"></ul>&nbsp;
+ <i class="fa {{if $item.locktype == 2}}fa-envelope-o{{else if $item.locktype == 1}}fa-lock{{else}}fa-unlock{{/if}} lockview{{if $item.privacy_warning}} text-danger{{/if}}" data-bs-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
</div>
{{/if}}
<div class="wall-item-author">
@@ -65,30 +71,32 @@
</div>
{{/if}}
<div class="p-2 clearfix wall-item-tools">
- <div class="float-right wall-item-tools-right">
+ <div class="float-end wall-item-tools-right">
<div class="btn-group">
<div id="like-rotator-{{$item.id}}" class="spinner-wrapper">
<div class="spinner s"></div>
</div>
</div>
+ {{if $item.star || $item.thread_action_menu || $item.drop.dropping}}
<div class="btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown">
<i class="fa fa-cog"></i>
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{if $item.star}}
<a class="dropdown-item" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="fa fa-fw{{if $item.star.isstarred}} starred fa-star{{else}} unstarred fa-star-o{{/if}} generic-icons-nav" title="{{$item.star.toggle}}"></i>{{$item.star.toggle}}</a>
{{/if}}
{{if $item.thread_action_menu}}
{{foreach $item.thread_action_menu as $mitem}}
- <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} ><i class="fa fa-fw fa-{{$mitem.icon}} generic-icons-nav"></i>{{$mitem.title}}</a></li>
+ <a class="dropdown-item" {{if $mitem.href}}href="{{$mitem.href}}"{{/if}} {{if $mitem.action}}onclick="{{$mitem.action}}"{{/if}} {{if $mitem.title}}title="{{$mitem.title}}"{{/if}} ><i class="fa fa-fw fa-{{$mitem.icon}} generic-icons-nav"></i>{{$mitem.title}}</a>
{{/foreach}}
{{/if}}
{{if $item.drop.dropping}}
- <a class="dropdown-item" href="item/drop/{{$item.id}}" onclick="return confirmDelete();" title="{{$item.drop.delete}}" ><i class="fa fa-fw fa-trash-o generic-icons-nav"></i>{{$item.drop.delete}}</a></li>
+ <a class="dropdown-item" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}', '{{$item.mid}}'); return false;" title="{{$item.drop.delete}}" ><i class="generic-icons-nav fa fa-fw fa-trash-o"></i>{{$item.drop.delete}}</a>
{{/if}}
</div>
</div>
+ {{/if}}
</div>
{{if $item.star && $item.star.isstarred}}
<div class="btn-group" id="star-button-{{$item.id}}">
@@ -97,7 +105,7 @@
{{/if}}
{{if $item.attachments}}
<div class="wall-item-tools-left btn-group">
- <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
+ <button type="button" class="btn btn-outline-secondary btn-sm wall-item-like dropdown-toggle" data-bs-toggle="dropdown" id="attachment-menu-{{$item.id}}"><i class="fa fa-paperclip"></i></button>
<div class="dropdown-menu">{{$item.attachments}}</div>
</div>
{{/if}}
diff --git a/view/tpl/searchbox.tpl b/view/tpl/searchbox.tpl
index 0ff526847..c6bbcee82 100644
--- a/view/tpl/searchbox.tpl
+++ b/view/tpl/searchbox.tpl
@@ -2,11 +2,9 @@
<input type="hidden" name="f" value="" />
<div id="{{$id}}" class="input-group">
<input class="form-control" type="text" name="search" id="search-text" value="{{$s}}" onclick="this.submit();" />
- <div class="input-group-append">
- <button type="submit" name="submit" class="btn btn-sm btn-outline-secondary" id="search-submit" value="{{$search_label}}"><i class="fa fa-search"></i></button>
- {{if $savedsearch}}
- <button type="submit" name="searchsave" class="btn btn-sm btn-outline-secondary" id="search-save" value="{{$save_label}}"><i class="fa fa-floppy-o"></i></button>
- {{/if}}
- </div>
+ <button type="submit" name="submit" class="btn btn-outline-secondary" id="search-submit" value="{{$search_label}}"><i class="fa fa-search"></i></button>
+ {{if $savedsearch}}
+ <button type="submit" name="searchsave" class="btn btn-outline-secondary" id="search-save" value="{{$save_label}}"><i class="fa fa-floppy-o"></i></button>
+ {{/if}}
</div>
</form>
diff --git a/view/tpl/settings.tpl b/view/tpl/settings.tpl
index c0808272d..2c617834a 100644
--- a/view/tpl/settings.tpl
+++ b/view/tpl/settings.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <a title="{{$removechannel}}" class="btn btn-danger btn-sm pull-right" href="removeme"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>
+ <a title="{{$removechannel}}" class="btn btn-danger btn-sm float-end" href="removeme"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>
<h2>{{$ptitle}}</h2>
<div class="clear"></div>
</div>
@@ -11,82 +11,27 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="basic-settings">
<h3>
- <a data-toggle="collapse" data-target="#basic-settings-collapse" href="#">
+ <a data-bs-toggle="collapse" data-bs-target="#basic-settings-collapse" href="#">
{{$h_basic}}
</a>
</h3>
</div>
- <div id="basic-settings-collapse" class="collapse show" role="tabpanel" aria-labelledby="basic-settings" data-parent="#settings">
+ <div id="basic-settings-collapse" class="collapse show" role="tabpanel" aria-labelledby="basic-settings" data-bs-parent="#settings">
<div class="section-content-tools-wrapper">
- {{include file="field_input.tpl" field=$username}}
+ {{include file="field_select.tpl" field=$role}}
{{include file="field_select_grouped.tpl" field=$timezone}}
{{include file="field_input.tpl" field=$defloc}}
{{include file="field_checkbox.tpl" field=$allowloc}}
{{include file="field_checkbox.tpl" field=$adult}}
{{include file="field_input.tpl" field=$photo_path}}
{{include file="field_input.tpl" field=$attach_path}}
- {{if $basic_addon}}
- {{$basic_addon}}
- {{/if}}
- <div class="settings-submit-wrapper" >
- <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
- </div>
- </div>
- </div>
- </div>
- <div class="panel">
- <div class="section-subtitle-wrapper" role="tab" id="privacy-settings">
- <h3>
- <a data-toggle="collapse" data-target="#privacy-settings-collapse" href="#">
- {{$h_prv}}
- </a>
- </h3>
- </div>
- <div id="privacy-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="privacy-settings" data-parent="#settings">
- <div class="section-content-tools-wrapper">
- {{include file="field_select_grouped.tpl" field=$role}}
- {{$autoperms}}
- <div id="advanced-perm" style="display:{{if $permissions_set}}none{{else}}block{{/if}};">
- <div class="form-group">
- <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#apsModal">{{$lbl_p2macro}}</button>
- </div>
- <div class="modal" id="apsModal">
- <div class="modal-dialog">
- <div class="modal-content">
- <div class="modal-header">
- <h4 class="modal-title">{{$lbl_p2macro}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
- </div>
- <div class="modal-body">
- {{foreach $permiss_arr as $permit}}
- {{include file="field_select.tpl" field=$permit}}
- {{/foreach}}
- </div>
- <div class="modal-footer">
- <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
- </div>
- </div><!-- /.modal-content -->
- </div><!-- /.modal-dialog -->
- </div><!-- /.modal -->
+ {{include file="field_input.tpl" field=$expire}}
- <div id="settings-default-perms" class="form-group" >
- <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#aclModal"><i id="jot-perms-icon" class="fa"></i>&nbsp;{{$permissions}}</button>
- </div>
- {{$group_select}}
- {{include file="field_checkbox.tpl" field=$hide_presence}}
- {{$profile_in_dir}}
- </div>
- <div class="settings-common-perms">
- {{$suggestme}}
- {{include file="field_checkbox.tpl" field=$blocktags}}
- {{include file="field_input.tpl" field=$expire}}
- </div>
- {{if $permcat_enable}}
- {{include file="field_select.tpl" field=$defpermcat}}
- {{/if}}
+ {{include file="field_textarea.tpl" field=$message_filter_excl}}
+ {{include file="field_textarea.tpl" field=$message_filter_incl}}
- {{if $sec_addon}}
- {{$sec_addon}}
+ {{if $basic_addon}}
+ {{$basic_addon}}
{{/if}}
<div class="settings-submit-wrapper" >
<button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
@@ -97,16 +42,21 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="notification-settings">
<h3>
- <a data-toggle="collapse" data-target="#notification-settings-collapse" href="#">
+ <a data-bs-toggle="collapse" data-bs-target="#notification-settings-collapse" href="#">
{{$h_not}}
</a>
</h3>
</div>
- <div id="notification-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="notification-settings" data-parent="#settings">
+ <div id="notification-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="notification-settings" data-bs-parent="#settings">
<div class="section-content-tools-wrapper">
<div id="settings-notifications">
- {{include file="field_input.tpl" field=$mailhost}}
+ <div id="desktop-notifications-info" class="section-content-warning-wrapper" style="display: none;">
+ {{$desktop_notifications_info}}<br>
+ <a id="desktop-notifications-request" href="#">{{$desktop_notifications_request}}</a>
+ </div>
+
+ {{include file="field_input.tpl" field=$mailhost}}
<h3>{{$activity_options}}</h3>
<div class="group">
@@ -149,6 +99,7 @@
{{include file="field_intcheckbox.tpl" field=$vnotify14}}
{{include file="field_intcheckbox.tpl" field=$vnotify15}}
{{include file="field_intcheckbox.tpl" field=$always_show_in_notices}}
+ {{include file="field_intcheckbox.tpl" field=$update_notices_per_parent}}
{{include file="field_input.tpl" field=$evdays}}
</div>
</div>
diff --git a/view/tpl/settings_account.tpl b/view/tpl/settings_account.tpl
index 3eacf3f7a..c81f1abbb 100644
--- a/view/tpl/settings_account.tpl
+++ b/view/tpl/settings_account.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <a title="{{$removeaccount}}" class="btn btn-danger btn-sm pull-right" href="removeaccount"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>
+ <a title="{{$removeaccount}}" class="btn btn-danger btn-sm float-end" href="removeaccount"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>
<h2>{{$title}}</h2>
<div class="clear"></div>
</div>
diff --git a/view/tpl/settings_display.tpl b/view/tpl/settings_display.tpl
index c2dd94175..70b9bac80 100644
--- a/view/tpl/settings_display.tpl
+++ b/view/tpl/settings_display.tpl
@@ -10,12 +10,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="theme-settings-title">
<h3>
- <a data-toggle="collapse" data-target="#theme-settings-content" href="#" aria-expanded="true" aria-controls="theme-settings-content">
+ <a data-bs-toggle="collapse" data-bs-target="#theme-settings-content" href="#" aria-expanded="true" aria-controls="theme-settings-content">
{{$d_tset}}
</a>
</h3>
</div>
- <div id="theme-settings-content" class="collapse show" role="tabpanel" aria-labelledby="theme-settings" data-parent="#settings" >
+ <div id="theme-settings-content" class="collapse show" role="tabpanel" aria-labelledby="theme-settings" data-bs-parent="#settings" >
<div class="section-content-tools-wrapper">
{{if $theme}}
{{include file="field_themeselect.tpl" field=$theme}}
@@ -33,12 +33,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="custom-settings-title">
<h3>
- <a data-toggle="collapse" data-target="#custom-settings-content" href="" aria-expanded="true" aria-controls="custom-settings-content">
+ <a data-bs-toggle="collapse" data-bs-target="#custom-settings-content" href="" aria-expanded="true" aria-controls="custom-settings-content">
{{$d_ctset}}
</a>
</h3>
</div>
- <div id="custom-settings-content" class="collapse{{if !$theme}} in{{/if}}" role="tabpanel" aria-labelledby="custom-settings" data-parent="#settings" >
+ <div id="custom-settings-content" class="collapse{{if !$theme}} in{{/if}}" role="tabpanel" aria-labelledby="custom-settings" data-bs-parent="#settings" >
<div class="section-content-tools-wrapper">
{{if $theme_config}}
{{$theme_config}}
@@ -49,17 +49,16 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="content-settings-title">
<h3>
- <a data-toggle="collapse" data-target="#content-settings-content" href="" aria-expanded="true" aria-controls="content-settings-content">
+ <a data-bs-toggle="collapse" data-bs-target="#content-settings-content" href="" aria-expanded="true" aria-controls="content-settings-content">
{{$d_cset}}
</a>
</h3>
</div>
- <div id="content-settings-content" class="collapse{{if !$theme && !$theme_config}} in{{/if}}" role="tabpanel" aria-labelledby="content-settings" data-parent="#settings">
+ <div id="content-settings-content" class="collapse{{if !$theme && !$theme_config}} in{{/if}}" role="tabpanel" aria-labelledby="content-settings" data-bs-parent="#settings">
<div class="section-content-wrapper">
{{include file="field_input.tpl" field=$ajaxint}}
{{include file="field_input.tpl" field=$itemspage}}
{{include file="field_checkbox.tpl" field=$nosmile}}
- {{include file="field_checkbox.tpl" field=$channel_menu}}
{{include file="field_checkbox.tpl" field=$title_tosource}}
{{include file="field_checkbox.tpl" field=$user_scalable}}
{{include file="field_checkbox.tpl" field=$preload_images}}
diff --git a/view/tpl/settings_features.tpl b/view/tpl/settings_features.tpl
index 12c4f44f3..4467ed3da 100644
--- a/view/tpl/settings_features.tpl
+++ b/view/tpl/settings_features.tpl
@@ -10,12 +10,12 @@
<div class="panel">
<div class="section-subtitle-wrapper" role="tab" id="{{$g}}-settings-title">
<h3>
- <a data-toggle="collapse" data-target="#{{$g}}-settings-content" href="#" aria-expanded="true" aria-controls="{{$g}}-settings-collapse">
+ <a data-bs-toggle="collapse" data-bs-target="#{{$g}}-settings-content" href="#" aria-expanded="true" aria-controls="{{$g}}-settings-collapse">
{{$f.0}}
</a>
</h3>
</div>
- <div id="{{$g}}-settings-content" class="collapse{{if $g == 'general'}} show{{/if}}" role="tabpanel" aria-labelledby="{{$g}}-settings-title" data-parent="#settings">
+ <div id="{{$g}}-settings-content" class="collapse{{if $g == 'general'}} show{{/if}}" role="tabpanel" aria-labelledby="{{$g}}-settings-title" data-bs-parent="#settings">
<div class="section-content-tools-wrapper">
{{foreach $f.1 as $fcat}}
{{include file="field_checkbox.tpl" field=$fcat}}
diff --git a/view/tpl/settings_privacy.tpl b/view/tpl/settings_privacy.tpl
new file mode 100644
index 000000000..aff9619c3
--- /dev/null
+++ b/view/tpl/settings_privacy.tpl
@@ -0,0 +1,56 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$ptitle}}</h2>
+ </div>
+ {{$nickname_block}}
+ <form action="settings/privacy" id="settings-form" method="post" autocomplete="off">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}' />
+
+ <div class="section-content-tools-wrapper">
+
+ {{include file="field_checkbox.tpl" field=$autoperms}}
+ {{include file="field_checkbox.tpl" field=$index_opt_out}}
+
+ {{if $sec_addon}}
+ {{$sec_addon}}
+ {{/if}}
+ {{if $permission_limits}}
+ <div id="permission-limits">
+ <div class="modal" id="apsModal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <div class="modal-title h3">{{$permission_limits_label}}</div>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+ </div>
+ <div class="modal-body">
+ <div class="multi-collapse collapse show">
+ <h2 class="text-danger mb-3"><i class="fa fa-warning"></i> {{$permission_limits_warning.0}}</h2>
+ <h3 class="mb-3">{{$permission_limits_warning.1}}</h3>
+ <button type="button" class="btn btn-primary" data-bs-toggle="collapse" data-bs-target=".multi-collapse" aria-expanded="false" aria-controls="collapseExample">{{$permission_limits_warning.2}}</button>
+ </div>
+ <div class="multi-collapse collapse">
+ {{foreach $permiss_arr as $permit}}
+ {{include file="field_select.tpl" field=$permit}}
+ {{/foreach}}
+ {{include file="field_checkbox.tpl" field=$group_actor}}
+ </div>
+
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">Close</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+ </div>
+ <div class="float-end">
+ <button type="button" class="btn btn-outline-secondary" data-bs-toggle="modal" data-bs-target="#apsModal">{{$permission_limits_label}}</button>
+ </div>
+ {{/if}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </form>
+</div>
diff --git a/view/tpl/sharedwithme.tpl b/view/tpl/sharedwithme.tpl
index 8474ccd52..653077196 100644
--- a/view/tpl/sharedwithme.tpl
+++ b/view/tpl/sharedwithme.tpl
@@ -1,6 +1,6 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <a href="/sharedwithme/dropall" onclick="return confirmDelete();" class="btn btn-sm btn-outline-secondary pull-right"><i class="fa fa-trash-o"></i>&nbsp;{{$dropall}}</a>
+ <a href="/sharedwithme/dropall" onclick="return confirmDelete();" class="btn btn-sm btn-outline-secondary float-end"><i class="fa fa-trash-o"></i>&nbsp;{{$dropall}}</a>
<h2>{{$header}}</h2>
</div>
<div class="section-content-wrapper-np">
diff --git a/view/tpl/suggest_widget.tpl b/view/tpl/suggest_widget.tpl
index 7b9afa668..d4a5a56f9 100644
--- a/view/tpl/suggest_widget.tpl
+++ b/view/tpl/suggest_widget.tpl
@@ -6,5 +6,5 @@
{{/foreach}}
{{/if}}
<div class="clear"></div>
-<div class="suggest-widget-more"><a href="suggest">{{$more}}</a></div>
+<div class="suggest-widget-more"><a href="directory?f=&suggest=1">{{$more}}</a></div>
</div>
diff --git a/view/tpl/thing_edit.tpl b/view/tpl/thing_edit.tpl
index 62a7c02c8..63b48f6fc 100644
--- a/view/tpl/thing_edit.tpl
+++ b/view/tpl/thing_edit.tpl
@@ -30,7 +30,7 @@
<div class="thing-end"></div>
{{if $lockstate}}
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
diff --git a/view/tpl/thing_input.tpl b/view/tpl/thing_input.tpl
index 90fb093e4..d1495aba0 100644
--- a/view/tpl/thing_input.tpl
+++ b/view/tpl/thing_input.tpl
@@ -30,7 +30,7 @@
<div class="thing-end"></div>
{{if $lockstate}}
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
</button>
{{/if}}
diff --git a/view/tpl/tokens.tpl b/view/tpl/tokens.tpl
index 587965832..3b267ddcc 100644
--- a/view/tpl/tokens.tpl
+++ b/view/tpl/tokens.tpl
@@ -14,59 +14,13 @@
{{include file="field_input.tpl" field=$name}}
{{include file="field_input.tpl" field=$token}}
{{include file="field_input.tpl" field=$expires}}
- <div class="settings-submit-wrapper form-group">
- <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
- </div>
- </div>
-
- <div class="panel" id="permission-settings">
- <div class="section-subtitle-wrapper" role="tab" id="perms-tool">
- <h3>
- <a data-toggle="collapse" data-parent="#permission-settings" href="#perms-tool-collapse" aria-expanded="true" aria-controls="perms-tool-collapse">
- {{$permlbl}}
- </a>
- </h3>
- </div>
- <div id="perms-tool-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="perms-tool">
- <div class="section-content-tools-wrapper">
- <div class="section-content-warning-wrapper">
- {{$permnote}}
- </div>
-
- <table id="perms-tool-table" class=form-group>
- <tr>
- <td></td><td colspan="2" class="abook-me">{{$me}}</td>
- </tr>
- {{foreach $perms as $prm}}
- {{include file="field_acheckbox.tpl" field=$prm}}
- {{/foreach}}
- </table>
+ {{include file="field_select.tpl" field=$permcat}}
- <div class="settings-submit-wrapper" >
- <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
- </div>
+ <div class="clearfix">
+ {{if $atoken}}
+ <button type="submit" name="delete" class="btn btn-outline-danger">{{$delete}}</button>
+ {{/if}}
+ <button type="submit" name="submit" class="btn btn-primary float-end">{{$submit}}</button>
</div>
- </div>
- </div>
- </form>
-
- <div class="descriptive-text">{{$desc2}}</div>
- <ul>
- <li>{{$url1}}<span class="zat-example">?f=&zat=<span class="token-mirror"></span></span></li>
- <li>{{$url2}}<span class="zat-example">?f=&zat=<span class="token-mirror"></span></span></li>
- </ul>
-
- {{if $tokens}}
- <div class="section-content-wrapper-np">
- <table id="atoken-index">
- {{foreach $tokens as $t}}
- <tr id="atoken-index-{{$t.atoken_id}}" class="atoken-index-row">
- <td width="99%"><a href="tokens/{{$t.atoken_id}}">{{$t.atoken_name}}</a></td>
- <td width="1%" class="atoken-index-tool"><i class="fa fa-trash-o drop-icons" onClick="dropItem('tokens/{{$t.atoken_id}}/drop', '#atoken-index-{{$t.atoken_id}}')"></i></td>
- </tr>
- {{/foreach}}
- </table>
-
</div>
- {{/if}}
</div>
diff --git a/view/tpl/uexport.tpl b/view/tpl/uexport.tpl
index 7eafd97a6..2b7967970 100644
--- a/view/tpl/uexport.tpl
+++ b/view/tpl/uexport.tpl
@@ -3,17 +3,54 @@
<h2>{{$title}}</h2>
</div>
<div class="section-content-wrapper">
- <b><a href="uexport/basic">{{$basictitle}}</a></b></p>
- <p>{{$basic}}</p>
-
- <p><b><a href="uexport/complete">{{$fulltitle}}</a></b></p>
- <p>{{$full}}</p>
-
- <p>{{$extra}}</p>
- <p>{{$extra2}}</p>
- <p>{{$extra3}}</p>
-
- <p>{{$extra4}}</p>
-
+ <p class="mb-3">
+ <h3>{{$channel_title}}</h3>
+ <p>
+ {{$channel_info}}
+ </p>
+ <a href="uexport/channel" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$channel_title}}</a>
+ </p>
+ <p class="mb-3">
+ <h3>{{$content_title}}</h3>
+ <p>
+ {{$content_info}}
+ {{$items_extra_info}}
+ </p>
+ {{foreach $years as $year}}
+ <a href="uexport/{{$year}}" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$year}}</a>
+ {{/foreach}}
+ </p>
+ <p class="mb-3">
+ <h3>{{$wikis_title}}</h3>
+ <p>
+ {{$wikis_info}}
+ {{$items_extra_info}}
+ </p>
+ <a href="uexport/wikis" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$wikis_title}}</a>
+ </p>
+ <p class="mb-3">
+ <h3>{{$webpages_title}}</h3>
+ <p>
+ {{$webpages_info}}
+ {{$items_extra_info}}
+ </p>
+ <a href="uexport/webpages" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$webpages_title}}</a>
+ </p>
+ <p class="mb-3">
+ <h3>{{$events_title}}</h3>
+ <p>
+ {{$events_info}}
+ {{$items_extra_info}}
+ </p>
+ <a href="uexport/events" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$events_title}}</a>
+ </p>
+ <p class="mb-3">
+ <h3>{{$chatrooms_title}}</h3>
+ <p>
+ {{$chatrooms_info}}
+ {{$items_extra_info}}
+ </p>
+ <a href="uexport/chatrooms" class="btn btn-outline-primary"><i class="fa fa-download"></i> {{$chatrooms_title}}</a>
+ </p>
</div>
</div>
diff --git a/view/tpl/usermenu.tpl b/view/tpl/usermenu.tpl
index 535d5b5a8..5a316e806 100644
--- a/view/tpl/usermenu.tpl
+++ b/view/tpl/usermenu.tpl
@@ -8,7 +8,7 @@
<ul class="pmenu-body{{if $wrap || !$class}} nav nav-pills flex-column{{elseif !$wrap || $class}} {{$class}}{{/if}}">
{{foreach $items as $mitem }}
<li id="pmenu-item-{{$mitem.mitem_id}}" class="nav-item pmenu-item{{if $mitem.submenu}} dropdown{{/if}}">
- <a href="{{if $mitem.submenu}}#{{else}}{{$mitem.mitem_link}}{{/if}}" class="nav-link {{if $mitem.submenu}} dropdown-toggle{{/if}}"{{if $mitem.submenu}} data-toggle="dropdown"{{/if}}{{if $mitem.newwin}}target="_blank"{{/if}} rel="nofollow noopener">{{$mitem.mitem_desc}}{{if $mitem.submenu}}<span class="caret"></span>{{/if}}</a>
+ <a href="{{if $mitem.submenu}}#{{else}}{{$mitem.mitem_link}}{{/if}}" class="nav-link {{if $mitem.submenu}} dropdown-toggle{{/if}}"{{if $mitem.submenu}} data-bs-toggle="dropdown"{{/if}}{{if $mitem.newwin}}target="_blank"{{/if}} rel="nofollow noopener">{{$mitem.mitem_desc}}{{if $mitem.submenu}}<span class="caret"></span>{{/if}}</a>
{{if $mitem.submenu}}{{$mitem.submenu}}{{/if}}
</li>
{{/foreach }}
diff --git a/view/tpl/viewcontact_template.tpl b/view/tpl/viewcontact_template.tpl
index cbbf3a97c..317cb20ce 100644
--- a/view/tpl/viewcontact_template.tpl
+++ b/view/tpl/viewcontact_template.tpl
@@ -7,7 +7,7 @@
{{include file="contact_template.tpl"}}
{{/foreach}}
{{** make sure this element is at the bottom - we rely on that in endless scroll **}}
- <div id="page-end" class="float-left w-100"></div>
+ <div id="page-end" class="float-start w-100"></div>
</div>
</div>
<script>$(document).ready(function() { loadingPage = false;});</script>
diff --git a/view/tpl/webpage_export_list.tpl b/view/tpl/webpage_export_list.tpl
index b22b3818a..6360500d8 100644
--- a/view/tpl/webpage_export_list.tpl
+++ b/view/tpl/webpage_export_list.tpl
@@ -2,14 +2,14 @@
<form action="" method="post" autocomplete="on" >
<input type="hidden" name="action" value="{{$action}}">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<button class="btn btn-md btn-success" type="submit" name="submit" value="{{$exportbtn}}">{{$exportbtn}}</button>
</div>
<h2>{{$title}}</h2>
<div class="clear"></div>
</div>
<div id="import-website-content-wrapper" class="section-content-wrapper">
- <div class="pull-left">
+ <div class="float-start">
<button id="toggle-select-all" class="btn btn-sm btn-primary" onclick="checkedAll(window.isChecked); return false;"><i class="fa fa-check"></i>&nbsp;Toggle Select All</button>
</div>
<div class="clear"></div>
diff --git a/view/tpl/webpage_import.tpl b/view/tpl/webpage_import.tpl
index 955288c1e..5af42ea04 100644
--- a/view/tpl/webpage_import.tpl
+++ b/view/tpl/webpage_import.tpl
@@ -2,14 +2,14 @@
<form action="" method="post" autocomplete="on" >
<input type="hidden" name="action" value="importselected">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<button class="btn btn-md btn-success" type="submit" name="submit" value="{{$importbtn}}">{{$importbtn}}</button>
</div>
<h2>{{$title}}</h2>
<div class="clear"></div>
</div>
<div id="import-website-content-wrapper" class="section-content-wrapper">
- <div class="pull-left">
+ <div class="float-start">
<button id="toggle-select-all" class="btn btn-sm btn-primary" onclick="checkedAll(window.isChecked); return false;"><i class="fa fa-check"></i>&nbsp;Toggle Select All</button>
</div>
<div class="clear"></div>
diff --git a/view/tpl/webpagelist.tpl b/view/tpl/webpagelist.tpl
index 1c909b9b8..995a73930 100644
--- a/view/tpl/webpagelist.tpl
+++ b/view/tpl/webpagelist.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
{{if $editor}}
- <div class="pull-right">
+ <div class="float-end">
<button id="webpage-create-btn" class="btn btn-sm btn-success acl-form-trigger" onclick="openClose('webpage-editor');" data-form_id="profile-jot-form"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
</div>
{{/if}}
@@ -41,7 +41,7 @@
</td>
<td class="webpage-list-tool dropdown">
{{if $item.lockstate=='lock'}}
- <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('item',{{$item.url}});" ></i>
+ <i class="fa fa-lock lockview" data-bs-toggle="dropdown" onclick="lockview('item',{{$item.url}});" ></i>
<ul id="panel-{{$item.url}}" class="lockview-panel dropdown-menu"></ul>
{{/if}}
</td>
diff --git a/view/tpl/website_portation_tools.tpl b/view/tpl/website_portation_tools.tpl
index 0d131cb17..f27d67ca2 100644
--- a/view/tpl/website_portation_tools.tpl
+++ b/view/tpl/website_portation_tools.tpl
@@ -6,18 +6,18 @@
<form enctype="multipart/form-data" method="post" action="">
<input type="hidden" name="action" value="scan">
<p class="descriptive-text">{{$file_import_text}}</p>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control" type="text" name="path" title="{{$hint}}" placeholder="{{$desc}}" />
</div>
- <div class="form-group">
+ <div class="mb-3">
<button class="btn btn-primary btn-sm" type="submit" name="cloudsubmit" value="{{$select}}">Submit</button>
</div>
<!-- Or upload a zipped file containing the website -->
<p class="descriptive-text">{{$file_upload_text}}</p>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control-file w-100" type="file" name="zip_file" />
</div>
- <div class="form-group">
+ <div class="mb-3">
<button class="btn btn-primary btn-sm" type="submit" name="w_upload" value="w_upload">Submit</button>
</div>
</form>
@@ -32,10 +32,10 @@
<input type="hidden" name="action" value="exportzipfile">
<!-- Or download a zipped file containing the website -->
<p class="descriptive-text">{{$file_download_text}}</p>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control" type="text" name="zipfilename" title="{{$filename_hint}}" placeholder="{{$filename_desc}}" value="" />
</div>
- <div class="form-group">
+ <div class="mb-3">
<button class="btn btn-primary btn-sm" type="submit" name="w_download" value="w_download">Submit</button>
</div>
</form>
@@ -47,10 +47,10 @@
<input type="hidden" name="action" value="exportcloud">
<!-- Or export the website elements to a cloud files folder -->
<p style="margin-top: 10px;" class="descriptive-text">{{$cloud_export_text}}</p>
- <div class="form-group">
+ <div class="mb-3">
<input class="form-control" type="text" name="exportcloudpath" title="{{$cloud_export_hint}}" placeholder="{{$cloud_export_desc}}" />
</div>
- <div class="form-group">
+ <div class="mb-3">
<button class="btn btn-primary btn-sm" type="submit" name="exportcloudsubmit" value="{{$cloud_export_select}}">Submit</button>
</div>
</form>
diff --git a/view/tpl/widget_menu.tpl b/view/tpl/widget_menu.tpl
new file mode 100644
index 000000000..86799ff00
--- /dev/null
+++ b/view/tpl/widget_menu.tpl
@@ -0,0 +1,10 @@
+<div class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $menu_items as $menu_item}}
+ <li class="nav-item">
+ <a class="nav-link{{if $menu_item.active}} active{{/if}}" href="{{$menu_item.href}}" title="{{$menu_item.title}}">{{$menu_item.label}}</a>
+ <li>
+ {{/foreach}}
+ </ul>
+</div>
diff --git a/view/tpl/widget_menu_count.tpl b/view/tpl/widget_menu_count.tpl
new file mode 100644
index 000000000..5e8189b5f
--- /dev/null
+++ b/view/tpl/widget_menu_count.tpl
@@ -0,0 +1,13 @@
+<div class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $menu_items as $menu_item}}
+ <li class="nav-item">
+ <a class="nav-link {{if $menu_item.active}} active{{/if}}" href="{{$menu_item.href}}" title="{{$menu_item.title}}">
+ {{$menu_item.label}}
+ <span class="badge {{if $menu_item.active}} bg-light text-dark{{else}} bg-secondary{{/if}} float-end">{{$menu_item.count}}</span>
+ </a>
+ <li>
+ {{/foreach}}
+ </ul>
+</div>
diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl
index 8556d8bad..640678ae8 100644
--- a/view/tpl/wiki.tpl
+++ b/view/tpl/wiki.tpl
@@ -1,19 +1,19 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper">
- <div class="pull-right">
+ <div class="float-end">
<span class="text-muted wiki-typename">[{{$typename}}]&nbsp;</span>
{{if $showPageControls}}
<div id="page-tools" class="btn-group" style="display: none;">
- <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-bs-toggle="dropdown">
<i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
</button>
- <div class="dropdown-menu dropdown-menu-right">
+ <div class="dropdown-menu dropdown-menu-end">
{{if $renamePage}}
<a class="dropdown-item rename-page" href="#"><i class="fa fa-fw fa-edit"></i>&nbsp;{{$renamePage}}</a>
{{/if}}
<a id="embed-image" class="dropdown-item" href="#"><i class="fa fa-fw fa-picture-o"></i>&nbsp;Embed Image</a>
</div>
- </div>
+ </div>
{{/if}}
<button type="button" class="btn btn-outline-secondary btn-sm" title="{{$sharePage}}" onclick="window.location.href='rpost?f=&body={{$shareLink}}';"><i class="fa fa-fw fa-share"></i></button>
<button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(); adjustFullscreenEditorHeight();"><i class="fa fa-expand"></i></button>
@@ -28,8 +28,8 @@
<div id="rename-page-form-wrapper" class="section-content-tools-wrapper" style="display:none;">
<form id="rename-page-form" action="wiki/rename/page" method="post" >
{{include file="field_input.tpl" field=$pageRename}}
- <div class="form-group">
- <div class="pull-right">
+ <div class="mb-3">
+ <div class="float-end">
<button id="rename-page-submit" class="btn btn-primary" type="submit" name="submit">Submit</button>
</div>
<div>
@@ -41,9 +41,9 @@
</div>
<div id="wiki-content-container" class="section-content-wrapper">
<ul class="nav nav-tabs" id="wiki-nav-tabs">
- <li class="nav-item" id="edit-pane-tab"><a class="nav-link" data-toggle="tab" href="#edit-pane">{{$editOrSourceLabel}}</a></li>
- <li class="nav-item"><a class="nav-link active" data-toggle="tab" href="#preview-pane" id="wiki-get-preview">{{$view_lbl}}</a></li>
- <li class="nav-item"><a class="nav-link" data-toggle="tab" href="#page-history-pane" id="wiki-get-history">{{$history_lbl}}</a></li>
+ <li class="nav-item" id="edit-pane-tab"><a class="nav-link" data-bs-toggle="tab" href="#edit-pane">{{$editOrSourceLabel}}</a></li>
+ <li class="nav-item"><a class="nav-link active" data-bs-toggle="tab" href="#preview-pane" id="wiki-get-preview">{{$view_lbl}}</a></li>
+ <li class="nav-item"><a class="nav-link" data-bs-toggle="tab" href="#page-history-pane" id="wiki-get-history">{{$history_lbl}}</a></li>
</ul>
<div class="tab-content" id="wiki-page-tabs">
<div id="edit-pane" class="tab-pane">
@@ -67,9 +67,7 @@
<div id="id_{{$commitMsg.0}}_wrapper" class="field input" style="display: none">
<div class="input-group">
<input class="form-control" name="{{$commitMsg.0}}" id="id_{{$commitMsg.0}}" type="text" value="{{$commitMsg.2}}"{{if $commitMsg.5}} {{$commitMsg.5}}{{/if}}>
- <div class="input-group-append">
- <button id="save-page" type="button" class="btn btn-sm btn-primary disabled">Save</button>
- </div>
+ <button id="save-page" type="button" class="btn btn-primary disabled">Save</button>
</div>
</div>
{{/if}}
@@ -84,7 +82,7 @@
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true"></button>
</div>
<div class="modal-body" id="embedPhotoModalBody" >
<div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
@@ -114,10 +112,10 @@
$( "#rename-page-form" ).submit(function( event ) {
$.post("wiki/{{$channel_address}}/rename/page",
{
- oldName: window.wiki_page_name,
- newName: $('#id_pageRename').val(),
+ oldName: window.wiki_page_name,
+ newName: $('#id_pageRename').val(),
resource_id: window.wiki_resource_id
- },
+ },
function (data) {
if (data.success) {
$('#rename-page-form-wrapper').hide();
@@ -128,7 +126,7 @@
} else {
window.console.log('Error renaming page.');
}
- }, 'json');
+ }, 'json');
event.preventDefault();
});
@@ -253,11 +251,11 @@
return false;
}
$.post("wiki/{{$channel_address}}/save/page", {
- content: currentContent,
+ content: currentContent,
commitMsg: $('#id_commitMsg').val(),
- name: window.wiki_page_name,
+ name: window.wiki_page_name,
resource_id: window.wiki_resource_id
- },
+ },
function (data) {
if (data.success) {
window.saved = true;
@@ -273,7 +271,7 @@
window.editor.focus(); // Return focus to the editor for continued editing
// $('#wiki-get-history').click();
} else {
- alert('Error saving page.'); // TODO: Replace alerts with auto-timeout popups
+ alert('Error saving page.'); // TODO: Replace alerts with auto-timeout popups
window.console.log('Error saving page.');
}
}, 'json');
@@ -309,11 +307,11 @@
return false;
}
$.post("wiki/{{$channel_address}}/compare/page", {
- compareCommit: compareCommit,
- currentCommit: window.wiki_page_commit,
- name: window.wiki_page_name,
+ compareCommit: compareCommit,
+ currentCommit: window.wiki_page_commit,
+ name: window.wiki_page_name,
resource_id: window.wiki_resource_id
- },
+ },
function (data) {
console.log(data);
if (data.success) {
@@ -325,7 +323,7 @@
wiki_revert_page(compareCommit);
$('#generic-modal-{{$wikiModalID}}').modal('hide');
});
- $('#generic-modal-{{$wikiModalID}}').modal();
+ $('#generic-modal-{{$wikiModalID}}').modal('show');
} else {
window.console.log('Error comparing page.');
}
@@ -366,7 +364,7 @@
});
getPhotoAlbumList();
$('#embedPhotoModalBodyAlbumDialog').off('click');
- $('#embedPhotoModal').modal();
+ $('#embedPhotoModal').modal('show');
};
var choosePhotoFromAlbum = function (album) {
diff --git a/view/tpl/wiki_page_list.tpl b/view/tpl/wiki_page_list.tpl
index e11f3b145..4f99587c2 100644
--- a/view/tpl/wiki_page_list.tpl
+++ b/view/tpl/wiki_page_list.tpl
@@ -27,7 +27,7 @@
<div id="wiki_page_options" style="display: none">
{{$mimetype}}
</div>
- <div class="float-right fakelink" onClick="openClose('wiki_page_options')">
+ <div class="float-end fakelink" onClick="openClose('wiki_page_options')">
{{$options}}
</div>
{{/if}}
diff --git a/view/tpl/wiki_page_not_found.tpl b/view/tpl/wiki_page_not_found.tpl
index bc8afeb53..8fdee4596 100644
--- a/view/tpl/wiki_page_not_found.tpl
+++ b/view/tpl/wiki_page_not_found.tpl
@@ -10,7 +10,7 @@
<div id="wiki_missing_page_options" style="display: none">
{{$mimetype}}
</div>
- <div class="float-right fakelink" onClick="openClose('wiki_missing_page_options')">
+ <div class="float-end fakelink" onClick="openClose('wiki_missing_page_options')">
{{$options}}
</div>
{{/if}}
diff --git a/view/tpl/wikilist.tpl b/view/tpl/wikilist.tpl
index 5f28d6b12..bc8461dac 100644
--- a/view/tpl/wikilist.tpl
+++ b/view/tpl/wikilist.tpl
@@ -1,7 +1,7 @@
<div class="generic-content-wrapper">
<div class="section-title-wrapper clearfix">
{{if $owner}}
- <button type="button" class="btn btn-success btn-sm pull-right acl-form-trigger" onclick="openClose('new-wiki-form-wrapper');" data-form_id="new-wiki-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$create}}</button>
+ <button type="button" class="btn btn-success btn-sm float-end acl-form-trigger" onclick="openClose('new-wiki-form-wrapper');" data-form_id="new-wiki-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$create}}</button>
{{/if}}
<h2>{{$header}}</h2>
</div>
@@ -13,8 +13,8 @@
{{include file="field_checkbox.tpl" field=$typelock}}
{{include file="field_checkbox.tpl" field=$notify}}
<div>
- <div class="btn-group pull-right">
- <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" title="Permission settings" onclick="return false;">
+ <div class="btn-group float-end">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" title="Permission settings" onclick="return false;">
<i id="jot-perms-icon" class="fa fa-{{$lockstate}} jot-icons"></i>
</button>
<button id="new-wiki-submit" class="btn btn-primary btn-sm" type="submit" name="submit" >{{$submit}}</button>
@@ -47,8 +47,8 @@
{{/if}}
<td class="dropdown">
{{if $wiki.lockstate == 'lock'}}
- <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('item',{{$wiki.id}});"></i>
- <ul id="panel-{{$wiki.id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
+ <i class="fa fa-lock lockview" data-bs-toggle="dropdown" onclick="lockview('item',{{$wiki.id}});"></i>
+ <ul id="panel-{{$wiki.id}}" class="lockview-panel dropdown-menu dropdown-menu-end"></ul>
{{/if}}
</td>
<td><i class="fa fa-download" onclick="wiki_download_wiki('{{$wiki.resource_id}}'); return false;"></i></td>
@@ -62,8 +62,8 @@
<form id="edit-wiki-form-{{$wiki.id}}" method="post" action="wiki/{{$channel}}/update/wiki" class="acl-form" data-form_id="edit-wiki-form-{{$wiki.id}}" data-allow_cid='{{$wiki.json_allow_cid}}' data-allow_gid='{{$wiki.json_allow_gid}}' data-deny_cid='{{$wiki.json_deny_cid}}' data-deny_gid='{{$wiki.json_deny_gid}}'>
<input type="hidden" name="origRawName" value="{{$wiki.title}}">
{{include file="field_input.tpl" field=['updateRawName', $edit_wiki_name, $wiki.title]}}
- <div class="btn-group float-right">
- <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" type="button">
+ <div class="btn-group float-end">
+ <button class="btn btn-outline-secondary btn-sm" data-bs-toggle="modal" data-bs-target="#aclModal" type="button">
<i class="jot-perms-icon fa fa-{{$wiki.lockstate}}"></i>
</button>
<button class="btn btn-primary btn-sm" type="submit" value="edit">Submit</button>
diff --git a/view/tpl/xchan_vcard.tpl b/view/tpl/xchan_vcard.tpl
index 7deae0f99..a5568f283 100644
--- a/view/tpl/xchan_vcard.tpl
+++ b/view/tpl/xchan_vcard.tpl
@@ -1,19 +1,19 @@
<div class="card mb-3 h-card">
<div class="row">
- <div class="col-4">
+ <div class="col-4" style="width: 7rem;">
<a href="{{$link}}" >
- <img class="u-photo" src="{{$photo}}" alt="{{$name}}" width="80px" height="80px">
+ <img class="u-photo rounded-start" src="{{$photo}}" alt="{{$name}}" style="width: 6rem; height:6rem;">
</a>
</div>
- <div class="col-7 m-1">
- <div class="row">
- <strong class="fn p-name text-truncate">{{$name}}</strong>
+ <div class="col-7 m-1 p-0">
+ <div class="text-truncate">
+ <strong class="fn p-name">{{$name}}</strong>
</div>
- <div class="row">
- <small class="text-muted p-adr text-truncate">{{$addr}}</small>
+ <div class="text-truncate">
+ <small class="text-muted p-adr">{{$addr}}</small>
</div>
{{if $connect}}
- <div class="row mt-2">
+ <div class="mt-1">
<a href="follow?f=&url={{$follow}}&interactive=1" class="btn btn-success btn-sm" rel="nofollow">
<i class="fa fa-plus"></i> {{$connect}}
</a>
diff --git a/view/tpl/xrd_host.tpl b/view/tpl/xrd_host.tpl
index 2a40dcf47..43bd94664 100644
--- a/view/tpl/xrd_host.tpl
+++ b/view/tpl/xrd_host.tpl
@@ -1,11 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
-<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
- xmlns:hm='http://host-meta.net/xrd/1.0'>
-
- <hm:Host>{{$zhost}}</hm:Host>
-
- <Link rel='lrdd' type="application/xrd+xml" template='{{$zroot}}/xrd/?uri={uri}' />
- <Link rel="http://oexchange.org/spec/0.8/rel/resident-target" type="application/xrd+xml"
- href="{{$zroot}}/oexchange/xrd" />
-
+<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0' xmlns:hm='http://host-meta.net/xrd/1.0'>
+ <hm:Host>{{$zhost}}</hm:Host>
+ <Link rel='lrdd' type="application/xrd+xml" template='{{$zroot}}/xrd/?uri={uri}' />
+ <Link rel="http://oexchange.org/spec/0.8/rel/resident-target" type="application/xrd+xml" href="{{$zroot}}/oexchange/xrd" />
</XRD>
diff --git a/view/tpl/xrd_person.tpl b/view/tpl/xrd_person.tpl
index 52adb54e3..63f8e0846 100644
--- a/view/tpl/xrd_person.tpl
+++ b/view/tpl/xrd_person.tpl
@@ -1,28 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
-
- <Subject>{{$subject}}</Subject>
- {{if $aliases}}{{foreach $aliases as $a}}
- <Alias>{{$a}}</Alias>
- {{/foreach}}{{/if}}
-
- <Link rel="http://schemas.google.com/g/2010#updates-from"
- type="application/atom+xml"
- href="{{$atom}}" />
- <Link rel="http://webfinger.net/rel/profile-page"
- type="text/html"
- href="{{$profile_url}}" />
- <Link rel="http://portablecontacts.net/spec/1.0"
- href="{{$poco_url}}" />
- <Link rel="http://webfinger.net/rel/avatar"
- type="image/jpeg"
- href="{{$photo}}" />
- <Link rel="http://microformats.org/profile/hcard"
- type="text/html"
- href="{{$hcard_url}}" />
- <Link rel="http://ostatus.org/schema/1.0/subscribe"
- template="{{$subscribe}}" />
- <Link rel="magic-public-key"
- href="{{$modexp}}" />
-
+ <Subject>{{$subject}}</Subject>
+{{if $aliases}}
+{{foreach $aliases as $a}}
+ <Alias>{{$a}}</Alias>
+{{/foreach}}
+{{/if}}
+ <Link rel="http://schemas.google.com/g/2010#updates-from" type="application/atom+xml" href="{{$atom}}" />
+ <Link rel="http://webfinger.net/rel/profile-page" type="text/html" href="{{$profile_url}}" />
+ <Link rel="http://portablecontacts.net/spec/1.0" href="{{$poco_url}}" />
+ <Link rel="http://webfinger.net/rel/avatar" type="image/jpeg" href="{{$photo}}" />
+ <Link rel="http://microformats.org/profile/hcard" type="text/html" href="{{$hcard_url}}" />
+ <Link rel="http://ostatus.org/schema/1.0/subscribe" template="{{$subscribe}}" />
+ <Link rel="magic-public-key" href="{{$modexp}}" />
</XRD>