diff options
author | mjfriaza <mjfriaza@disroot.org> | 2022-05-17 13:44:06 +0200 |
---|---|---|
committer | mjfriaza <mjfriaza@disroot.org> | 2022-05-17 13:44:06 +0200 |
commit | a75c61d71efebf43713026200aa0f513bd7eef09 (patch) | |
tree | 909048adeaa329813e2530d43626ed3bd711bc25 /view/tpl | |
parent | 481ecee9e87342ca7a1217395085e95d1a3b61ea (diff) | |
parent | 0d0f73fb67bbfcc53058cefded85ac36f951c7a7 (diff) | |
download | volse-hubzilla-a75c61d71efebf43713026200aa0f513bd7eef09.tar.gz volse-hubzilla-a75c61d71efebf43713026200aa0f513bd7eef09.tar.bz2 volse-hubzilla-a75c61d71efebf43713026200aa0f513bd7eef09.zip |
Merge remote-tracking branch 'upstream/dev' into dev
Diffstat (limited to 'view/tpl')
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> {{$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=§ion={{$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=§ion={{$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> {{$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> {{$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">×</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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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}} | {{/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}} | {{/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> {{$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}} {{$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> {{$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> {{$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> {{$online}}</a> <a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="fa fa-circle away"></i> {{$away}}</a> <a class="dropdown-item" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="fa fa-circle leave"></i> {{$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> {{$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> {{$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}} 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> {{/if}}<a href="{{$contact.url}}" title="{{$contact.img_hover}}" >{{$contact.name}}</a>{{if $contact.phone}} <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> {{/if}}<a href="{{$contact.url}}" title="{{$contact.img_hover}}" >{{$contact.name}}</a>{{if $contact.phone}} <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> 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> {{$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> {{$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> {{$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> {{$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() + '§ion=' + 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> {{$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">×</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"> </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"> </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"> </i></span> + <span class="float-end wall-item-pinned" title="{{$item.pinned}}" id="wall-item-pinned-{{$item.id}}"><i class="fa fa-thumb-tack"> </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> + <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> <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">×</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> + <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> <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">×</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">×</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> {{$permcat_new}}</a> + <a href="permcats" class="float-end"><i class="fa fa-plus"></i> {{$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> {{$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> {{$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">×</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">×</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> {{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> {{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> {{$cat.term}} <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> {{$cat.term}} <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">×</button> + <button type="button" class="btn-close" data-bs-dismiss="modal" aria-hidden="true">×</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">×</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">×</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">×</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> {{$create}}</button> <a href="{{$help.url}}" target="_blank" class="btn btn-sm btn-warning" title="{{$help.title}}"><i class="fa fa-info"></i> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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}} <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> {{$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> {{$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> {{$create}}</a> + <a href="appman" class="float-end btn btn-success btn-sm"><i class="fa fa-pencil-square-o"></i> {{$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">×</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> {{$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> {{$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> {{$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> {{$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>◀︎</button> <button class="orbit-next"><span class="show-for-sr">Next Slide</span>▶︎</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> {{$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> {{$tools.profile.1}}</a> <a class="dropdown-item" href="{{$tools.cover.0}}"><i class="fa fa-picture-o"></i> {{$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">×</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> {{$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"> </i></span> + <span class="float-end" title="{{$pinned}}"><i class="fa fa-thumb-tack"> </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">×</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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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> {{$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> </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> {{$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> {{$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> \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">×</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> \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> {{/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> </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> {{/if}}{{$profile.gender}}</dd></dl>{{/if}} - - {{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart"><i class="fa fa-heart"></i> </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> {{$attach}}</a> - <a class="dropdown-item" href="#" onclick="prvmailJotGetLink(); return false;" ><i class="fa fa-link"></i> {{$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> {{$expires}}</a> - <a class="dropdown-item" href="#" onclick="red_encrypt('{{$cipher}}','#prvmail-text',$('#prvmail-text').val()); return false;"><i class="fa fa-key"></i> {{$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> + <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> </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> {{$removeme}}</a> + <a title="{{$removechannel}}" class="btn btn-danger btn-sm float-end" href="removeme"><i class="fa fa-trash-o"></i> {{$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">×</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> {{$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> {{$removeme}}</a> + <a title="{{$removeaccount}}" class="btn btn-danger btn-sm float-end" href="removeaccount"><i class="fa fa-trash-o"></i> {{$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> {{$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> {{$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> 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> 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> {{$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}}] </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> {{$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> {{$renamePage}}</a> {{/if}} <a id="embed-image" class="dropdown-item" href="#"><i class="fa fa-fw fa-picture-o"></i> 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">×</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> {{$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> {{$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> |