aboutsummaryrefslogtreecommitdiffstats
path: root/view/tpl
diff options
context:
space:
mode:
Diffstat (limited to 'view/tpl')
-rwxr-xr-xview/tpl/404.tpl3
-rwxr-xr-xview/tpl/abook_edit.tpl519
-rw-r--r--view/tpl/achievements.tpl9
-rwxr-xr-xview/tpl/acl_selector.tpl64
-rw-r--r--view/tpl/admin_account_edit.tpl23
-rwxr-xr-xview/tpl/admin_accounts.tpl88
-rwxr-xr-xview/tpl/admin_aside.tpl46
-rwxr-xr-xview/tpl/admin_channels.tpl51
-rwxr-xr-xview/tpl/admin_hubloc.tpl27
-rwxr-xr-xview/tpl/admin_logs.tpl19
-rwxr-xr-xview/tpl/admin_plugins.tpl190
-rw-r--r--view/tpl/admin_plugins_addrepo.tpl9
-rwxr-xr-xview/tpl/admin_plugins_details.tpl58
-rw-r--r--view/tpl/admin_profiles.tpl38
-rw-r--r--view/tpl/admin_queue.tpl15
-rwxr-xr-xview/tpl/admin_security.tpl33
-rw-r--r--view/tpl/admin_settings_features.tpl31
-rwxr-xr-xview/tpl/admin_site.tpl101
-rwxr-xr-xview/tpl/admin_summary.tpl43
-rwxr-xr-xview/tpl/album_edit.tpl22
-rw-r--r--view/tpl/alt_pager.tpl4
-rwxr-xr-xview/tpl/api_config_xml.tpl66
-rwxr-xr-xview/tpl/api_friends_xml.tpl5
-rwxr-xr-xview/tpl/api_ratelimit_xml.tpl6
-rwxr-xr-xview/tpl/api_status_xml.tpl46
-rwxr-xr-xview/tpl/api_test_xml.tpl1
-rwxr-xr-xview/tpl/api_timeline_atom.tpl90
-rwxr-xr-xview/tpl/api_timeline_rss.tpl26
-rwxr-xr-xview/tpl/api_timeline_xml.tpl20
-rwxr-xr-xview/tpl/api_user_xml.tpl46
-rw-r--r--view/tpl/app.tpl30
-rw-r--r--view/tpl/app_create.tpl40
-rwxr-xr-xview/tpl/atom_feed.tpl30
-rw-r--r--view/tpl/attach_edit.tpl31
-rwxr-xr-xview/tpl/birthdays_reminder.tpl10
-rw-r--r--view/tpl/blocklist.tpl69
-rw-r--r--view/tpl/bookmarkedchats.tpl10
-rwxr-xr-xview/tpl/build_query.tpl65
-rwxr-xr-xview/tpl/categories_widget.tpl12
-rw-r--r--view/tpl/cdav_addressbook.tpl462
-rw-r--r--view/tpl/cdav_calendar.tpl349
-rw-r--r--view/tpl/cdav_widget_addressbook.tpl66
-rw-r--r--view/tpl/cdav_widget_calendar.tpl121
-rwxr-xr-xview/tpl/channel.tpl49
-rw-r--r--view/tpl/channel_id_select.tpl7
-rwxr-xr-xview/tpl/channel_import.tpl43
-rwxr-xr-xview/tpl/channels.tpl24
-rwxr-xr-xview/tpl/chanview.tpl1
-rw-r--r--view/tpl/chat.tpl346
-rw-r--r--view/tpl/chatroom_members.tpl5
-rw-r--r--view/tpl/chatroom_new.tpl12
-rw-r--r--view/tpl/chatroomlist.tpl10
-rw-r--r--view/tpl/chatrooms.tpl41
-rw-r--r--view/tpl/cloud.tpl4
-rw-r--r--view/tpl/cloud_actionspanel.tpl42
-rw-r--r--view/tpl/cloud_directory.tpl45
-rw-r--r--view/tpl/cloud_header.tpl16
-rwxr-xr-xview/tpl/comment_item.tpl67
-rwxr-xr-xview/tpl/common_friends.tpl15
-rwxr-xr-xview/tpl/common_tabs.tpl17
-rwxr-xr-xview/tpl/connection_template.tpl48
-rwxr-xr-xview/tpl/connections.tpl36
-rwxr-xr-xview/tpl/contact_block.tpl14
-rwxr-xr-xview/tpl/contact_head.tpl30
-rwxr-xr-xview/tpl/contact_slider.tpl20
-rwxr-xr-xview/tpl/contact_template.tpl8
-rw-r--r--view/tpl/contactsajax.tpl3
-rwxr-xr-xview/tpl/conv.tpl17
-rwxr-xr-xview/tpl/conv_frame.tpl5
-rwxr-xr-xview/tpl/conv_item.tpl250
-rwxr-xr-xview/tpl/conv_list.tpl251
-rwxr-xr-xview/tpl/conversation.tpl20
-rwxr-xr-xview/tpl/convobj.tpl4
-rwxr-xr-xview/tpl/cover_photo.tpl29
-rwxr-xr-xview/tpl/cover_photo_widget.tpl76
-rwxr-xr-xview/tpl/cropbody.tpl58
-rwxr-xr-xview/tpl/cropcover.tpl58
-rwxr-xr-xview/tpl/crophead.tpl4
-rwxr-xr-xview/tpl/delegate.tpl57
-rw-r--r--view/tpl/design_tools.tpl9
-rw-r--r--view/tpl/diaspora_vcard.tpl69
-rw-r--r--view/tpl/dir_sort_links.tpl8
-rw-r--r--view/tpl/directajax.tpl4
-rwxr-xr-xview/tpl/directory_header.tpl22
-rwxr-xr-xview/tpl/direntry.tpl77
-rwxr-xr-xview/tpl/display-head.tpl8
-rw-r--r--view/tpl/dreport.tpl28
-rwxr-xr-xview/tpl/edpost_head.tpl14
-rwxr-xr-xview/tpl/email_notify_html.tpl27
-rwxr-xr-xview/tpl/email_notify_text.tpl13
-rwxr-xr-xview/tpl/event.tpl16
-rwxr-xr-xview/tpl/event_cal.tpl14
-rwxr-xr-xview/tpl/event_form.tpl130
-rwxr-xr-xview/tpl/event_head.tpl160
-rw-r--r--view/tpl/event_item_content.tpl10
-rwxr-xr-xview/tpl/event_item_header.tpl11
-rwxr-xr-xview/tpl/events-js.tpl31
-rwxr-xr-xview/tpl/events_cal-js.tpl20
-rwxr-xr-xview/tpl/events_menu_side.tpl8
-rwxr-xr-xview/tpl/events_reminder.tpl10
-rwxr-xr-xview/tpl/events_tools_side.tpl17
-rwxr-xr-xview/tpl/failed_updates.tpl18
-rwxr-xr-xview/tpl/field.tpl3
-rwxr-xr-xview/tpl/field_acheckbox.tpl23
-rwxr-xr-xview/tpl/field_checkbox.tpl5
-rw-r--r--view/tpl/field_colorinput.tpl6
-rwxr-xr-xview/tpl/field_combobox.tpl18
-rwxr-xr-xview/tpl/field_custom.tpl5
-rwxr-xr-xview/tpl/field_input.tpl5
-rwxr-xr-xview/tpl/field_intcheckbox.tpl5
-rwxr-xr-xview/tpl/field_password.tpl5
-rwxr-xr-xview/tpl/field_radio.tpl8
-rwxr-xr-xview/tpl/field_richtext.tpl5
-rwxr-xr-xview/tpl/field_select.tpl7
-rw-r--r--view/tpl/field_select_disabled.tpl7
-rw-r--r--view/tpl/field_select_grouped.tpl12
-rwxr-xr-xview/tpl/field_select_raw.tpl7
-rwxr-xr-xview/tpl/field_textarea.tpl5
-rwxr-xr-xview/tpl/field_themeselect.tpl13
-rwxr-xr-xview/tpl/field_yesno.tpl13
-rwxr-xr-xview/tpl/fileas_widget.tpl12
-rwxr-xr-xview/tpl/filebrowser.tpl84
-rwxr-xr-xview/tpl/filer_dialog.tpl19
-rwxr-xr-xview/tpl/follow.tpl14
-rw-r--r--view/tpl/force_image_reload.tpl72
-rw-r--r--view/tpl/generic_addon_settings.tpl19
-rwxr-xr-xview/tpl/generic_links_widget.tpl11
-rw-r--r--view/tpl/generic_modal.tpl17
-rwxr-xr-xview/tpl/group_drop.tpl7
-rwxr-xr-xview/tpl/group_edit.tpl26
-rwxr-xr-xview/tpl/group_selection.tpl8
-rwxr-xr-xview/tpl/group_side.tpl26
-rwxr-xr-xview/tpl/groupeditor.tpl16
-rw-r--r--view/tpl/hdr.tpl3
-rwxr-xr-xview/tpl/head.tpl21
-rw-r--r--view/tpl/help.tpl33
-rwxr-xr-xview/tpl/install.tpl9
-rwxr-xr-xview/tpl/install_checks.tpl24
-rwxr-xr-xview/tpl/install_db.tpl30
-rwxr-xr-xview/tpl/install_settings.tpl28
-rwxr-xr-xview/tpl/invite.tpl28
-rw-r--r--view/tpl/item_attach.tpl5
-rw-r--r--view/tpl/item_binary.tpl3
-rw-r--r--view/tpl/item_categories.tpl8
-rw-r--r--view/tpl/item_filer.tpl8
-rwxr-xr-xview/tpl/item_import.tpl13
-rwxr-xr-xview/tpl/jot-header.tpl598
-rwxr-xr-xview/tpl/jot.tpl303
-rwxr-xr-xview/tpl/jot_geotag.tpl7
-rwxr-xr-xview/tpl/js_strings.tpl57
-rwxr-xr-xview/tpl/lang_selector.tpl13
-rw-r--r--view/tpl/layoutlist.tpl71
-rwxr-xr-xview/tpl/like_noshare.tpl5
-rw-r--r--view/tpl/locmanage.tpl41
-rwxr-xr-xview/tpl/login.tpl21
-rwxr-xr-xview/tpl/logout.tpl6
-rwxr-xr-xview/tpl/lostpass.tpl17
-rwxr-xr-xview/tpl/mail_conv.tpl38
-rwxr-xr-xview/tpl/mail_display.tpl24
-rwxr-xr-xview/tpl/mail_head.tpl8
-rwxr-xr-xview/tpl/mail_list.tpl7
-rwxr-xr-xview/tpl/main_slider.tpl38
-rwxr-xr-xview/tpl/match.tpl16
-rw-r--r--view/tpl/menuedit.tpl33
-rw-r--r--view/tpl/menulist.tpl40
-rwxr-xr-xview/tpl/message_side.tpl9
-rwxr-xr-xview/tpl/micropro_img.tpl1
-rwxr-xr-xview/tpl/micropro_txt.tpl1
-rw-r--r--view/tpl/mitemedit.tpl42
-rw-r--r--view/tpl/mitemlist.tpl34
-rwxr-xr-xview/tpl/mood_content.tpl33
-rwxr-xr-xview/tpl/msg-header.tpl81
-rwxr-xr-xview/tpl/myapps.tpl17
-rwxr-xr-xview/tpl/nav.tpl222
-rw-r--r--view/tpl/nav_login.tpl18
-rwxr-xr-xview/tpl/new_channel.tpl34
-rw-r--r--view/tpl/notes.tpl35
-rwxr-xr-xview/tpl/notifications.tpl11
-rwxr-xr-xview/tpl/notify.tpl3
-rw-r--r--view/tpl/nwiki_page_history.tpl59
-rwxr-xr-xview/tpl/oauth_authorize.tpl10
-rwxr-xr-xview/tpl/oauth_authorize_done.tpl4
-rwxr-xr-xview/tpl/oembed_video.tpl4
-rwxr-xr-xview/tpl/oexchange_xrd.tpl33
-rwxr-xr-xview/tpl/page_display.tpl14
-rw-r--r--view/tpl/page_display_empty.tpl1
-rw-r--r--view/tpl/pdledit.tpl24
-rwxr-xr-xview/tpl/peoplefind.tpl17
-rwxr-xr-xview/tpl/photo_album.tpl32
-rwxr-xr-xview/tpl/photo_albums.tpl13
-rwxr-xr-xview/tpl/photo_drop.tpl3
-rwxr-xr-xview/tpl/photo_item.tpl34
-rwxr-xr-xview/tpl/photo_top.tpl4
-rwxr-xr-xview/tpl/photo_view.tpl172
-rwxr-xr-xview/tpl/photos_recent.tpl23
-rwxr-xr-xview/tpl/photos_upload.tpl61
-rwxr-xr-xview/tpl/photosajax.tpl4
-rwxr-xr-xview/tpl/poco_entry_xml.tpl8
-rwxr-xr-xview/tpl/poco_xml.tpl18
-rwxr-xr-xview/tpl/poke_content.tpl48
-rwxr-xr-xview/tpl/posted_date_widget.tpl46
-rw-r--r--view/tpl/prep.tpl31
-rw-r--r--view/tpl/profdef_edit.tpl16
-rwxr-xr-xview/tpl/profed_head.tpl2
-rwxr-xr-xview/tpl/profile_advanced.tpl341
-rwxr-xr-xview/tpl/profile_edit.tpl401
-rwxr-xr-xview/tpl/profile_entry.tpl11
-rwxr-xr-xview/tpl/profile_listing_header.tpl12
-rwxr-xr-xview/tpl/profile_photo.tpl48
-rw-r--r--view/tpl/profile_tabs.tpl5
-rwxr-xr-xview/tpl/profile_vcard.tpl62
-rwxr-xr-xview/tpl/profile_vcard_short.tpl38
-rwxr-xr-xview/tpl/prv_message.tpl104
-rwxr-xr-xview/tpl/pwdreset.tpl17
-rw-r--r--view/tpl/rating_form.tpl25
-rw-r--r--view/tpl/rating_slider.tpl19
-rw-r--r--view/tpl/rbmark.tpl16
-rwxr-xr-xview/tpl/register.tpl61
-rwxr-xr-xview/tpl/remote_friends_common.tpl21
-rw-r--r--view/tpl/remote_login.tpl1
-rw-r--r--view/tpl/removeaccount.tpl20
-rwxr-xr-xview/tpl/removeme.tpl20
-rwxr-xr-xview/tpl/rmagic.tpl9
-rw-r--r--view/tpl/safesearch.tpl6
-rw-r--r--view/tpl/saved_searches.tpl12
-rwxr-xr-xview/tpl/search_item.tpl114
-rw-r--r--view/tpl/searchbox.tpl12
-rw-r--r--view/tpl/section_title.tpl5
-rw-r--r--view/tpl/select_timezone.tpl11
-rw-r--r--view/tpl/sellpage_edit.tpl23
-rw-r--r--view/tpl/sellpage_submit.tpl3
-rw-r--r--view/tpl/sellpage_view.tpl11
-rwxr-xr-xview/tpl/settings.tpl192
-rwxr-xr-xview/tpl/settings_account.tpl28
-rwxr-xr-xview/tpl/settings_addons.tpl11
-rwxr-xr-xview/tpl/settings_connectors.tpl10
-rwxr-xr-xview/tpl/settings_display.tpl86
-rwxr-xr-xview/tpl/settings_features.tpl30
-rwxr-xr-xview/tpl/settings_nick_set.tpl8
-rwxr-xr-xview/tpl/settings_oauth.tpl36
-rwxr-xr-xview/tpl/settings_oauth_edit.tpl22
-rw-r--r--view/tpl/settings_permcats.tpl64
-rw-r--r--view/tpl/settings_tokens.tpl72
-rw-r--r--view/tpl/sharedwithme.tpl26
-rw-r--r--view/tpl/show_thing.tpl16
-rwxr-xr-xview/tpl/siteinfo.tpl41
-rw-r--r--view/tpl/sitesearch.tpl5
-rw-r--r--view/tpl/sources_edit.tpl24
-rw-r--r--view/tpl/sources_list.tpl17
-rw-r--r--view/tpl/sources_new.tpl17
-rwxr-xr-xview/tpl/suggest_friends.tpl16
-rwxr-xr-xview/tpl/suggest_page.tpl9
-rw-r--r--view/tpl/suggest_widget.tpl10
-rw-r--r--view/tpl/thing_edit.tpl41
-rw-r--r--view/tpl/thing_input.tpl41
-rwxr-xr-xview/tpl/threaded_conversation.tpl8
-rwxr-xr-xview/tpl/toggle_mobile_footer.tpl2
-rw-r--r--view/tpl/uexport.tpl19
-rw-r--r--view/tpl/usermenu.tpl20
-rwxr-xr-xview/tpl/viewcontact_template.tpl13
-rw-r--r--view/tpl/viewcontactsajax.tpl3
-rw-r--r--view/tpl/webpage_export_list.tpl124
-rw-r--r--view/tpl/webpage_import.tpl126
-rw-r--r--view/tpl/webpagelist.tpl76
-rw-r--r--view/tpl/website_portation_tools.tpl60
-rw-r--r--view/tpl/wiki.tpl469
-rw-r--r--view/tpl/wiki_page_history.tpl59
-rw-r--r--view/tpl/wiki_page_list.tpl76
-rw-r--r--view/tpl/wikilist.tpl78
-rw-r--r--view/tpl/wikilist_widget.tpl8
-rw-r--r--view/tpl/write_pages.tpl3
-rwxr-xr-xview/tpl/xchan_vcard.tpl10
-rw-r--r--view/tpl/xrd_diaspora.tpl3
-rwxr-xr-xview/tpl/xrd_host.tpl11
-rwxr-xr-xview/tpl/xrd_person.tpl31
-rw-r--r--view/tpl/zcard.tpl144
-rw-r--r--view/tpl/zcard_embed.tpl8
277 files changed, 12312 insertions, 0 deletions
diff --git a/view/tpl/404.tpl b/view/tpl/404.tpl
new file mode 100755
index 000000000..c9b51a63b
--- /dev/null
+++ b/view/tpl/404.tpl
@@ -0,0 +1,3 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$message}}</h1>
+</div>
diff --git a/view/tpl/abook_edit.tpl b/view/tpl/abook_edit.tpl
new file mode 100755
index 000000000..9fb5c4b18
--- /dev/null
+++ b/view/tpl/abook_edit.tpl
@@ -0,0 +1,519 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $notself}}
+ <div class="pull-right">
+ <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">
+ <i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
+ </button>
+ <div class="dropdown-menu dropdown-menu-right" 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}}
+ <a class="dropdown-item" href="{{$tools.fetchvc.url}}" title="{{$tools.fetchvc.title}}">{{$tools.fetchvc.label}}</a>
+ {{/if}}
+ <a class="dropdown-item" href="#" title="{{$tools.refresh.title}}" onclick="window.location.href='{{$tools.refresh.url}}'; return false;">{{$tools.refresh.label}}</a>
+ <a class="dropdown-item" href="#" title="{{$tools.rephoto.title}}" onclick="window.location.href='{{$tools.rephoto.url}}'; return false;">{{$tools.rephoto.label}}</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="#" title="{{$tools.block.title}}" onclick="window.location.href='{{$tools.block.url}}'; return false;">{{$tools.block.label}}</a>
+ <a class="dropdown-item" href="#" title="{{$tools.ignore.title}}" onclick="window.location.href='{{$tools.ignore.url}}'; return false;">{{$tools.ignore.label}}</a>
+ <a class="dropdown-item" href="#" title="{{$tools.archive.title}}" onclick="window.location.href='{{$tools.archive.url}}'; return false;">{{$tools.archive.label}}</a> <a class="dropdown-item" href="#" title="{{$tools.hide.title}}" onclick="window.location.href='{{$tools.hide.url}}'; return false;">{{$tools.hide.label}}</a>
+ <a class="dropdown-item" href="#" title="{{$tools.delete.title}}" onclick="window.location.href='{{$tools.delete.url}}'; return false;">{{$tools.delete.label}}</a>
+ </div>
+ </div>
+ {{if $abook_prev || $abook_next}}
+ <div class="btn-group">
+ <a href="connedit/{{$abook_prev}}{{if $section}}?f=&section={{$section}}{{/if}}" class="btn btn-outline-secondary btn-sm{{if ! $abook_prev}} disabled{{/if}}" ><i class="fa fa-backward"></i></a>
+ <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">
+ {{foreach $sections as $s}}
+ <a class="dropdown-item" href="{{$s.url}}" title="{{$s.title}}">{{$s.label}}</a>
+ {{/foreach}}
+ </div>
+ </div>
+ <a href="connedit/{{$abook_next}}{{if $section}}?f=&section={{$section}}{{/if}}" class="btn btn-outline-secondary btn-sm{{if ! $abook_next}} disabled{{/if}}" ><i class="fa fa-forward"></i></a>
+ </div>
+ {{/if}}
+ </div>
+ {{/if}}
+ <h2>{{$header}}</h2>
+ </div>
+ <div class="section-content-wrapper-np">
+ {{if $notself}}
+ {{foreach $tools as $tool}}
+ {{if $tool.info}}
+ <div class="section-content-danger-wrapper">
+ <div>
+ {{$tool.info}}
+ </div>
+ </div>
+ {{/if}}
+ {{/foreach}}
+ <div class="section-content-info-wrapper">
+ <div>
+ {{$addr_text}} <strong>'{{$addr}}'</strong>
+ </div>
+ {{if $locstr}}
+ <div>
+ {{$loc_text}} {{$locstr}}
+ </div>
+ {{/if}}
+ {{if $last_update}}
+ <div>
+ {{$lastupdtext}} {{$last_update}}
+ </div>
+ {{/if}}
+ </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">
+ <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">
+ <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">
+ <select name="tel_type[]">
+ <option value="CELL">{{$mobile}}</option>
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="" placeholder="{{$tel_label}}">
+ <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">
+ <select name="email_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="" placeholder="{{$email_label}}">
+ <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">
+ <select name="impp_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="" placeholder="{{$impp_label}}">
+ <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">
+ <select name="url_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="url[]" value="" placeholder="{{$url_label}}">
+ <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">
+ <select name="adr_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <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">
+ <input type="text" name="" value="" placeholder="{{$po_box}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$extra}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$street}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$locality}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$region}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$zip_code}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$country}}">
+ </div>
+ </div>
+
+ <div id="template-form-vcard-note" class="form-group 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>
+ </div>
+
+ <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>
+ <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>
+ <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>
+ <li class="add-vcard-impp"><a href="#" data-add="vcard-impp" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$impp_label}}</a></li>
+ <li class="add-vcard-url"><a href="#" data-add="vcard-url" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$url_label}}</a></li>
+ <li class="add-vcard-adr"><a href="#" data-add="vcard-adr" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$adr_label}}</a></li>
+ <li class="add-vcard-note"{{if $vcard.note}} style="display: none"{{/if}}><a href="#" data-add="vcard-note" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$note_label}}</a></li>
+ </ul>
+ </div>
+ <div id="vcard-header-{{$vcard.id}}" class="vcard-header" data-id="{{$vcard.id}}" data-action="open">
+ <i class="vcard-fn-preview fa fa-address-card-o"></i>
+ <span id="vcard-preview-{{$vcard.id}}" class="vcard-preview">
+ {{if $vcard.fn}}<span class="vcard-fn-preview">{{$vcard.fn}}</span>{{/if}}
+ {{if $vcard.emails.0.address}}<span class="vcard-email-preview d-none d-md-table-cell"><a href="mailto:{{$vcard.emails.0.address}}">{{$vcard.emails.0.address}}</a></span>{{/if}}
+ {{if $vcard.tels.0}}<span class="vcard-tel-preview d-none d-md-table-cell">{{$vcard.tels.0.nr}}{{if $is_mobile}} <a class="btn btn-outline-secondary btn-sm" href="tel:{{$vcard.tels.0.nr}}"><i class="fa fa-phone connphone"></i></a>{{/if}}</span>{{/if}}
+ </span>
+ <input id="vcard-fn-{{$vcard.id}}" class="vcard-fn" type="text" name="fn" value="{{$vcard.fn}}" size="{{$vcard.fn|count_characters:true}}" placeholder="{{$name_label}}">
+ </div>
+ </div>
+ <div id="vcard-info-{{$vcard.id}}" class="vcard-info section-content-wrapper">
+
+ <div class="vcard-org form-group">
+ <div class="form-vcard-org-wrapper">
+ {{if $vcard.org}}
+ <div class="form-group 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>
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-title form-group">
+ <div class="form-vcard-title-wrapper">
+ {{if $vcard.title}}
+ <div class="form-group 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>
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="vcard-tel form-group">
+ <div class="form-vcard-tel-wrapper">
+ {{if $vcard.tels}}
+ {{foreach $vcard.tels as $tel}}
+ <div class="form-group 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>
+ <option value="HOME"{{if $tel.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
+ <option value="WORK"{{if $tel.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $tel.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="{{$tel.nr}}" size="{{$tel.nr|count_characters:true}}" placeholder="{{$tel_label}}">
+ <i data-remove="vcard-tel" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="vcard-email form-group">
+ <div class="form-vcard-email-wrapper">
+ {{if $vcard.emails}}
+ {{foreach $vcard.emails as $email}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $email.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $email.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="{{$email.address}}" size="{{$email.address|count_characters:true}}" placeholder="{{$email_label}}">
+ <i data-remove="vcard-email" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-impp form-group">
+ <div class="form-vcard-impp-wrapper">
+ {{if $vcard.impps}}
+ {{foreach $vcard.impps as $impp}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $impp.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $impp.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="{{$impp.address}}" size="{{$impp.address|count_characters:true}}" placeholder="{{$impp_label}}">
+ <i data-remove="vcard-impp" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-url form-group">
+ <div class="form-vcard-url-wrapper">
+ {{if $vcard.urls}}
+ {{foreach $vcard.urls as $url}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $url.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $url.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="url[]" value="{{$url.address}}" size="{{$url.address|count_characters:true}}" placeholder="{{$url_label}}">
+ <i data-remove="vcard-url" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-adr form-group">
+ <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">
+ <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>
+ <option value="HOME"{{if $adr.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
+ <option value="WORK"{{if $adr.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $adr.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.6}}" size="{{$adr.address.6|count_characters:true}}" placeholder="{{$country}}">
+ </div>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-note form-group form-vcard-note">
+ <div class="form-vcard-note-wrapper">
+ {{if $vcard.note}}
+ <label>{{$note_label}}</label>
+ <i data-remove="vcard-note" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ <textarea name="note" class="form-control">{{$vcard.note}}</textarea>
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
+ </div>
+
+ </div>
+ {{/if}}
+
+ {{if $affinity}}
+ <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">
+ {{$affinity}}
+ </a>
+ </h3>
+ </div>
+ <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>
+ {{$slide}}
+ <input id="contact-closeness-mirror" type="hidden" name="closeness" value="{{$close}}" />
+ {{/if}}
+
+ {{if $multiprofs}}
+ <div class="form-group">
+ <strong>{{$lbl_vis2}}</strong>
+ {{$profile_select}}
+ </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}}
+
+ {{if $connfilter}}
+ <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">
+ {{$connfilter_label}}
+ </a>
+ </h3>
+ </div>
+ <div id="fitert-tool-collapse" class="panel-collapse collapse{{if $section == 'filter' }} show{{/if}}" role="tabpanel" aria-labelledby="fitert-tool">
+ <div class="section-content-tools-wrapper">
+ {{include file="field_textarea.tpl" field=$incl}}
+ {{include file="field_textarea.tpl" field=$excl}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{else}}
+ <input type="hidden" name="{{$incl.0}}" value="{{$incl.2}}" />
+ <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}}
+ <div class="loading-role-rotator"></div>
+ <a href="settings/permcats" class="pull-right"><i class="fa fa-plus"></i>&nbsp;{{$permcat_new}}</a>
+ {{include file="field_select.tpl" field=$permcat}}
+ {{/if}}
+
+ <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>
+ </div>
+</div>
diff --git a/view/tpl/achievements.tpl b/view/tpl/achievements.tpl
new file mode 100644
index 000000000..7d503cc53
--- /dev/null
+++ b/view/tpl/achievements.tpl
@@ -0,0 +1,9 @@
+<div class="generic-content-wrapper">
+<p>{{$newmembertext}}</p>
+
+{{if $profilebadge}}<div id="profile-badge" class="badges"><img src="images/emoticons/smiley-thumbsup.gif"></div>{{/if}}
+{{if $contactbadge}}<div id="contact-badge" class="badges"><img src="images/emoticons/smiley-thumbsup.gif"></div>{{/if}}
+{{if $keywordsbadge}}<div id="keywords-badge" class="badges"><img src="images/emoticons/smiley-thumbsup.gif"></div>{{/if}}
+{{if $channelsbadge}}<div id="channels-badge" class="badges"><img src="images/emoticons/smiley-thumbsup.gif"></div>{{/if}}
+
+</div>
diff --git a/view/tpl/acl_selector.tpl b/view/tpl/acl_selector.tpl
new file mode 100755
index 000000000..f4f851c8a
--- /dev/null
+++ b/view/tpl/acl_selector.tpl
@@ -0,0 +1,64 @@
+<form>
+<div class="modal" id="aclModal">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">
+ <i id="dialog-perms-icon" class="fa fa-fw"></i> {{$aclModalTitle}}
+ {{if $helpUrl}}
+ <a target="hubzilla-help" href="{{$helpUrl}}" class="contextual-help-tool" title="Help and documentation"><i class="fa fa-fw fa-question"></i></a>
+ {{/if}}
+ </h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </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">{{$select_label}}</label>
+ <select id="acl-select" name="optionsRadios" class="form-control form-group">
+ <option id="acl-showall" value="public" {{$public_selected}}>{{$showall}}</option>
+ {{$groups}}
+ <option id="acl-onlyme" value="onlyme" {{$justme_selected}}>{{$onlyme}}</option>
+ <option id="acl-custom" value="custom" {{$custom_selected}}>{{$custom}}</option>
+ </select>
+
+ {{if $showallOrigin}}
+ <div id="acl-info" class="form-group">
+ <i class="fa fa-info-circle"></i>&nbsp;{{$showallOrigin}}
+ </div>
+ {{/if}}
+
+ <div id="acl-wrapper">
+ <div id="acl-list">
+ <input class="form-control" type="text" id="acl-search" placeholder="&#xf002; {{$search}}">
+ <small class="text-muted">{{$showlimitedDesc}}</small>
+ <div id="acl-list-content"></div>
+ </div>
+ </div>
+
+ <div class="acl-list-item" rel="acl-template" style="display:none">
+ <div class="acl-item-header">
+ <img class="menu-img-1" data-src="{0}"> {1}
+ </div>
+ <button class="acl-button-hide btn btn-sm btn-outline-danger"><i class="fa fa-times"></i> {{$hide}}</button>
+ <button class="acl-button-show btn btn-sm btn-outline-success"><i class="fa fa-check"></i> {{$show}}</button>
+ </div>
+ </div>
+ <div class="modal-footer clear">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$aclModalDismiss}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+</form>
+<script>
+ // compatibility issue with bootstrap v4
+ //$('[data-toggle="popover"]').popover(); // Init the popover, if present
+
+ if(typeof acl=="undefined"){
+ acl = new ACL(
+ baseurl+"/acl"
+ );
+ }
+</script>
diff --git a/view/tpl/admin_account_edit.tpl b/view/tpl/admin_account_edit.tpl
new file mode 100644
index 000000000..82d137de4
--- /dev/null
+++ b/view/tpl/admin_account_edit.tpl
@@ -0,0 +1,23 @@
+<h2>{{$title}}</h2>
+
+<h3>{{$account.account_email}}</h3>
+
+
+<form action="admin/account_edit/{{$account.account_id}}" method="post" >
+<input type="hidden" name="aid" value="{{$account.account_id}}" />
+
+{{include file="field_password.tpl" field=$pass1}}
+{{include file="field_password.tpl" field=$pass2}}
+
+{{if $z_server_role == 'pro'}}
+{{include file="field_select.tpl" field=$account_level}}
+{{else}}
+<input type="hidden" name="account_level" value="{{$account_level.2}}" />
+{{/if}}
+{{include file="field_select.tpl" field=$account_language}}
+{{include file="field_input.tpl" field=$service_class}}
+
+
+<input type="submit" name="submit" value="{{$submit}}" />
+
+</form>
diff --git a/view/tpl/admin_accounts.tpl b/view/tpl/admin_accounts.tpl
new file mode 100755
index 000000000..3535363a0
--- /dev/null
+++ b/view/tpl/admin_accounts.tpl
@@ -0,0 +1,88 @@
+<script>
+ function confirm_delete(uname){
+ return confirm( "{{$confirm_delete}}".format(uname));
+ }
+ function confirm_delete_multi(){
+ return confirm("{{$confirm_delete_multi}}");
+ }
+ function toggle_selectall(cls){
+ $("."+cls).prop("checked", !$("."+cls).prop("checked"));
+ return false;
+ }
+</script>
+<div class="generic-content-wrapper-styled" id="adminpage">
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <form action="{{$baseurl}}/admin/accounts" method="post">
+ <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+
+ <h3>{{$h_pending}}</h3>
+ {{if $pending}}
+ <table id="pending">
+ <thead>
+ <tr>
+ {{foreach $th_pending as $th}}<th>{{$th}}</th>{{/foreach}}
+ <th></th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{foreach $pending as $u}}
+ <tr>
+ <td class="created">{{$u.account_created}}</td>
+ <td class="email">{{$u.account_email}}</td>
+ <td class="checkbox_bulkedit"><input type="checkbox" class="pending_ckbx" id="id_pending_{{$u.hash}}" name="pending[]" value="{{$u.hash}}"></td>
+ <td class="tools">
+ <a href="{{$baseurl}}/regmod/allow/{{$u.hash}}" class="btn btn-outline-secondary btn-sm" title="{{$approve}}"><i class="fa fa-thumbs-o-up admin-icons"></i></a>
+ <a href="{{$baseurl}}/regmod/deny/{{$u.hash}}" class="btn btn-outline-secondary btn-sm" title="{{$deny}}"><i class="fa fa-thumbs-o-down admin-icons"></i></a>
+ </td>
+ </tr>
+ {{/foreach}}
+ </tbody>
+ </table>
+ <div class="selectall"><a href="#" onclick="return toggle_selectall('pending_ckbx');">{{$select_all}}</a></div>
+ <div class="submit"><input type="submit" name="page_users_deny" value="{{$deny}}"> <input type="submit" name="page_users_approve" value="{{$approve}}"></div>
+ {{else}}
+ <p>{{$no_pending}}</p>
+ {{/if}}
+
+
+ <h3>{{$h_users}}</h3>
+ {{if $users}}
+ <table id="users">
+ <thead>
+ <tr>
+ {{foreach $th_users as $th}}<th><a href="{{$base}}&key={{$th.1}}&dir={{$odir}}">{{$th.0}}</a></th>{{/foreach}}
+ <th></th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{foreach $users as $u}}
+ <tr>
+ <td class="account_id">{{$u.account_id}}</td>
+ <td class="email">{{if $u.blocked}}
+ <a href="admin/account_edit/{{$u.account_id}}"><i>{{$u.account_email}}</i></a>
+ {{else}}
+ <a href="admin/account_edit/{{$u.account_id}}"><strong>{{$u.account_email}}</strong></a>
+ {{/if}}</td>
+ <td class="channels">{{$u.channels}}</td>
+ <td class="register_date">{{$u.account_created}}</td>
+ <td class="login_date">{{$u.account_lastlog}}</td>
+ <td class="account_expires">{{$u.account_expires}}</td>
+ <td class="service_class">{{$u.account_service_class}}</td>
+ <td class="checkbox_bulkedit"><input type="checkbox" class="users_ckbx" id="id_user_{{$u.account_id}}" name="user[]" value="{{$u.account_id}}"><input type="hidden" name="blocked[]" value="{{$u.blocked}}"></td>
+ <td class="tools">
+ <a href="{{$baseurl}}/admin/accounts/{{if ($u.blocked)}}un{{/if}}block/{{$u.account_id}}?t={{$form_security_token}}" class="btn btn-outline-secondary btn-sm" title='{{if ($u.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class="fa fa-ban admin-icons{{if ($u.blocked)}} dim{{/if}}"></i></a><a href="{{$baseurl}}/admin/accounts/delete/{{$u.account_id}}?t={{$form_security_token}}" class="btn btn-outline-secondary btn-sm" title='{{$delete}}' onclick="return confirm_delete('{{$u.name}}')"><i class="fa fa-trash-o admin-icons"></i></a>
+ </td>
+ </tr>
+ {{/foreach}}
+ </tbody>
+ </table>
+ <div class="selectall"><a href="#" onclick="return toggle_selectall('users_ckbx');">{{$select_all}}</a></div>
+ <div class="submit"><input type="submit" name="page_users_block" value="{{$block}}/{{$unblock}}"> <input type="submit" name="page_users_delete" value="{{$delete}}" onclick="return confirm_delete_multi()"></div>
+ {{else}}
+ NO USERS?!?
+ {{/if}}
+ </form>
+</div>
diff --git a/view/tpl/admin_aside.tpl b/view/tpl/admin_aside.tpl
new file mode 100755
index 000000000..99f139e57
--- /dev/null
+++ b/view/tpl/admin_aside.tpl
@@ -0,0 +1,46 @@
+<script>
+ // update pending count //
+ $(function(){
+
+ $("nav").bind('nav-update', function(e,data){
+ var elm = $('#pending-update');
+ var register = $(data).find('register').text();
+ if (register=="0") { register=""; elm.hide();} else { elm.show(); }
+ elm.html(register);
+ });
+ });
+</script>
+<div class="widget">
+<h3>{{$admtxt}}</h3>
+<ul class="nav nav-pills flex-column">
+ {{foreach $admin as $link}}
+ <li class="nav-item"><a class="nav-link" href='{{$link.0}}'>{{$link.1}}{{if $link.3}}<span id='{{$link.3}}' title='{{$link.4}}'></span>{{/if}}</a></li>
+ {{/foreach}}
+</ul>
+</div>
+
+{{if $admin.update}}
+<ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a class="nav-link" href='{{$admin.update.0}}'>{{$admin.update.1}}</a></li>
+ <li class="nav-item"><a class="nav-link" href=''>Important Changes</a></li>
+</ul>
+{{/if}}
+
+
+{{if $plugins}}
+<div class="widget">
+<h3>{{$plugadmtxt}}</h3>
+<ul class="nav nav-pills flex-column">
+ {{foreach $plugins as $l}}
+ <li class="nav-item"><a class="nav-link" href='{{$l.0}}'>{{$l.1}}</a></li>
+ {{/foreach}}
+</ul>
+</div>
+{{/if}}
+
+<div class="widget">
+<h3>{{$logtxt}}</h3>
+<ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a class="nav-link" href='{{$logs.0}}'>{{$logs.1}}</a></li>
+</ul>
+</div>
diff --git a/view/tpl/admin_channels.tpl b/view/tpl/admin_channels.tpl
new file mode 100755
index 000000000..452e0eeec
--- /dev/null
+++ b/view/tpl/admin_channels.tpl
@@ -0,0 +1,51 @@
+<script>
+ function confirm_delete(uname){
+ return confirm( "{{$confirm_delete}}".format(uname));
+ }
+ function confirm_delete_multi(){
+ return confirm("{{$confirm_delete_multi}}");
+ }
+ function selectall(cls){
+ $("."+cls).attr('checked','checked');
+ return false;
+ }
+</script>
+<div class = "generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <form action="{{$baseurl}}/admin/channels" method="post">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <h3>{{$h_channels}}</h3>
+ {{if $channels}}
+ <table id='channels'>
+ <thead>
+ <tr>
+ {{foreach $th_channels as $th}}<th><a href="{{$base}}&key={{$th.1}}&dir={{$odir}}">{{$th.0}}</a></th>{{/foreach}}
+ <th></th>
+ <th></th>
+ </tr>
+ </thead>
+ <tbody>
+ {{foreach $channels as $c}}
+ <tr>
+ <td class='channel_id'>{{$c.channel_id}}</td>
+ <td class='channel_name'><a href="channel/{{$c.channel_address}}">{{$c.channel_name}}</a></td>
+ <td class='channel_address'>{{$c.channel_address}}</td>
+ <td class="checkbox_bulkedit"><input type="checkbox" class="channels_ckbx" id="id_channel_{{$c.channel_id}}" name="channel[]" value="{{$c.channel_id}}"/></td>
+ <td class="tools">
+ <a href="{{$baseurl}}/admin/channels/block/{{$c.channel_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs" title='{{if ($c.blocked)}}{{$unblock}}{{else}}{{$block}}{{/if}}'><i class='fa fa-ban admin-icons {{if ($c.blocked)}}dim{{/if}}'></i></a>
+ <a href="{{$baseurl}}/admin/channels/code/{{$c.channel_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs{{if ($c.allowcode)}} btn-danger{{/if}}" title='{{if ($c.allowcode)}}{{$uncode}}{{else}}{{$code}}{{/if}}'><i class='fa fa-terminal admin-icons {{if ($c.allowcode)}}dim{{/if}}'></i></a>
+ <a href="{{$baseurl}}/admin/channels/delete/{{$c.channel_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs" title='{{$delete}}' onclick="return confirm_delete('{{$c.channel_name}}')"><i class='fa fa-trash-o admin-icons'></i></a>
+ </td>
+ </tr>
+ {{/foreach}}
+ </tbody>
+ </table>
+ <div class='selectall'><a href='#' onclick="return selectall('channels_ckbx');">{{$select_all}}</a></div>
+ <div class="submit"><input type="submit" name="page_channels_block" value="{{$block}}/{{$unblock}}" /> <input type="submit" name="page_channels_code" value="{{$code}}/{{$uncode}}" /> <input type="submit" name="page_channels_delete" value="{{$delete}}" onclick="return confirm_delete_multi()" /></div>
+ {{else}}
+ NO CHANNELS?!?
+ {{/if}}
+ </form>
+</div>
diff --git a/view/tpl/admin_hubloc.tpl b/view/tpl/admin_hubloc.tpl
new file mode 100755
index 000000000..1bd1f0122
--- /dev/null
+++ b/view/tpl/admin_hubloc.tpl
@@ -0,0 +1,27 @@
+<div class="generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <table id='server'>
+ <thead>
+ <tr>
+ {{foreach $th_hubloc as $th}}<th>{{$th}}</th>{{/foreach}}
+ </tr>
+ </thead>
+ <tbody>
+
+ {{foreach $hubloc as $hub}}<tr>
+ <td>{{$hub.hubloc_id}}</td><td>{{$hub.hubloc_addr}}</td><td>{{$hub.hubloc_host}}</td><td>{{$hub.hubloc_status}}</td>
+ <td>
+ <form action="{{$baseurl}}/admin/hubloc" method="post">
+ <input type="hidden" name="hublocid" value="{{$hub.hubloc_id}}">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ <input type='hidden' name='url' value='{{$hub.hubloc_host}}'>
+ <input type="submit" name="check" value="check" >
+ <input type="submit" name="repair" value="repair" ></td>
+ </form>
+ </tr>{{/foreach}}
+ </tbody>
+ </table>
+
+
+</div>
diff --git a/view/tpl/admin_logs.tpl b/view/tpl/admin_logs.tpl
new file mode 100755
index 000000000..6d2d7834c
--- /dev/null
+++ b/view/tpl/admin_logs.tpl
@@ -0,0 +1,19 @@
+<div class="generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <form action="{{$baseurl}}/admin/logs" method="post">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ {{include file="field_checkbox.tpl" field=$debugging}}
+ {{include file="field_input.tpl" field=$logfile}}
+ {{include file="field_select.tpl" field=$loglevel}}
+
+ <div class="submit"><input type="submit" name="page_logs" value="{{$submit}}" /></div>
+
+ </form>
+
+ <h3>{{$logname}}</h3>
+ <div style="width:100%; height:400px; overflow: auto; "><pre>{{$data}}</pre></div>
+<!-- <iframe src='{{$baseurl}}/{{$logname}}' style="width:100%; height:400px"></iframe> -->
+ <!-- <div class="submit"><input type="submit" name="page_logs_clear_log" value="{{$clear}}" /></div> -->
+</div>
diff --git a/view/tpl/admin_plugins.tpl b/view/tpl/admin_plugins.tpl
new file mode 100755
index 000000000..fd5ae7d5e
--- /dev/null
+++ b/view/tpl/admin_plugins.tpl
@@ -0,0 +1,190 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $allowManageRepos}}
+ <div class="pull-right">
+ <button class="btn btn-success btn-sm" onclick="openClose('form');">{{$managerepos}}</button>
+ </div>
+ {{/if}}
+ <h2 id="title">{{$title}} - {{$page}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div id="form" class="section-content-tools-wrapper"{{if !$expandform}} style="display:none;"{{/if}}>
+
+ <div class="clear"></div>
+ <div class="section-title-wrapper" style="margin-top: 20px;">
+ <h2>{{$installedtitle}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="table-responsive section-content-tools-wrapper">
+ <table class="table table-responsive table-striped table-hover">
+ {{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>
+ </td>
+ <td style="width: 15%;">
+ <button class="btn btn-sm btn-primary pull-right" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-download'></i>&nbsp;{{$repoUpdateButton}}</button>
+ </td>
+ <td style="width: 15%;">
+ <button class="btn btn-sm btn-danger pull-right" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-trash-o'></i>&nbsp;{{$repoRemoveButton}}</button>
+ </td>
+ <div class="clear"></div>
+ </td></tr>
+ {{/foreach}}
+ </table>
+ </div>
+ <div class="clear"></div>
+ <div class="section-title-wrapper">
+ <h2>{{$addnewrepotitle}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{$form}}
+ </div>
+ <div class="clear"></div>
+ <div id="chat-rotator-wrapper" class="center-block">
+ <div id="chat-rotator"></div>
+ </div>
+ <div class="clear"></div>
+ <div class="section-content-wrapper-np">
+ {{foreach $plugins as $p}}
+ <div class="section-content-tools-wrapper" id="pluginslist">
+ <div class="contact-info plugin {{$p.1}}">
+ {{if ! $p.2.disabled}}
+ <a class='toggleplugin' href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}?a=t&amp;t={{$form_security_token}}' title="{{if $p.1==on}}Disable{{else}}Enable{{/if}}" ><i class='fa {{if $p.1==on}}fa-check-square-o{{else}}fa-square-o{{/if}} admin-icons'></i></a>
+ {{else}}
+ <i class='fa fa-stop admin-icons'></i>
+ {{/if}}
+ <a href='{{$baseurl}}/admin/{{$function}}/{{$p.0}}'><span class='name'>{{$p.2.name}}</span></a> - <span class="version">{{$p.2.version}}</span>{{if $p.2.disabled}} {{$disabled}}{{/if}}
+ {{if $p.2.experimental}} {{$experimental}} {{/if}}{{if $p.2.unsupported}} {{$unsupported}} {{/if}}
+
+ <div class='desc'>{{$p.2.description}}</div>
+ </div>
+ </div>
+ {{/foreach}}
+
+ </div>
+</div>
+{{$newRepoModal}}
+<script>
+
+ // TODO: Implement a simple interface controller that reconfigures the modal dialog
+ // for each action in a more organized way
+
+ function adminPluginsAddRepo() {
+ $("#generic-modal-ok-{{$newRepoModalID}}").removeClass('btn-success');
+ $("#generic-modal-ok-{{$newRepoModalID}}").addClass('btn-primary');
+ var repoURL = $('#id_repoURL').val();
+ var repoName = $('#id_repoName').val();
+ $('#chat-rotator').spin('tiny');
+ $.post(
+ "/admin/plugins/addrepo", {repoURL: repoURL, repoName: repoName},
+ function(response) {
+ $('#chat-rotator').spin(false);
+ if (response.success) {
+ var modalBody = $('#generic-modal-body-{{$newRepoModalID}}');
+ modalBody.html('<div>'+response.repo.readme+'</div>');
+ modalBody.append('<h2>Repo Info</h2><p>Message: ' + response.message + '</p>');
+ modalBody.append('<h4>Branches</h4><p>'+JSON.stringify(response.repo.branches)+'</p>');
+ modalBody.append('<h4>Remotes</h4><p>'+JSON.stringify(response.repo.remote)+'</p>');
+ $('.modal-dialog').width('80%');
+ $("#generic-modal-ok-{{$newRepoModalID}}").off('click');
+ $("#generic-modal-ok-{{$newRepoModalID}}").click(function () {
+ installAddonRepo();
+ });
+ $('#generic-modal-{{$newRepoModalID}}').modal();
+ } else {
+ window.console.log('Error adding repo :' + response['message']);
+ }
+ return false;
+ },
+ 'json');
+ }
+
+ function installAddonRepo() {
+ var repoURL = $('#id_repoURL').val();
+ var repoName = $('#id_repoName').val();
+ $.post(
+ "/admin/plugins/installrepo", {repoURL: repoURL, repoName: repoName},
+ function(response) {
+ if (response.success) {
+ $('#generic-modal-title-{{$newRepoModalID}}').html('Addon repo installed');
+ var modalBody = $('#generic-modal-body-{{$newRepoModalID}}');
+ modalBody.html('<h2>Repo Info</h2><p>Message: ' + response.message + '</p>');
+ modalBody.append('<h4>Branches</h4><p>'+JSON.stringify(response.repo.branches)+'</p>');
+ modalBody.append('<h4>Remotes</h4><p>'+JSON.stringify(response.repo.remote)+'</p>');
+ $('.modal-dialog').width('80%');
+ //$("#generic-modal-cancel-{{$newRepoModalID}}").hide();
+ $("#generic-modal-ok-{{$newRepoModalID}}").html('OK');
+ $("#generic-modal-ok-{{$newRepoModalID}}").removeClass('btn-primary');
+ $("#generic-modal-ok-{{$newRepoModalID}}").addClass('btn-success');
+ $("#generic-modal-ok-{{$newRepoModalID}}").off('click');
+ $("#generic-modal-ok-{{$newRepoModalID}}").click(function () {
+ $('#generic-modal-{{$newRepoModalID}}').modal('hide');
+ if(confirm('Repo installed. Click OK to refresh page.')) {
+ location.reload();
+ }
+ });
+ $('#generic-modal-{{$newRepoModalID}}').modal();
+
+ } else {
+ window.console.log('Error installing repo :' + response['message']);
+ alert('Error installing addon repo!');
+ }
+ return false;
+ },
+ 'json');
+ }
+ function updateAddonRepo(repoName) {
+ if(confirm('Are you sure you want to update the addon repo ' + repoName + '?')) {
+ $.post(
+ "/admin/plugins/updaterepo", {repoName: repoName},
+ function(response) {
+ if (response.success) {
+ window.console.log('Addon repo '+repoName+' successfully updated :' + response['message']);
+ //alert('Addon repo updated.');
+ $('#update-message-' + repoName).css('background-color', 'yellow');
+ $('#update-message-' + repoName).html('Repo updated!');
+ setTimeout(function () {
+ $('#update-message-' + repoName).html('');
+ }, 60000);
+ } else {
+ window.console.log('Error updating repo :' + response['message']);
+ //alert('Error updating addon repo!');
+ $('#update-message-' + repoName).css('background-color', 'red');
+ $('#update-message-' + repoName).html('Error updating repo!');
+ setTimeout(function () {
+ $('#update-message-' + repoName).html('');
+ }, 60000);
+ }
+ return false;
+ },
+ 'json');
+ }
+ }
+ function switchAddonRepoBranch(repoName) {
+ window.console.log('switchAddonRepoBranch: ' + repoName);
+ // TODO: Discover the available branches and create an interface to switch between them
+ }
+
+ function removeAddonRepo(repoName) {
+ // TODO: Unlink the addons
+ if(confirm('Are you sure you want to remove the addon repo ' + repoName + '?')) {
+ $.post(
+ "/admin/plugins/removerepo", {repoName: repoName},
+ function(response) {
+ if (response.success) {
+ window.console.log('Addon repo '+repoName+' successfully removed :' + response['message']);
+ if(confirm('Repo deleted. Click OK to refresh page.')) {
+ location.reload();
+ }
+ } else {
+ window.console.log('Error removing repo :' + response['message']);
+ alert('Error removing addon repo!');
+ }
+ return false;
+ },
+ 'json');
+ }
+ }
+
+</script> \ No newline at end of file
diff --git a/view/tpl/admin_plugins_addrepo.tpl b/view/tpl/admin_plugins_addrepo.tpl
new file mode 100644
index 000000000..de7b465bb
--- /dev/null
+++ b/view/tpl/admin_plugins_addrepo.tpl
@@ -0,0 +1,9 @@
+<form id="add-plugin-repo-form" action="{{$post}}" method="post" >
+
+ <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">
+ <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_plugins_details.tpl b/view/tpl/admin_plugins_details.tpl
new file mode 100755
index 000000000..309fc9569
--- /dev/null
+++ b/view/tpl/admin_plugins_details.tpl
@@ -0,0 +1,58 @@
+<div class = "generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <p>{{if ! $info.disabled}}<i class='toggleplugin fa {{if $status==on}}fa-check-square-o{{else}}fa-square-o{{/if}} admin-icons'></i>{{else}}<i class='fa fa-stop admin-icons'></i>{{/if}} {{$info.name}} - {{$info.version}}{{if ! $info.disabled}} : <a href="{{$baseurl}}/admin/{{$function}}/{{$plugin}}/?a=t&amp;t={{$form_security_token}}">{{$action}}</a>{{/if}}</p>
+
+ {{if $info.disabled}}
+ <p>{{$disabled}}</p>
+ {{/if}}
+
+ <p>{{$info.description}}</p>
+
+ {{foreach $info.author as $a}}
+ <p class="author">{{$str_author}}
+ {{$a.name}}{{if $a.link}} {{$a.link}}{{/if}}
+ </p>
+ {{/foreach}}
+
+ {{if $info.minversion}}
+ <p class="versionlimit">{{$str_minversion}}{{$info.minversion}}</p>
+ {{/if}}
+ {{if $info.maxversion}}
+ <p class="versionlimit">{{$str_maxversion}}{{$info.maxversion}}</p>
+ {{/if}}
+ {{if $info.minphpversion}}
+ <p class="versionlimit">{{$str_minphpversion}}{{$info.minphpversion}}</p>
+ {{/if}}
+ {{if $info.serverroles}}
+ <p class="versionlimit">{{$str_serverroles}}{{$info.serverroles}}</p>
+ {{/if}}
+ {{if $info.requires}}
+ <p class="versionlimit">{{$str_requires}}{{$info.requires}}</p>
+ {{/if}}
+
+
+ {{foreach $info.maintainer as $a}}
+ <p class="maintainer">{{$str_maintainer}}
+ {{$a.name}}{{if $a.link}} {{$a.link}}{{/if}}
+ </p>
+ {{/foreach}}
+
+ {{if $screenshot}}
+ <a href="{{$screenshot.0}}" class='screenshot'><img src="{{$screenshot.0}}" alt="{{$screenshot.1}}" /></a>
+ {{/if}}
+
+ {{if $admin_form}}
+ <h3>{{$settings}}</h3>
+ <form method="post" action="{{$baseurl}}/admin/{{$function}}/{{$plugin}}/">
+ {{$admin_form}}
+ </form>
+ {{/if}}
+
+ {{if $readme}}
+ <h3>Readme</h3>
+ <div id="plugin_readme">
+ {{$readme}}
+ </div>
+ {{/if}}
+</div>
diff --git a/view/tpl/admin_profiles.tpl b/view/tpl/admin_profiles.tpl
new file mode 100644
index 000000000..e3a08449c
--- /dev/null
+++ b/view/tpl/admin_profiles.tpl
@@ -0,0 +1,38 @@
+<div class="generic-content-wrapper">
+<div class="section-title-wrapper"><a title="{{$new}}" class="btn btn-primary btn-sm pull-right" href="admin/profs/new"><i class="fa fa-plus-circle"></i>&nbsp;{{$new}}</a><h2>{{$title}}</h2>
+<div class="clear"></div>
+</div>
+
+<div class="section-content-tools-wrapper">
+
+<div class="section-content-info-wrapper">{{$all_desc}}
+<br /><br />
+{{$all}}
+</div>
+
+<form action="admin/profs" method="post">
+
+{{include file="field_textarea.tpl" field=$basic}}
+{{include file="field_textarea.tpl" field=$advanced}}
+
+<input type="submit" name="submit" value="{{$submit}}" />
+
+</form>
+
+
+
+{{if $cust_fields}}
+<br /><br />
+<div><strong>{{$cust_field_desc}}</strong></div>
+<br />
+
+<table width="100%">
+{{foreach $cust_fields as $field}}
+<tr><td>{{$field.field_name}}</td><td>{{$field.field_desc}}</td><td><a class="btn btn-danger btn-sm" href="admin/profs/drop/{{$field.id}}" title="{{$drop}}"><i class="fa fa-trash-o"></i>&nbsp;{{$drop}}</a> <a class="btn btn-sm" title="{{$edit}}" href="admin/profs/{{$field.id}}" ><i class="fa fa-pencil"></i></a></td></tr>
+{{/foreach}}
+</table>
+{{/if}}
+
+</div>
+
+</div>
diff --git a/view/tpl/admin_queue.tpl b/view/tpl/admin_queue.tpl
new file mode 100644
index 000000000..9d3d848c9
--- /dev/null
+++ b/view/tpl/admin_queue.tpl
@@ -0,0 +1,15 @@
+<div class="generic-content-wrapper-styled">
+<h3>{{$banner}}</h3>
+
+{{if $hasentries}}
+
+<table cellpadding="10" id="admin-queue-table"><tr><td>{{$numentries}}&nbsp;&nbsp;</td><td>{{$desturl}}</td><td>{{$priority}}</td><td>&nbsp;</td><td>&nbsp;</td></tr>
+
+{{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>
+{{/foreach}}
+
+</table>
+
+{{/if}}
diff --git a/view/tpl/admin_security.tpl b/view/tpl/admin_security.tpl
new file mode 100755
index 000000000..409e9fc7d
--- /dev/null
+++ b/view/tpl/admin_security.tpl
@@ -0,0 +1,33 @@
+<div class="generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+
+ <form action="{{$baseurl}}/admin/security" method="post">
+
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+
+ {{include file="field_checkbox.tpl" field=$block_public}}
+ {{include file="field_checkbox.tpl" field=$transport_security}}
+ {{include file="field_checkbox.tpl" field=$content_security}}
+ {{include file="field_checkbox.tpl" field=$embed_sslonly}}
+
+ {{include file="field_textarea.tpl" field=$allowed_email}}
+ {{include file="field_textarea.tpl" field=$not_allowed_email}}
+
+ {{include file="field_textarea.tpl" field=$whitelisted_sites}}
+ {{include file="field_textarea.tpl" field=$blacklisted_sites}}
+
+ {{include file="field_textarea.tpl" field=$whitelisted_channels}}
+ {{include file="field_textarea.tpl" field=$blacklisted_channels}}
+
+ {{include file="field_textarea.tpl" field=$embed_allow}}
+ {{include file="field_textarea.tpl" field=$embed_deny}}
+
+
+ <div class="admin-submit-wrapper" >
+ <input type="submit" name="submit" class="admin-submit" value="{{$submit}}" />
+ </div>
+
+ </form>
+
+</div>
diff --git a/view/tpl/admin_settings_features.tpl b/view/tpl/admin_settings_features.tpl
new file mode 100644
index 000000000..2d5cf7e0b
--- /dev/null
+++ b/view/tpl/admin_settings_features.tpl
@@ -0,0 +1,31 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <form action="admin/features" method="post" autocomplete="off">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ <div class="panel-group" id="settings" role="tablist" aria-multiselectable="true">
+ {{foreach $features as $g => $f}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="{{$g}}-settings-title">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#{{$g}}-settings-content" 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'}} in{{/if}}" 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}}
+ {{include file="field_checkbox.tpl" field=$fcat.1}}
+ {{/foreach}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{/foreach}}
+ </div>
+</div>
diff --git a/view/tpl/admin_site.tpl b/view/tpl/admin_site.tpl
new file mode 100755
index 000000000..6fd0fd9ce
--- /dev/null
+++ b/view/tpl/admin_site.tpl
@@ -0,0 +1,101 @@
+<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();
+ $("#colorbox form").submit(function(e){
+ var url = $(this).attr('action');
+ // can't get .serialize() to work...
+ var data={};
+ $(this).find("input").each(function(){
+ data[$(this).attr('name')] = $(this).val();
+ });
+ $(this).find("select").each(function(){
+ data[$(this).attr('name')] = $(this).children(":selected").val();
+ });
+ console.log(":)", url, data);
+
+ $.post(url, data, function(data) {
+ if(timer) clearTimeout(timer);
+ NavUpdate();
+ $.colorbox.close();
+ })
+
+ return false;
+ });
+
+ }
+ });
+ });
+</script>
+<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}}'>
+
+ {{include file="field_input.tpl" field=$sitename}}
+ {{include file="field_select.tpl" field=$server_role}}
+
+ {{if $z_server_role == 'pro'}}
+ {{include file="field_select.tpl" field=$techlevel}}
+ {{include file="field_checkbox.tpl" field=$techlock}}
+ {{/if}}
+
+ {{include file="field_textarea.tpl" field=$banner}}
+ {{include file="field_textarea.tpl" field=$siteinfo}}
+ {{include file="field_textarea.tpl" field=$admininfo}}
+
+ {{include file="field_input.tpl" field=$reply_address}}
+ {{include file="field_input.tpl" field=$from_email}}
+ {{include file="field_input.tpl" field=$from_email_name}}
+
+ {{include file="field_select.tpl" field=$language}}
+ {{include file="field_select.tpl" field=$theme}}
+ {{include file="field_select.tpl" field=$theme_mobile}}
+ {{include file="field_input.tpl" field=$frontpage}}
+ {{include file="field_checkbox.tpl" field=$mirror_frontpage}}
+ {{include file="field_checkbox.tpl" field=$login_on_homepage}}
+ {{include file="field_checkbox.tpl" field=$enable_context_help}}
+ {{if $directory_server}}
+ {{include file="field_select.tpl" field=$directory_server}}
+ {{/if}}
+
+ <div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
+
+ <h3>{{$registration}}</h3>
+ {{include file="field_input.tpl" field=$register_text}}
+ {{include file="field_select.tpl" field=$register_policy}}
+ {{include file="field_checkbox.tpl" field=$invite_only}}
+ {{include file="field_select.tpl" field=$access_policy}}
+ <div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
+
+ <h3>{{$corporate}}</h3>
+ {{include file="field_checkbox.tpl" field=$verify_email}}
+ {{include file="field_checkbox.tpl" field=$feed_contacts}}
+ {{include file="field_checkbox.tpl" field=$force_publish}}
+ {{include file="field_checkbox.tpl" field=$disable_discover_tab}}
+
+ <div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
+
+ <h3>{{$advanced}}</h3>
+ {{include file="field_input.tpl" field=$proxy}}
+ {{include file="field_input.tpl" field=$proxyuser}}
+ {{include file="field_input.tpl" field=$timeout}}
+ {{include file="field_input.tpl" field=$delivery_interval}}
+ {{include file="field_input.tpl" field=$delivery_batch_count}}
+ {{include file="field_input.tpl" field=$poll_interval}}
+ {{include file="field_input.tpl" field=$maxloadavg}}
+ {{include file="field_input.tpl" field=$abandon_days}}
+ {{include file="field_input.tpl" field=$default_expire_days}}
+
+ <div class="submit"><input type="submit" name="page_site" value="{{$submit}}" /></div>
+
+ </form>
+</div>
diff --git a/view/tpl/admin_summary.tpl b/view/tpl/admin_summary.tpl
new file mode 100755
index 000000000..ca94b0ef7
--- /dev/null
+++ b/view/tpl/admin_summary.tpl
@@ -0,0 +1,43 @@
+<div class="generic-content-wrapper-styled" id='adminpage'>
+ <h1>{{$title}} - {{$page}}</h1>
+{{if $adminalertmsg}}
+ <p class="alert alert-warning" role="alert">{{$adminalertmsg}}</p>
+{{/if}}
+{{if $upgrade}}
+ <p class="alert alert-warning" role="alert">{{$upgrade}}</p>
+{{/if}}
+ <dl>
+ <dt>{{$queues.label}}</dt>
+ <dd>{{$queues.queue}}</dd>
+ </dl>
+ <dl>
+ <dt>{{$accounts.0}}</dt>
+ <dd>{{foreach from=$accounts.1 item=acc name=account}}<span title="{{$acc.label}}">{{$acc.val}}</span>{{if !$smarty.foreach.account.last}} / {{/if}}{{/foreach}}</dd>
+ </dl>
+ <dl>
+ <dt>{{$pending.0}}</dt>
+ <dd>{{$pending.1}}</dt>
+ </dl>
+ <dl>
+ <dt>{{$channels.0}}</dt>
+ <dd>{{foreach from=$channels.1 item=ch name=chan}}<span title="{{$ch.label}}">{{$ch.val}}</span>{{if !$smarty.foreach.chan.last}} / {{/if}}{{/foreach}}</dd>
+ </dl>
+ <dl>
+ <dt>{{$plugins.0}}</dt>
+ <dd>
+ {{foreach $plugins.1 as $p}} {{$p}} {{/foreach}}
+ </dd>
+ </dl>
+ <dl>
+ <dt>{{$version.0}}</dt>
+ <dd>{{$version.1}} - {{$build}}</dd>
+ </dl>
+ <dl>
+ <dt>{{$vmaster.0}}</dt>
+ <dd>{{$vmaster.1}}</dd>
+ </dl>
+ <dl>
+ <dt>{{$vdev.0}}</dt>
+ <dd>{{$vdev.1}}</dd>
+ </dl>
+</div> \ No newline at end of file
diff --git a/view/tpl/album_edit.tpl b/view/tpl/album_edit.tpl
new file mode 100755
index 000000000..f5495f149
--- /dev/null
+++ b/view/tpl/album_edit.tpl
@@ -0,0 +1,22 @@
+<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">
+ <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">
+ {{foreach $albums as $al}}
+ {{if $al.text}}
+ <option value="{{$al.text}}">
+ {{/if}}
+ {{/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>
+ </form>
+ <div id="photo-album-edit-end" class="clear"></div>
+</div>
+
+
diff --git a/view/tpl/alt_pager.tpl b/view/tpl/alt_pager.tpl
new file mode 100644
index 000000000..b46dc7662
--- /dev/null
+++ b/view/tpl/alt_pager.tpl
@@ -0,0 +1,4 @@
+<div class="pager">
+{{if $has_less}}<a href="{{$url}}&page={{$prevpage}}" class="pager-prev">{{$less}}</a>{{/if}}
+{{if $has_more}}{{if $has_less}}&nbsp;|&nbsp;{{/if}}<a href="{{$url}}&page={{$nextpage}}" class="pager-next">{{$more}}</a>{{/if}}
+</div>
diff --git a/view/tpl/api_config_xml.tpl b/view/tpl/api_config_xml.tpl
new file mode 100755
index 000000000..8c0766c73
--- /dev/null
+++ b/view/tpl/api_config_xml.tpl
@@ -0,0 +1,66 @@
+<config>
+ <site>
+ <name>{{$config.site.name}}</name>
+ <server>{{$config.site.server}}</server>
+ <theme>default</theme>
+ <path></path>
+ <logo>{{$config.site.logo}}</logo>
+
+ <fancy>true</fancy>
+ <language>en</language>
+ <email>{{$config.site.email}}</email>
+ <broughtby></broughtby>
+ <broughtbyurl></broughtbyurl>
+ <timezone>UTC</timezone>
+ <closed>{{$config.site.closed}}</closed>
+
+ <inviteonly>false</inviteonly>
+ <private>{{$config.site.private}}</private>
+ <textlimit>{{$config.site.textlimit}}</textlimit>
+ <ssl>{{$config.site.ssl}}</ssl>
+ <sslserver>{{$config.site.sslserver}}</sslserver>
+ <shorturllength>30</shorturllength>
+
+</site>
+ <license>
+ <type>cc</type>
+ <owner></owner>
+ <url>http://creativecommons.org/licenses/by/3.0/</url>
+ <title>Creative Commons Attribution 3.0</title>
+ <image>http://i.creativecommons.org/l/by/3.0/80x15.png</image>
+
+</license>
+ <nickname>
+ <featured></featured>
+</nickname>
+ <profile>
+ <biolimit></biolimit>
+</profile>
+ <group>
+ <desclimit></desclimit>
+</group>
+ <notice>
+
+ <contentlimit></contentlimit>
+</notice>
+ <throttle>
+ <enabled>false</enabled>
+ <count>20</count>
+ <timespan>600</timespan>
+</throttle>
+ <xmpp>
+
+ <enabled>false</enabled>
+ <server>INVALID SERVER</server>
+ <port>5222</port>
+ <user>update</user>
+</xmpp>
+ <integration>
+ <source>StatusNet</source>
+
+</integration>
+ <attachments>
+ <uploads>false</uploads>
+ <file_quota>0</file_quota>
+</attachments>
+</config>
diff --git a/view/tpl/api_friends_xml.tpl b/view/tpl/api_friends_xml.tpl
new file mode 100755
index 000000000..f2a7234d1
--- /dev/null
+++ b/view/tpl/api_friends_xml.tpl
@@ -0,0 +1,5 @@
+<users type="array">
+ {{foreach $users as $user}}
+ {{include file="api_user_xml.tpl"}}
+ {{/foreach}}
+</users>
diff --git a/view/tpl/api_ratelimit_xml.tpl b/view/tpl/api_ratelimit_xml.tpl
new file mode 100755
index 000000000..e4b470a25
--- /dev/null
+++ b/view/tpl/api_ratelimit_xml.tpl
@@ -0,0 +1,6 @@
+<hash>
+ <remaining-hits type="integer">{{$hash.remaining_hits}}</remaining-hits>
+ <hourly-limit type="integer">{{$hash.hourly_limit}}</hourly-limit>
+ <reset-time type="datetime">{{$hash.reset_time}}</reset-time>
+ <reset_time_in_seconds type="integer">{{$hash.resettime_in_seconds}}</reset_time_in_seconds>
+</hash>
diff --git a/view/tpl/api_status_xml.tpl b/view/tpl/api_status_xml.tpl
new file mode 100755
index 000000000..cbb736e22
--- /dev/null
+++ b/view/tpl/api_status_xml.tpl
@@ -0,0 +1,46 @@
+<status>{{if $status}}
+ <created_at>{{$status.created_at}}</created_at>
+ <id>{{$status.id}}</id>
+ <text>{{$status.text}}</text>
+ <source>{{$status.source}}</source>
+ <truncated>{{$status.truncated}}</truncated>
+ <in_reply_to_status_id>{{$status.in_reply_to_status_id}}</in_reply_to_status_id>
+ <in_reply_to_user_id>{{$status.in_reply_to_user_id}}</in_reply_to_user_id>
+ <favorited>{{$status.favorited}}</favorited>
+ <in_reply_to_screen_name>{{$status.in_reply_to_screen_name}}</in_reply_to_screen_name>
+ <geo>{{$status.geo}}</geo>
+ <coordinates>{{$status.coordinates}}</coordinates>
+ <place>{{$status.place}}</place>
+ <contributors>{{$status.contributors}}</contributors>
+ <user>
+ <id>{{$status.user.id}}</id>
+ <name>{{$status.user.name}}</name>
+ <screen_name>{{$status.user.screen_name}}</screen_name>
+ <location>{{$status.user.location}}</location>
+ <description>{{$status.user.description}}</description>
+ <profile_image_url>{{$status.user.profile_image_url}}</profile_image_url>
+ <url>{{$status.user.url}}</url>
+ <protected>{{$status.user.protected}}</protected>
+ <followers_count>{{$status.user.followers}}</followers_count>
+ <profile_background_color>{{$status.user.profile_background_color}}</profile_background_color>
+ <profile_text_color>{{$status.user.profile_text_color}}</profile_text_color>
+ <profile_link_color>{{$status.user.profile_link_color}}</profile_link_color>
+ <profile_sidebar_fill_color>{{$status.user.profile_sidebar_fill_color}}</profile_sidebar_fill_color>
+ <profile_sidebar_border_color>{{$status.user.profile_sidebar_border_color}}</profile_sidebar_border_color>
+ <friends_count>{{$status.user.friends_count}}</friends_count>
+ <created_at>{{$status.user.created_at}}</created_at>
+ <favourites_count>{{$status.user.favourites_count}}</favourites_count>
+ <utc_offset>{{$status.user.utc_offset}}</utc_offset>
+ <time_zone>{{$status.user.time_zone}}</time_zone>
+ <profile_background_image_url>{{$status.user.profile_background_image_url}}</profile_background_image_url>
+ <profile_background_tile>{{$status.user.profile_background_tile}}</profile_background_tile>
+ <profile_use_background_image>{{$status.user.profile_use_background_image}}</profile_use_background_image>
+ <notifications></notifications>
+ <geo_enabled>{{$status.user.geo_enabled}}</geo_enabled>
+ <verified>{{$status.user.verified}}</verified>
+ <following></following>
+ <statuses_count>{{$status.user.statuses_count}}</statuses_count>
+ <lang>{{$status.user.lang}}</lang>
+ <contributors_enabled>{{$status.user.contributors_enabled}}</contributors_enabled>
+ </user>
+{{/if}}</status>
diff --git a/view/tpl/api_test_xml.tpl b/view/tpl/api_test_xml.tpl
new file mode 100755
index 000000000..80a541c39
--- /dev/null
+++ b/view/tpl/api_test_xml.tpl
@@ -0,0 +1 @@
+<ok>{{$ok}}</ok>
diff --git a/view/tpl/api_timeline_atom.tpl b/view/tpl/api_timeline_atom.tpl
new file mode 100755
index 000000000..e8bfb689e
--- /dev/null
+++ b/view/tpl/api_timeline_atom.tpl
@@ -0,0 +1,90 @@
+<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:georss="http://www.georss.org/georss" xmlns:activity="http://activitystrea.ms/spec/1.0/" xmlns:media="http://purl.org/syndication/atommedia" xmlns:poco="http://portablecontacts.net/spec/1.0" xmlns:ostatus="http://ostatus.org/schema/1.0" xmlns:statusnet="http://status.net/schema/api/1/">
+ <generator uri="http://status.net" version="0.9.7">StatusNet</generator>
+ <id>{{$rss.self}}</id>
+ <title>Friendika</title>
+ <subtitle>Friendika API feed</subtitle>
+ <logo>{{$rss.logo}}</logo>
+ <updated>{{$rss.atom_updated}}</updated>
+ <link type="text/html" rel="alternate" href="{{$rss.alternate}}"/>
+ <link type="application/atom+xml" rel="self" href="{{$rss.self}}"/>
+
+
+ <author>
+ <activity:obj_type>http://activitystrea.ms/schema/1.0/person</activity:obj_type>
+ <uri>{{$user.url}}</uri>
+ <name>{{$user.name}}</name>
+ <link rel="alternate" type="text/html" href="{{$user.url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="106" media:height="106" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="{{$user.profile_image_url}}"/>
+ <georss:point></georss:point>
+ <poco:preferredUsername>{{$user.screen_name}}</poco:preferredUsername>
+ <poco:displayName>{{$user.name}}</poco:displayName>
+ <poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>{{$user.url}}</poco:value>
+ <poco:primary>true</poco:primary>
+ </poco:urls>
+ <statusnet:profile_info local_id="{{$user.id}}"></statusnet:profile_info>
+ </author>
+
+ <!--Deprecation warning: activity:subject is present only for backward compatibility. It will be removed in the next version of StatusNet.-->
+ <activity:subject>
+ <activity:obj_type>http://activitystrea.ms/schema/1.0/person</activity:obj_type>
+ <id>{{$user.contact_url}}</id>
+ <title>{{$user.name}}</title>
+ <link rel="alternate" type="text/html" href="{{$user.url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="106" media:height="106" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="96" media:height="96" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="{{$user.profile_image_url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="24" media:height="24" href="{{$user.profile_image_url}}"/>
+ <poco:preferredUsername>{{$user.screen_name}}</poco:preferredUsername>
+ <poco:displayName>{{$user.name}}</poco:displayName>
+ <poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>{{$user.url}}</poco:value>
+ <poco:primary>true</poco:primary>
+ </poco:urls>
+ <statusnet:profile_info local_id="{{$user.id}}"></statusnet:profile_info>
+ </activity:subject>
+
+
+ {{foreach $statuses as $status}}
+ <entry>
+ <activity:obj_type>{{$status.objecttype}}</activity:obj_type>
+ <id>{{$status.message_id}}</id>
+ <title>{{$status.text}}</title>
+ <content type="html">{{$status.statusnet_html}}</content>
+ <link rel="alternate" type="text/html" href="{{$status.url}}"/>
+ <activity:verb>{{$status.verb}}</activity:verb>
+ <published>{{$status.published}}</published>
+ <updated>{{$status.updated}}</updated>
+
+ <link rel="self" type="application/atom+xml" href="{{$status.self}}"/>
+ <link rel="edit" type="application/atom+xml" href="{{$status.edit}}"/>
+ <statusnet:notice_info local_id="{{$status.id}}" source="{{$status.source}}" >
+ </statusnet:notice_info>
+
+ <author>
+ <activity:obj_type>http://activitystrea.ms/schema/1.0/person</activity:obj_type>
+ <uri>{{$status.user.url}}</uri>
+ <name>{{$status.user.name}}</name>
+ <link rel="alternate" type="text/html" href="{{$status.user.url}}"/>
+ <link rel="avatar" type="image/jpeg" media:width="48" media:height="48" href="{{$status.user.profile_image_url}}"/>
+
+ <georss:point/>
+ <poco:preferredUsername>{{$status.user.screen_name}}</poco:preferredUsername>
+ <poco:displayName>{{$status.user.name}}</poco:displayName>
+ <poco:address/>
+ <poco:urls>
+ <poco:type>homepage</poco:type>
+ <poco:value>{{$status.user.url}}</poco:value>
+ <poco:primary>true</poco:primary>
+ </poco:urls>
+ </author>
+ <link rel="ostatus:conversation" type="text/html" href="{{$status.url}}"/>
+
+ </entry>
+ {{/foreach}}
+</feed>
diff --git a/view/tpl/api_timeline_rss.tpl b/view/tpl/api_timeline_rss.tpl
new file mode 100755
index 000000000..86c645e99
--- /dev/null
+++ b/view/tpl/api_timeline_rss.tpl
@@ -0,0 +1,26 @@
+<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:georss="http://www.georss.org/georss" xmlns:twitter="http://api.twitter.com">
+ <channel>
+ <title>Friendika</title>
+ <link>{{$rss.alternate}}</link>
+ <atom:link type="application/rss+xml" rel="self" href="{{$rss.self}}"/>
+ <description>Friendika timeline</description>
+ <language>{{$rss.language}}</language>
+ <ttl>40</ttl>
+ <image>
+ <link>{{$user.link}}</link>
+ <title>{{$user.name}}'s items</title>
+ <url>{{$user.profile_image_url}}</url>
+ </image>
+
+{{foreach $statuses as $status}}
+ <item>
+ <title>{{$status.user.name}}: {{$status.text}}</title>
+ <description>{{$status.text}}</description>
+ <pubDate>{{$status.created_at}}</pubDate>
+ <guid>{{$status.url}}</guid>
+ <link>{{$status.url}}</link>
+ <twitter:source>{{$status.source}}</twitter:source>
+ </item>
+{{/foreach}}
+ </channel>
+</rss>
diff --git a/view/tpl/api_timeline_xml.tpl b/view/tpl/api_timeline_xml.tpl
new file mode 100755
index 000000000..f14d73e9c
--- /dev/null
+++ b/view/tpl/api_timeline_xml.tpl
@@ -0,0 +1,20 @@
+<statuses type="array" xmlns:statusnet="http://status.net/schema/api/1/">
+{{foreach $statuses as $status}} <status>
+ <text>{{$status.text}}</text>
+ <truncated>{{$status.truncated}}</truncated>
+ <created_at>{{$status.created_at}}</created_at>
+ <in_reply_to_status_id>{{$status.in_reply_to_status_id}}</in_reply_to_status_id>
+ <source>{{$status.source}}</source>
+ <id>{{$status.id}}</id>
+ <in_reply_to_user_id>{{$status.in_reply_to_user_id}}</in_reply_to_user_id>
+ <in_reply_to_screen_name>{{$status.in_reply_to_screen_name}}</in_reply_to_screen_name>
+ <geo>{{$status.geo}}</geo>
+ <favorited>{{$status.favorited}}</favorited>
+{{include file="api_user_xml.tpl" user=$status.user}} <statusnet:html>{{$status.statusnet_html}}</statusnet:html>
+ <statusnet:conversation_id>{{$status.statusnet_conversation_id}}</statusnet:conversation_id>
+ <url>{{$status.url}}</url>
+ <coordinates>{{$status.coordinates}}</coordinates>
+ <place>{{$status.place}}</place>
+ <contributors>{{$status.contributors}}</contributors>
+ </status>
+{{/foreach}}</statuses>
diff --git a/view/tpl/api_user_xml.tpl b/view/tpl/api_user_xml.tpl
new file mode 100755
index 000000000..3b51992f6
--- /dev/null
+++ b/view/tpl/api_user_xml.tpl
@@ -0,0 +1,46 @@
+ <user>
+ <id>{{$user.id}}</id>
+ <name>{{$user.name}}</name>
+ <screen_name>{{$user.screen_name}}</screen_name>
+ <location>{{$user.location}}</location>
+ <description>{{$user.description}}</description>
+ <profile_image_url>{{$user.profile_image_url}}</profile_image_url>
+ <url>{{$user.url}}</url>
+ <protected>{{$user.protected}}</protected>
+ <followers_count>{{$user.followers_count}}</followers_count>
+ <friends_count>{{$user.friends_count}}</friends_count>
+ <created_at>{{$user.created_at}}</created_at>
+ <favourites_count>{{$user.favourites_count}}</favourites_count>
+ <utc_offset>{{$user.utc_offset}}</utc_offset>
+ <time_zone>{{$user.time_zone}}</time_zone>
+ <statuses_count>{{$user.statuses_count}}</statuses_count>
+ <following>{{$user.following}}</following>
+ <profile_background_color>{{$user.profile_background_color}}</profile_background_color>
+ <profile_text_color>{{$user.profile_text_color}}</profile_text_color>
+ <profile_link_color>{{$user.profile_link_color}}</profile_link_color>
+ <profile_sidebar_fill_color>{{$user.profile_sidebar_fill_color}}</profile_sidebar_fill_color>
+ <profile_sidebar_border_color>{{$user.profile_sidebar_border_color}}</profile_sidebar_border_color>
+ <profile_background_image_url>{{$user.profile_background_image_url}}</profile_background_image_url>
+ <profile_background_tile>{{$user.profile_background_tile}}</profile_background_tile>
+ <profile_use_background_image>{{$user.profile_use_background_image}}</profile_use_background_image>
+ <notifications>{{$user.notifications}}</notifications>
+ <geo_enabled>{{$user.geo_enabled}}</geo_enabled>
+ <verified>{{$user.verified}}</verified>
+ <lang>{{$user.lang}}</lang>
+ <contributors_enabled>{{$user.contributors_enabled}}</contributors_enabled>
+ <status>{{if $user.status}}
+ <created_at>{{$user.status.created_at}}</created_at>
+ <id>{{$user.status.id}}</id>
+ <text>{{$user.status.text}}</text>
+ <source>{{$user.status.source}}</source>
+ <truncated>{{$user.status.truncated}}</truncated>
+ <in_reply_to_status_id>{{$user.status.in_reply_to_status_id}}</in_reply_to_status_id>
+ <in_reply_to_user_id>{{$user.status.in_reply_to_user_id}}</in_reply_to_user_id>
+ <favorited>{{$user.status.favorited}}</favorited>
+ <in_reply_to_screen_name>{{$user.status.in_reply_to_screen_name}}</in_reply_to_screen_name>
+ <geo>{{$user.status.geo}}</geo>
+ <coordinates>{{$user.status.coordinates}}</coordinates>
+ <place>{{$user.status.place}}</place>
+ <contributors>{{$user.status.contributors}}</contributors>
+ {{/if}}</status>
+ </user>
diff --git a/view/tpl/app.tpl b/view/tpl/app.tpl
new file mode 100644
index 000000000..28f28611e
--- /dev/null
+++ b/view/tpl/app.tpl
@@ -0,0 +1,30 @@
+{{if !$navapps}}
+<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>
+ {{/if}}
+ {{if $install || $update || $delete || $feature}}
+ <div class="app-tools">
+ <form action="{{$hosturl}}appman" method="post">
+ <input type="hidden" name="papp" value="{{$app.papp}}" />
+ {{if $install}}<button type="submit" name="install" value="{{$install}}" class="btn btn-outline-secondary btn-sm" title="{{$install}}" ><i class="fa fa-arrow-circle-o-down" ></i></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-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-trash-o drop-icons"></i></button>{{/if}}
+ {{if $feature}}<button type="submit" name="feature" value="feature" class="btn btn-outline-secondary btn-sm" title="{{if $featured}}{{$remove}}{{else}}{{$add}}{{/if}}"><i class="fa fa-star"{{if $featured}} style="color: gold"{{/if}}></i></button>{{/if}}
+ </form>
+ </div>
+ {{/if}}
+ {{/if}}
+</div>
+{{else}}
+<a class="dropdown-item" 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}}
+
diff --git a/view/tpl/app_create.tpl b/view/tpl/app_create.tpl
new file mode 100644
index 000000000..5075ce5e2
--- /dev/null
+++ b/view/tpl/app_create.tpl
@@ -0,0 +1,40 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$banner}}</h2>
+ </div>
+
+ <div class="clearfix section-content-wrapper">
+ <form action="appman" method="post">
+ {{if $guid}}
+ <input type="hidden" name="guid" value="{{$guid}}" />
+ {{/if}}
+ {{if $author}}
+ <input type="hidden" name="author" value="{{$author}}" />
+ {{/if}}
+ {{if $addr}}
+ <input type="hidden" name="addr" value="{{$addr}}" />
+ {{/if}}
+
+ <input type="hidden" name="requires" value="{{$requires}}" />
+ <input type="hidden" name="system" value="{{$system}}" />
+ <input type="hidden" name="plugin" value="{{$plugin}}" />
+
+
+ {{include file="field_input.tpl" field=$name}}
+ {{include file="field_input.tpl" field=$categories}}
+ {{include file="field_input.tpl" field=$url}}
+ {{include file="field_textarea.tpl" field=$desc}}
+ {{include file="field_input.tpl" field=$photo}}
+ {{include file="field_input.tpl" field=$version}}
+ {{include file="field_input.tpl" field=$price}}
+ {{include file="field_input.tpl" field=$page}}
+
+ {{if $embed}}
+ {{include file="field_textarea.tpl" field=$embed}}
+ {{/if}}
+
+ <button class="btn btn-primary float-right" type="submit" name="submit" value="{{$submit}}">{{$submit}}</button>
+
+ </form>
+ </div>
+</div>
diff --git a/view/tpl/atom_feed.tpl b/view/tpl/atom_feed.tpl
new file mode 100755
index 000000000..ba50867ff
--- /dev/null
+++ b/view/tpl/atom_feed.tpl
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<feed xmlns="http://www.w3.org/2005/Atom"
+ xmlns:thr="http://purl.org/syndication/thread/1.0"
+ xmlns:at="http://purl.org/atompub/tombstones/1.0"
+ xmlns:media="http://purl.org/syndication/atommedia"
+ xmlns:dfrn="http://purl.org/macgirvin/dfrn/1.0"
+ xmlns:zot="http://purl.org/zot"
+ xmlns:as="http://activitystrea.ms/spec/1.0/"
+ xmlns:georss="http://www.georss.org/georss"
+ xmlns:poco="http://portablecontacts.net/spec/1.0"
+ xmlns:ostatus="http://ostatus.org/schema/1.0"
+ xmlns:statusnet="http://status.net/schema/api/1/" >
+
+ <id>{{$feed_id}}</id>
+ <title>{{$feed_title}}</title>
+ <generator uri="http://hubzilla.org" version="{{$version}}">{{$red}}</generator>
+ <link rel="license" href="http://creativecommons.org/licenses/by/3.0/" />
+ <link rel="alternate" type="text/html" href="{{$profile_page}}" />
+{{if $author}}
+{{$author}}
+{{/if}}
+
+ <updated>{{$feed_updated}}</updated>
+
+ <zot:owner>
+ <name>{{$name}}</name>
+ <uri>{{$profile_page}}</uri>
+ <link rel="photo" type="{{$mimephoto}}" media:width="175" media:height="175" href="{{$photo}}" />
+ <link rel="avatar" type="{{$mimephoto}}" media:width="175" media:height="175" href="{{$photo}}" />
+ </zot:owner>
diff --git a/view/tpl/attach_edit.tpl b/view/tpl/attach_edit.tpl
new file mode 100644
index 000000000..62442ff7a
--- /dev/null
+++ b/view/tpl/attach_edit.tpl
@@ -0,0 +1,31 @@
+<form id="attach_edit_form_{{$file.id}}" action="filestorage/{{$channelnick}}/{{$file.id}}/edit" method="post" class="acl-form" data-form_id="attach_edit_form_{{$file.id}}" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ <input type="hidden" name="channelnick" value="{{$channelnick}}" />
+ <input type="hidden" name="filehash" value="{{$file.hash}}" />
+ <input type="hidden" name="uid" value="{{$uid}}" />
+ <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">
+ {{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>
+ </a>
+ {{/if}}
+ <button id="link-btn" class="btn btn-outline-secondary btn-sm" type="button" onclick="openClose('link-code');" title="{{$link_btn_title}}">
+ <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">
+ <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">
+ <label for="">{{$cpldesc}}</label>
+ <input type="text" class="form-control" id="linkpasteinput" name="cutpasteextlink" value="{{$cloudpath}}" onclick="this.select();"/>
+ </div>
+</form>
+
diff --git a/view/tpl/birthdays_reminder.tpl b/view/tpl/birthdays_reminder.tpl
new file mode 100755
index 000000000..d0500364a
--- /dev/null
+++ b/view/tpl/birthdays_reminder.tpl
@@ -0,0 +1,10 @@
+{{if $count}}
+<div id="birthday-notice" class="birthday-notice fakelink {{$classtoday}}" onclick="openClose('birthday-wrapper');">{{$event_reminders}} ({{$count}})</div>
+<div id="birthday-wrapper" style="display: none;" ><div id="birthday-title">{{$event_title}}</div>
+<div id="birthday-title-end"></div>
+{{foreach $events as $event}}
+<div class="birthday-list" id="birthday-{{$event.id}}"></a> <a href="{{$event.link}}">{{$event.title}}</a> {{$event.date}} </div>
+{{/foreach}}
+</div>
+{{/if}}
+
diff --git a/view/tpl/blocklist.tpl b/view/tpl/blocklist.tpl
new file mode 100644
index 000000000..7f400bba2
--- /dev/null
+++ b/view/tpl/blocklist.tpl
@@ -0,0 +1,69 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $editor}}
+ <div class="pull-right">
+ <button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('block-editor');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
+ </div>
+ {{/if}}
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{if $editor}}
+ <div id="block-editor" class="section-content-tools-wrapper">
+ {{$editor}}
+ </div>
+ {{/if}}
+ {{if $pages}}
+ <div id="pagelist-content-wrapper" class="section-content-wrapper-np">
+ <table id="block-list-table">
+ <tr>
+ <th width="1%">{{$name}}</th>
+ <th width="94%">{{$blocktitle}}</th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%" class="d-none d-md-table-cell">{{$created}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$edited}}</th>
+ </tr>
+ {{foreach $pages as $key => $items}}
+ {{foreach $items as $item}}
+ <tr id="block-list-item-{{$item.url}}">
+ <td>
+ {{if $view}}
+ <a href="block/{{$channel}}/{{$item.name}}" title="{{$view}}">{{$item.name}}</a>
+ {{else}}
+ {{$item.name}}
+ {{/if}}
+ </td>
+ <td>
+ {{$item.title}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="fa fa-pencil"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $item.bb_element}}
+ <a href="rpost?attachment={{$item.bb_element}}" title="{{$share}}"><i class="fa fa-share-square-o"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="#" title="{{$delete}}" onclick="dropItem('item/drop/{{$item.url}}', '#block-list-item-{{$item.url}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ {{/if}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.created}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.edited}}
+ </td>
+ </tr>
+ {{/foreach}}
+ {{/foreach}}
+ </table>
+ </div>
+ <div class="clear"></div>
+ {{/if}}
+</div>
diff --git a/view/tpl/bookmarkedchats.tpl b/view/tpl/bookmarkedchats.tpl
new file mode 100644
index 000000000..3aabf835a
--- /dev/null
+++ b/view/tpl/bookmarkedchats.tpl
@@ -0,0 +1,10 @@
+{{if $rooms}}
+<div id="chatroom_bookmarks" class="widget">
+<h3>{{$header}}</h3>
+<ul class="bookmarkchat nav nav-pills nav-stacked">
+{{foreach $rooms as $room}}
+<li><a href="{{$room.xchat_url}}">{{$room.xchat_desc}}</a></li>
+{{/foreach}}
+</ul>
+</div>
+{{/if}}
diff --git a/view/tpl/build_query.tpl b/view/tpl/build_query.tpl
new file mode 100755
index 000000000..a76d4e549
--- /dev/null
+++ b/view/tpl/build_query.tpl
@@ -0,0 +1,65 @@
+<script>
+
+ var bParam_cmd = "{{$baseurl}}/update_{{$pgtype}}";
+
+
+ var bParam_uid = {{$uid}};
+ var bParam_gid = {{$gid}};
+ var bParam_cid = {{$cid}};
+ var bParam_cmin = {{$cmin}};
+ var bParam_cmax = {{$cmax}};
+ var bParam_star = {{$star}};
+ var bParam_liked = {{$liked}};
+ var bParam_conv = {{$conv}};
+ var bParam_spam = {{$spam}};
+ var bParam_new = {{$nouveau}};
+ var bParam_page = {{$page}};
+ var bParam_wall = {{$wall}};
+ var bParam_list = {{$list}};
+ var bParam_fh = {{$fh}};
+ var bParam_static = {{$static}};
+
+ var bParam_search = "{{$search}}";
+ var bParam_xchan = "{{$xchan}}";
+ var bParam_order = "{{$order}}";
+ var bParam_file = "{{$file}}";
+ var bParam_cats = "{{$cats}}";
+ var bParam_tags = "{{$tags}}";
+ var bParam_dend = "{{$dend}}";
+ var bParam_dbegin = "{{$dbegin}}";
+ var bParam_mid = "{{$mid}}";
+ var bParam_verb = "{{$verb}}";
+
+ function buildCmd() {
+ var udargs = ((page_load) ? "/load" : "");
+ var bCmd = bParam_cmd + udargs + "?f=" ;
+ if(bParam_uid) bCmd = bCmd + "&p=" + bParam_uid;
+ if(bParam_cmin != 0) bCmd = bCmd + "&cmin=" + bParam_cmin;
+ if(bParam_cmax != 99) bCmd = bCmd + "&cmax=" + bParam_cmax;
+ if(bParam_gid != 0) { bCmd = bCmd + "&gid=" + bParam_gid; } else
+ if(bParam_cid != 0) { bCmd = bCmd + "&cid=" + bParam_cid; }
+ if(bParam_static != 0) { bCmd = bCmd + "&static=" + bParam_static; }
+ if(bParam_star != 0) bCmd = bCmd + "&star=" + bParam_star;
+ if(bParam_liked != 0) bCmd = bCmd + "&liked=" + bParam_liked;
+ if(bParam_conv!= 0) bCmd = bCmd + "&conv=" + bParam_conv;
+ if(bParam_spam != 0) bCmd = bCmd + "&spam=" + bParam_spam;
+ if(bParam_new != 0) bCmd = bCmd + "&new=" + bParam_new;
+ if(bParam_wall != 0) bCmd = bCmd + "&wall=" + bParam_wall;
+ if(bParam_list != 0) bCmd = bCmd + "&list=" + bParam_list;
+ if(bParam_fh != 0) bCmd = bCmd + "&fh=" + bParam_fh;
+ if(bParam_search != "") bCmd = bCmd + "&search=" + bParam_search;
+ if(bParam_xchan != "") bCmd = bCmd + "&xchan=" + bParam_xchan;
+ if(bParam_order != "") bCmd = bCmd + "&order=" + bParam_order;
+ if(bParam_file != "") bCmd = bCmd + "&file=" + bParam_file;
+ if(bParam_cats != "") bCmd = bCmd + "&cat=" + bParam_cats;
+ if(bParam_tags != "") bCmd = bCmd + "&tag=" + bParam_tags;
+ if(bParam_dend != "") bCmd = bCmd + "&dend=" + bParam_dend;
+ if(bParam_dbegin != "") bCmd = bCmd + "&dbegin=" + bParam_dbegin;
+ if(bParam_mid != "") bCmd = bCmd + "&mid=" + bParam_mid;
+ if(bParam_verb != "") bCmd = bCmd + "&verb=" + bParam_verb;
+ if(bParam_page != 1) bCmd = bCmd + "&page=" + bParam_page;
+ return(bCmd);
+ }
+
+</script>
+
diff --git a/view/tpl/categories_widget.tpl b/view/tpl/categories_widget.tpl
new file mode 100755
index 000000000..72478aa3d
--- /dev/null
+++ b/view/tpl/categories_widget.tpl
@@ -0,0 +1,12 @@
+<div id="categories-sidebar" class="widget">
+ <h3>{{$title}}</h3>
+ <div id="categories-sidebar-desc">{{$desc}}</div>
+
+ <ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a href="{{$base}}" class="nav-link{{if $sel_all}} active{{/if}}">{{$all}}</a></li>
+ {{foreach $terms as $term}}
+ <li class="nav-item"><a href="{{$base}}?f=&cat={{$term.name}}" class="nav-link{{if $term.selected}} active{{/if}}">{{$term.name}}</a></li>
+ {{/foreach}}
+ </ul>
+
+</div>
diff --git a/view/tpl/cdav_addressbook.tpl b/view/tpl/cdav_addressbook.tpl
new file mode 100644
index 000000000..587a95caa
--- /dev/null
+++ b/view/tpl/cdav_addressbook.tpl
@@ -0,0 +1,462 @@
+<script>
+$(document).ready(function() {
+
+ $(document).on('click', '.vcard-header, .vcard-cancel-btn', updateView);
+ $(document).on('click', '.add-field', doAdd);
+ $(document).on('click', '.remove-field', doRemove);
+
+ function updateView() {
+ var id = $(this).data('id');
+ var action = $(this).data('action');
+ var header = $('#vcard-header-' + id);
+ var cancel = $('#vcard-cancel-' + id);
+ var addField = $('#vcard-add-field-' + id);
+ var info = $('#vcard-info-' + id);
+ var vcardPreview = $('#vcard-preview-' + id);
+ var fn = $('#vcard-fn-' + id);
+
+ if(action === 'open') {
+ $(header).addClass('active');
+ $(cancel).show();
+ $(addField).show();
+ $(info).show();
+ $(fn).show();
+ $(vcardPreview).hide();
+ }
+ else {
+ $(header).removeClass('active');
+ $(cancel).hide();
+ $(addField).hide();
+ $(info).hide();
+ $(fn).hide();
+ $(vcardPreview).show();
+ }
+ }
+
+ function doAdd(e) {
+ e.preventDefault();
+ var what = $(this).data('add');
+ var id = $(this).data('id');
+ var element = '#template-form-' + what;
+ var where = '#card_form_' + id;
+
+ $(element + ' .remove-field').attr('data-id', id)
+
+ if(what === 'vcard-adr') {
+ var adrCount = $(where + ' .form-' + what).length;
+ var attrName = 'adr[' + adrCount + '][]';
+ $(element + ' input').attr('name', attrName);
+ }
+
+ if(what === 'vcard-org' || what === 'vcard-title' || what === 'vcard-note') {
+ $(where + ' .add-' + what).hide()
+ }
+
+ $(element).clone().removeAttr('id').appendTo(where + ' .form-' + what + '-wrapper');
+ }
+
+ function doRemove() {
+ var what = $(this).data('remove');
+ var element = $(this).parents('div.form-' + what);
+ var where = '#card_form_' + $(this).data('id');
+
+ if(what === 'vcard-org' || what === 'vcard-title' || what === 'vcard-note') {
+ $(where + ' .add-' + what).show()
+ }
+
+ $(element).remove();
+ }
+
+});
+</script>
+<div id="template-form-vcard-org" class="form-group form-vcard-org">
+ <div class="form-group 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">
+ <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">
+ <select name="tel_type[]">
+ <option value="CELL">{{$mobile}}</option>
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="" placeholder="{{$tel_label}}">
+ <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">
+ <select name="email_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="" placeholder="{{$email_label}}">
+ <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">
+ <select name="impp_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="" placeholder="{{$impp_label}}">
+ <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">
+ <select name="url_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="url[]" value="" placeholder="{{$url_label}}">
+ <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">
+ <select name="adr_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <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">
+ <input type="text" name="" value="" placeholder="{{$po_box}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$extra}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$street}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$locality}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$region}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$zip_code}}">
+ </div>
+ <div class="form-group">
+ <input type="text" name="" value="" placeholder="{{$country}}">
+ </div>
+</div>
+
+<div id="template-form-vcard-note" class="form-group 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>
+</div>
+
+<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>
+ <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">
+ <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>
+ <a class="dropdown-item add-vcard-email add-field" href="#" data-add="vcard-email" data-id="new">{{$email_label}}</a>
+ <a class="dropdown-item add-vcard-impp add-field" href="#" data-add="vcard-impp" data-id="new">{{$impp_label}}</a>
+ <a class="dropdown-item add-vcard-url add-field" href="#" data-add="vcard-url" data-id="new">{{$url_label}}</a>
+ <a class="dropdown-item add-vcard-adr add-field" href="#" data-add="vcard-adr" data-id="new">{{$adr_label}}</a>
+ <a class="dropdown-item add-vcard-note add-field" href="#" data-add="vcard-note" data-id="new">{{$note_label}}</a>
+ </div>
+ </div>
+
+ <div class="vcard-fn-create form-group">
+ <div class="form-vcard-fn-wrapper">
+ <div class="form-group 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="form-vcard-org-wrapper">
+ <div class="form-group 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="form-vcard-title-wrapper">
+ <div class="form-group 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="form-vcard-tel-wrapper">
+ <div class="form-group form-vcard-tel">
+ <select name="tel_type[]">
+ <option value="CELL">{{$mobile}}</option>
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="" placeholder="{{$tel_label}}">
+ <i data-remove="vcard-tel" data-id="new" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ </div>
+ </div>
+
+
+ <div class="vcard-email form-group">
+ <div class="form-vcard-email-wrapper">
+ <div class="form-group form-vcard-email">
+ <select name="email_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="" placeholder="{{$email_label}}">
+ <i data-remove="vcard-email" data-id="new" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ </div>
+ </div>
+
+ <div class="vcard-impp form-group">
+ <div class="form-vcard-impp-wrapper">
+ </div>
+ </div>
+
+ <div class="vcard-url form-group">
+ <div class="form-vcard-url-wrapper">
+ </div>
+ </div>
+
+ <div class="vcard-adr form-group">
+ <div class="form-vcard-adr-wrapper">
+ </div>
+ </div>
+
+ <div class="vcard-note form-group">
+ <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="button" class="btn btn-outline-secondary btn-sm" onclick="openClose('create_form')">{{$cancel}}</button>
+ <div class="clear"></div>
+ </form>
+ </div>
+
+ {{foreach $cards as $card}}
+ <form id="card_form_{{$card.id}}" method="post" action="">
+ <input type="hidden" name="target" value="{{$id}}">
+ <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">
+ <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>
+ <a class="dropdown-item add-vcard-email add-field" href="#" data-add="vcard-email" data-id="{{$card.id}}">{{$email_label}}</a>
+ <a class="dropdown-item add-vcard-impp add-field" href="#" data-add="vcard-impp" data-id="{{$card.id}}">{{$impp_label}}</a>
+ <a class="dropdown-item add-vcard-url add-field" href="#" data-add="vcard-url" data-id="{{$card.id}}">{{$url_label}}</a>
+ <a class="dropdown-item add-vcard-adr add-field" href="#" data-add="vcard-adr" data-id="{{$card.id}}">{{$adr_label}}</a>
+ <a class="dropdown-item add-vcard-note add-field"{{if $card.note}} style="display: none"{{/if}} href="#" data-add="vcard-note" data-id="{{$card.id}}">{{$note_label}}</a>
+ </div>
+ </div>
+ <div id="vcard-header-{{$card.id}}" class="vcard-header" data-id="{{$card.id}}" data-action="open">
+ {{if $card.photo}}<img class="vcard-photo" src="{{$card.photo}}" width="32px" height="32px">{{else}}<div class="vcard-nophoto"><i class="fa fa-user"></i></div>{{/if}}
+ <span id="vcard-preview-{{$card.id}}" class="vcard-preview">
+ {{if $card.fn}}<span class="vcard-fn-preview">{{$card.fn}}</span>{{/if}}
+ {{if $card.emails.0.address}}<span class="vcard-email-preview hidden-xs">{{$card.emails.0.address}}</span>{{/if}}
+ {{if $card.tels.0}}<span class="vcard-tel-preview hidden-xs">{{$card.tels.0.nr}}</span>{{/if}}
+ </span>
+ <input id="vcard-fn-{{$card.id}}" class="vcard-fn" type="text" name="fn" value="{{$card.fn}}" size="{{$card.fn|count_characters:true}}" placeholder="{{$name_label}}">
+ </div>
+ </div>
+ <div id="vcard-info-{{$card.id}}" class="vcard-info section-content-wrapper">
+
+ <div class="vcard-org form-group">
+ <div class="form-vcard-org-wrapper">
+ {{if $card.org}}
+ <div class="form-group 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>
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-title form-group">
+ <div class="form-vcard-title-wrapper">
+ {{if $card.title}}
+ <div class="form-group 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>
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="vcard-tel form-group">
+ <div class="form-vcard-tel-wrapper">
+ {{if $card.tels}}
+ {{foreach $card.tels as $tel}}
+ <div class="form-group 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>
+ <option value="HOME"{{if $tel.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
+ <option value="WORK"{{if $tel.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $tel.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="{{$tel.nr}}" size="{{$tel.nr|count_characters:true}}" placeholder="{{$tel_label}}">
+ <i data-remove="vcard-tel" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="vcard-email form-group">
+ <div class="form-vcard-email-wrapper">
+ {{if $card.emails}}
+ {{foreach $card.emails as $email}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $email.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $email.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="{{$email.address}}" size="{{$email.address|count_characters:true}}" placeholder="{{$email_label}}">
+ <i data-remove="vcard-email" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-impp form-group">
+ <div class="form-vcard-impp-wrapper">
+ {{if $card.impps}}
+ {{foreach $card.impps as $impp}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $impp.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $impp.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="{{$impp.address}}" size="{{$impp.address|count_characters:true}}" placeholder="{{$impp_label}}">
+ <i data-remove="vcard-impp" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-url form-group">
+ <div class="form-vcard-url-wrapper">
+ {{if $card.urls}}
+ {{foreach $card.urls as $url}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $url.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $url.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="url[]" value="{{$url.address}}" size="{{$url.address|count_characters:true}}" placeholder="{{$url_label}}">
+ <i data-remove="vcard-url" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-adr form-group">
+ <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">
+ <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>
+ <option value="HOME"{{if $adr.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
+ <option value="WORK"{{if $adr.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $adr.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <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">
+ <input type="text" name="adr[{{$adr@index}}][]" value="{{$adr.address.6}}" size="{{$adr.address.6|count_characters:true}}" placeholder="{{$country}}">
+ </div>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-note form-group form-vcard-note">
+ <div class="form-vcard-note-wrapper">
+ {{if $card.note}}
+ <label>{{$note_label}}</label>
+ <i data-remove="vcard-note" data-id="{{$card.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ <textarea name="note" class="form-control">{{$card.note}}</textarea>
+ {{/if}}
+ </div>
+ </div>
+
+
+ <button type="submit" name="update" value="update_card" class="btn btn-primary btn-sm pull-right">{{$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>
+ </div>
+ </form>
+ {{/foreach}}
+</div>
diff --git a/view/tpl/cdav_calendar.tpl b/view/tpl/cdav_calendar.tpl
new file mode 100644
index 000000000..5d683d751
--- /dev/null
+++ b/view/tpl/cdav_calendar.tpl
@@ -0,0 +1,349 @@
+<script>
+
+var new_event = [];
+var new_event_id = Math.random().toString(36).substring(7);
+var views = {'month' : '{{$month}}', 'agendaWeek' : '{{$week}}', 'agendaDay' : '{{$day}}', 'listMonth' : '{{$list_month}}', 'listWeek' : '{{$list_week}}', 'listDay' : '{{$list_day}}'};
+
+$(document).ready(function() {
+ $('#calendar').fullCalendar({
+ eventSources: [ {{$sources}} ],
+
+ header: false,
+ eventTextColor: 'white',
+
+ lang: '{{$lang}}',
+ firstDay: {{$first_day}},
+
+ monthNames: aStr['monthNames'],
+ monthNamesShort: aStr['monthNamesShort'],
+ dayNames: aStr['dayNames'],
+ dayNamesShort: aStr['dayNamesShort'],
+ allDayText: aStr['allday'],
+
+ timeFormat: 'HH:mm',
+ timezone: 'local',
+
+ defaultTimedEventDuration: '01:00:00',
+ snapDuration: '00:15:00',
+
+ dayClick: function(date, jsEvent, view) {
+
+ if(new_event.length)
+ $('#calendar').fullCalendar( 'removeEventSource', new_event);
+
+ $('#event_uri').val('');
+ $('#id_title').val('New event');
+ $('#calendar_select').val($("#calendar_select option:first").val()).attr('disabled', false);
+ $('#id_dtstart').val(date.format());
+ $('#id_dtend').val(date.hasTime() ? date.add(1, 'hours').format() : date.add(1, 'days').format());
+ $('#id_description').val('');
+ $('#id_location').val('');
+ $('#event_submit').val('create_event').html('Create');
+ $('#event_delete').hide();
+
+ new_event = [{ id: new_event_id, title : 'New event', start: $('#id_dtstart').val(), end: $('#id_dtend').val(), editable: true, color: '#bbb' }]
+ $('#calendar').fullCalendar( 'addEventSource', new_event);
+ },
+
+ eventClick: function(event, jsEvent, view) {
+
+ if(event.id == new_event_id) {
+ $(window).scrollTop(0);
+ $('.section-content-tools-wrapper, #event_form_wrapper').show();
+ $('#recurrence_warning').hide();
+ $('#id_title').focus().val('');
+ return false;
+ }
+
+ if($('main').hasClass('fullscreen') && view.type !== 'month' && event.rw)
+ $('#calendar').fullCalendar('option', 'height', 'auto');
+
+ if(new_event.length && event.rw) {
+ $('#calendar').fullCalendar( 'removeEventSource', new_event);
+ }
+
+ if(!event.recurrent && event.rw) {
+ var start_clone = moment(event.start);
+ var noend_allday = start_clone.add(1, 'day').format('YYYY-MM-DD');
+
+ $(window).scrollTop(0);
+ $('.section-content-tools-wrapper, #event_form_wrapper').show();
+ $('#recurrence_warning').hide();
+ $('#id_title').focus();
+
+ $('#event_uri').val(event.uri);
+ $('#id_title').val(event.title);
+ $('#calendar_select').val(event.calendar_id[0] + ':' + event.calendar_id[1]).attr('disabled', true);
+ $('#id_dtstart').val(event.start.format());
+ $('#id_dtend').val(event.end ? event.end.format() : event.start.hasTime() ? '' : noend_allday);
+ $('#id_description').val(event.description);
+ $('#id_location').val(event.location);
+ $('#event_submit').val('update_event').html('Update');
+ $('#event_delete').show();
+ }
+ else if(event.recurrent && event.rw) {
+ $('.section-content-tools-wrapper, #recurrence_warning').show();
+ $('#event_form_wrapper').hide();
+ $('#event_uri').val(event.uri);
+ $('#calendar_select').val(event.calendar_id[0] + ':' + event.calendar_id[1]).attr('disabled', true);
+ }
+ },
+
+ eventResize: function(event, delta, revertFunc) {
+
+ $('#id_title').val(event.title);
+ $('#id_dtstart').val(event.start.format());
+ $('#id_dtend').val(event.end.format());
+
+ $.post( 'cdav/calendar', {
+ 'update': 'resize',
+ 'id[]': event.calendar_id,
+ 'uri': event.uri,
+ 'dtstart': event.start ? event.start.format() : '',
+ 'dtend': event.end ? event.end.format() : ''
+ })
+ .fail(function() {
+ revertFunc();
+ });
+ },
+
+ eventDrop: function(event, delta, revertFunc) {
+
+ var start_clone = moment(event.start);
+ var noend_allday = start_clone.add(1, 'day').format('YYYY-MM-DD');
+
+ $('#id_title').val(event.title);
+ $('#id_dtstart').val(event.start.format());
+ $('#id_dtend').val(event.end ? event.end.format() : event.start.hasTime() ? '' : noend_allday);
+
+ $.post( 'cdav/calendar', {
+ 'update': 'drop',
+ 'id[]': event.calendar_id,
+ 'uri': event.uri,
+ 'dtstart': event.start ? event.start.format() : '',
+ 'dtend': event.end ? event.end.format() : event.start.hasTime() ? '' : noend_allday
+ })
+ .fail(function() {
+ revertFunc();
+ });
+ },
+
+ loading: function(isLoading, view) {
+ $('#events-spinner').spin('tiny');
+ $('#events-spinner > i').css('color', 'transparent');
+ if(!isLoading) {
+ $('#events-spinner').spin(false);
+ $('#events-spinner > i').css('color', '');
+ }
+ }
+ });
+
+ // echo the title
+ var view = $('#calendar').fullCalendar('getView');
+
+ $('#title').text(view.title);
+
+ $('#view_selector').html(views[view.name]);
+
+ $('.color-edit').colorpicker({ input: '.color-edit-input' });
+
+ $(document).on('click','#fullscreen-btn', on_fullscreen);
+ $(document).on('click','#inline-btn', on_inline);
+
+ $(document).on('click','#event_submit', on_submit);
+ $(document).on('click','#event_more', on_more);
+ $(document).on('click','#event_cancel, #event_cancel_recurrent', reset_form);
+ $(document).on('click','#event_delete, #event_delete_recurrent', on_delete);
+
+});
+
+function changeView(action, viewName) {
+ $('#calendar').fullCalendar(action, viewName);
+ var view = $('#calendar').fullCalendar('getView');
+
+ if($('main').hasClass('fullscreen'))
+ if(view.name !== 'month')
+ $('.section-content-tools-wrapper').css('display') === 'none' ? on_fullscreen() : on_inline() ;
+ else
+ on_fullscreen();
+ else
+ on_inline();
+
+ $('#title').text(view.title);
+ $('#view_selector').html(views[view.name]);
+}
+
+function add_remove_json_source(source, color, editable, status) {
+
+ if(status === undefined)
+ status = 'fa-calendar-check-o';
+
+ if(status === 'drop') {
+ reset_form();
+ $('#calendar').fullCalendar( 'removeEventSource', source );
+ return;
+ }
+
+ var parts = source.split('/');
+ var id = parts[4];
+
+ var selector = '#calendar-btn-' + id;
+
+ if($(selector).hasClass('fa-calendar-o')) {
+ $('#calendar').fullCalendar( 'addEventSource', { url: source, color: color, editable: editable });
+ $(selector).removeClass('fa-calendar-o');
+ $(selector).addClass(status);
+ $.get('/cdav/calendar/switch/' + id + '/1');
+ }
+ else {
+ $('#calendar').fullCalendar( 'removeEventSource', source );
+ $(selector).removeClass(status);
+ $(selector).addClass('fa-calendar-o');
+ $.get('/cdav/calendar/switch/' + id + '/0');
+ }
+}
+
+function on_fullscreen() {
+ var view = $('#calendar').fullCalendar('getView');
+ if(($('.section-content-tools-wrapper').css('display') === 'none') || ($('.section-content-tools-wrapper').css('display') !== 'none' && view.type === 'month'))
+ $('#calendar').fullCalendar('option', 'height', $(window).height() - $('.section-title-wrapper').outerHeight(true) - 2); // -2 is for border width (.generic-content-wrapper top and bottom) of .generic-content-wrapper
+}
+
+function on_inline() {
+ var view = $('#calendar').fullCalendar('getView');
+ ((view.type === 'month') ? $('#calendar').fullCalendar('option', 'height', '') : $('#calendar').fullCalendar('option', 'height', 'auto'));
+}
+
+function on_submit() {
+ $.post( 'cdav/calendar', {
+ 'submit': $('#event_submit').val(),
+ 'target': $('#calendar_select').val(),
+ 'uri': $('#event_uri').val(),
+ 'title': $('#id_title').val(),
+ 'dtstart': $('#id_dtstart').val(),
+ 'dtend': $('#id_dtend').val(),
+ 'description': $('#id_description').val(),
+ 'location': $('#id_location').val()
+ })
+ .done(function() {
+ $('#calendar').fullCalendar( 'refetchEventSources', [ {{$sources}} ] );
+ reset_form();
+ });
+}
+
+function on_delete() {
+ $.post( 'cdav/calendar', {
+ 'delete': 'delete',
+ 'target': $('#calendar_select').val(),
+ 'uri': $('#event_uri').val(),
+ })
+ .done(function() {
+ $('#calendar').fullCalendar( 'refetchEventSources', [ {{$sources}} ] );
+ reset_form();
+ });
+}
+
+function reset_form() {
+ $('.section-content-tools-wrapper, #event_form_wrapper, #recurrence_warning').hide();
+
+ $('#event_submit').val('');
+ $('#calendar_select').val('');
+ $('#event_uri').val('');
+ $('#id_title').val('');
+ $('#id_dtstart').val('');
+ $('#id_dtend').val('');
+
+ if(new_event.length)
+ $('#calendar').fullCalendar( 'removeEventSource', new_event);
+
+ if($('#more_block').hasClass('open'))
+ on_more();
+
+ if($('main').hasClass('fullscreen'))
+ on_fullscreen();
+}
+
+function on_more() {
+ if($('#more_block').hasClass('open')) {
+ $('#event_more').html('<i class="fa fa-caret-down"></i> {{$more}}');
+ $('#more_block').removeClass('open').hide();
+ }
+ else {
+ $('#event_more').html('<i class="fa fa-caret-up"></i> {{$less}}');
+ $('#more_block').addClass('open').show();
+ }
+}
+
+</script>
+
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="float-right">
+ <div class="dropdown">
+ <button id="view_selector" type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown"></button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'month'); return false;">{{$month}}</a></li>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'agendaWeek'); return false;">{{$week}}</a></li>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'agendaDay'); return false;">{{$day}}</a></li>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'listMonth'); return false;">{{$list_month}}</a></li>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'listWeek'); return false;">{{$list_week}}</a></li>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'listDay'); return false;">{{$list_day}}</a></li>
+ </div>
+ <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="events-spinner" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><i class="fa fa-bullseye"></i></button>
+ <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="fa fa-forward"></i></button>
+ </div>
+ <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>
+ </div>
+ <h2 id="title"></h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-tools-wrapper" style="display: none">
+ <div id="recurrence_warning" style="display: none">
+ <div class="section-content-warning-wrapper">
+ {{$recurrence_warning}}
+ </div>
+ <div>
+ <button id="event_delete_recurrent" type="button" class="btn btn-danger btn-sm">{{$delete_all}}</button>
+ <button id="event_cancel_recurrent" type="button" class="btn btn-outline-secondary btn-sm">{{$cancel}}</button>
+ </div>
+ </div>
+ <div id="event_form_wrapper" style="display: none">
+ <form id="event_form" method="post" action="">
+ <input id="event_uri" type="hidden" name="uri" value="">
+ {{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">
+ {{foreach $writable_calendars as $writable_calendar}}
+ <option value="{{$writable_calendar.id.0}}:{{$writable_calendar.id.1}}">{{$writable_calendar.displayname}}{{if $writable_calendar.sharer}} ({{$writable_calendar.sharer}}){{/if}}</option>
+ {{/foreach}}
+ </select>
+ <div id="more_block" style="display: none;">
+ {{include file="field_input.tpl" field=$dtstart}}
+ {{include file="field_input.tpl" field=$dtend}}
+ {{include file="field_textarea.tpl" field=$description}}
+ {{include file="field_textarea.tpl" field=$location}}
+ </div>
+ <div class="form-group">
+ <div class="pull-right">
+ <button id="event_more" type="button" class="btn btn-outline-secondary btn-sm"><i class="fa fa-caret-down"></i> {{$more}}</button>
+ <button id="event_submit" type="button" value="" class="btn btn-primary btn-sm"></button>
+
+ </div>
+ <div>
+ <button id="event_delete" type="button" class="btn btn-danger btn-sm">{{$delete}}</button>
+ <button id="event_cancel" type="button" class="btn btn-outline-secondary btn-sm">{{$cancel}}</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </form>
+ </div>
+ </div>
+ <div class="section-content-wrapper-np">
+ <div id="calendar"></div>
+ </div>
+</div>
diff --git a/view/tpl/cdav_widget_addressbook.tpl b/view/tpl/cdav_widget_addressbook.tpl
new file mode 100644
index 000000000..c875dc977
--- /dev/null
+++ b/view/tpl/cdav_widget_addressbook.tpl
@@ -0,0 +1,66 @@
+<div class="widget">
+ <h3>{{$addressbooks_label}}</h3>
+ {{foreach $addressbooks as $addressbook}}
+ <div id="addressbook-{{$addressbook.id}}" class="ml-3">
+ <div class="form-group">
+ <i class="fa fa-user generic-icons"></i><a href="/cdav/addressbook/{{$addressbook.id}}">{{$addressbook.displayname}}</a>
+ <div class="float-right">
+ <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>
+ </div>
+ </div>
+ <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">
+ <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">
+ <button type="submit" name="edit" value="edit" class="btn btn-primary btn-sm">{{$edit}}</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ {{/foreach}}
+</div>
+
+<div class="widget">
+ <h3>{{$tools_label}}</h3>
+ <ul class="nav nav-pills flex-column">
+ <li class="nav-item">
+ <a class="nav-link" href="#" onclick="openClose('create-addressbook'); return false;"><i class="fa fa-user-plus generic-icons"></i> {{$create_label}}</a>
+ </li>
+ <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">
+ <button type="submit" name="create" value="create" class="btn btn-primary btn-sm">{{$create}}</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ <li class="nav-item">
+ <a class="nav-link" href="#" onclick="openClose('upload-form'); return false;"><i class="fa fa-cloud-upload generic-icons"></i> {{$import_label}}</a>
+ </li>
+ <div id="upload-form" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <div class="form-group">
+ <select id="import" name="target" class="form-control">
+ <option value="">{{$import_placeholder}}</option>
+ {{foreach $addressbooks as $addressbook}}
+ <option value="{{$addressbook.id}}">{{$addressbook.displayname}}</option>
+ {{/foreach}}
+ </select>
+ </div>
+ <div class="form-group">
+ <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>
+ </form>
+ </div>
+ </div>
+ </ul>
+</div>
diff --git a/view/tpl/cdav_widget_calendar.tpl b/view/tpl/cdav_widget_calendar.tpl
new file mode 100644
index 000000000..ec2257a19
--- /dev/null
+++ b/view/tpl/cdav_widget_calendar.tpl
@@ -0,0 +1,121 @@
+{{if $my_calendars}}
+<div class="widget">
+ <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}}">
+ <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">
+ <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>
+ <a href="#" onclick="var drop = dropItem('/cdav/calendar/drop/{{$calendar.calendarid}}/{{$calendar.instanceid}}', '#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>
+ <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}}" class="form-group">
+ <i class="fa fa-share generic-icons"></i>{{$sharee.name}}&nbsp;{{$sharee.access}}
+ <div class="pull-right">
+ <a href="#" onclick="dropItem('/cdav/calendar/dropsharee/{{$calendar.calendarid}}/{{$calendar.instanceid}}/{{$sharee.hash}}', '#sharee-{{$calendar.calendarid}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ </div>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ <form method="post" action="">
+ <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">
+ <select id="share-{{$calendar.calendarid}}" name="sharee" class="form-control">
+ {{$sharee_options}}
+ </select>
+ </div>
+ <div class="form-group">
+ <select name="access" class="form-control">
+ {{$access_options}}
+ </select>
+ </div>
+ <div class="form-group">
+ <button type="submit" name="share" value="share" class="btn btn-primary btn-sm">{{$share}}</button>
+ </div>
+ </form>
+ </div>
+ <div id="edit-calendar-{{$calendar.calendarid}}" class="sub-menu" style="display: none; border-color: {{$calendar.color}};">
+ <form id="edit-calendar-{{$calendar.calendarid}}" method="post" action="" class="colorpicker-component color-edit">
+ <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">
+ <input id="create-{{$calendar.calendarid}}" name="{DAV:}displayname" type="text" value="{{$calendar.displayname}}" class="form-control">
+ <span class="input-group-addon"><i></i></span>
+ </div>
+ <div class="form-group">
+ <button type="submit" name="edit" value="edit" class="btn btn-primary btn-sm">{{$edit}}</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ {{/foreach}}
+</div>
+{{/if}}
+
+{{if $shared_calendars}}
+<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}}">
+ <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">
+ <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>
+ </div>
+ {{/foreach}}
+</div>
+{{/if}}
+
+<div class="widget">
+ <h3>{{$tools_label}}</h3>
+ <div class="nav nav-pills flex-column">
+ <li class="nav-item">
+ <a class="nav-link" href="#" onclick="openClose('create-calendar'); return false;"><i class="fa fa-calendar-plus-o generic-icons"></i> {{$create_label}}</a>
+ </li>
+ <div id="create-calendar" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <form method="post" action="" class="colorpicker-component color-edit">
+ <input id="color" name="color" type="hidden" value="#3a87ad" class="color-edit-input">
+ <div id="create-form" class="input-group form-group">
+ <input id="create" name="{DAV:}displayname" type="text" placeholder="{{$create_placeholder}}" class="form-control">
+ <span class="input-group-addon"><i></i></span>
+ </div>
+ <div class="form-group">
+ <button type="submit" name="create" value="create" class="btn btn-primary btn-sm">{{$create}}</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ <li class="nav-item">
+ <a class="nav-link" href="#" onclick="openClose('upload-form'); return false;"><i class="fa fa-cloud-upload generic-icons"></i> {{$import_label}}</a>
+ </li>
+ <div id="upload-form" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <form enctype="multipart/form-data" method="post" action="">
+ <div class="form-group">
+ <select id="import" name="target" class="form-control">
+ <option value="">{{$import_placeholder}}</option>
+ {{foreach $writable_calendars as $writable_calendar}}
+ <option value="{{$writable_calendar.id.0}}:{{$writable_calendar.id.1}}">{{$writable_calendar.displayname}}</option>
+ {{/foreach}}
+ </select>
+ </div>
+ <div class="form-group">
+ <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>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/channel.tpl b/view/tpl/channel.tpl
new file mode 100755
index 000000000..1a84f1e66
--- /dev/null
+++ b/view/tpl/channel.tpl
@@ -0,0 +1,49 @@
+<div class="section-subtitle-wrapper">
+ <div class="pull-right">
+ {{if $channel.default_links}}
+ {{if $channel.default}}
+ <div>
+ <i class="fa fa-check-square-o"></i>&nbsp;{{$msg_default}}
+ </div>
+ {{else}}
+ <a href="manage/{{$channel.channel_id}}/default" class="make-default-link">
+ <i class="fa fa-square-o"></i>&nbsp;{{$msg_make_default}}
+ </a>
+ {{/if}}
+ {{/if}}
+ {{if $channel.delegate}}
+ {{$delegated_desc}}
+ {{/if}}
+ </div>
+ <h3>
+ {{if $selected == $channel.channel_id}}
+ <i class="selected-channel fa fa-circle" title="{{$msg_selected}}"></i>
+ {{/if}}
+ {{if $channel.delegate}}
+ <i class="fa fa-arrow-circle-right" title="{{$delegated_desc}}"></i>
+ {{/if}}
+ {{if $selected != $channel.channel_id}}<a href="{{$channel.link}}" title="{{$channel.channel_name}}">{{/if}}
+ {{$channel.channel_name}}
+ {{if $selected != $channel.channel_id}}</a>{{/if}}
+ </h3>
+ <div class="clear"></div>
+</div>
+<div class="section-content-wrapper">
+ <div class="channel-photo-wrapper">
+ {{if $selected != $channel.channel_id}}<a href="{{$channel.link}}" class="channel-selection-photo-link" title="{{$channel.channel_name}}">{{/if}}
+ <img class="channel-photo" src="{{$channel.xchan_photo_m}}" alt="{{$channel.channel_name}}" />
+ {{if $selected != $channel.channel_id}}</a>{{/if}}
+ </div>
+ <div class="channel-notifications-wrapper">
+ {{if !$channel.delegate}}
+ <div class="channel-notification">
+ <i class="fa fa-envelope{{if $channel.mail != 0}} new-notification{{/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-user{{if $channel.intros != 0}} new-notification{{/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>
+ {{/if}}
+ </div>
+</div>
diff --git a/view/tpl/channel_id_select.tpl b/view/tpl/channel_id_select.tpl
new file mode 100644
index 000000000..ecebd4bc0
--- /dev/null
+++ b/view/tpl/channel_id_select.tpl
@@ -0,0 +1,7 @@
+{{if $channels}}
+<select name="dest_channel" id="dest-channel-select">
+{{foreach $channels as $c}}
+<option {{if $c.channel_id == $selected}}selected="selected"{{/if}} value="{{$c.channel_id}}">{{$c.channel_name}}</option>
+{{/foreach}}
+</select>
+{{/if}} \ No newline at end of file
diff --git a/view/tpl/channel_import.tpl b/view/tpl/channel_import.tpl
new file mode 100755
index 000000000..baffe9b06
--- /dev/null
+++ b/view/tpl/channel_import.tpl
@@ -0,0 +1,43 @@
+<h2>{{$title}}</h2>
+
+<form action="import" method="post" enctype="multipart/form-data" id="import-channel-form">
+ <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+ <div id="import-desc" class="descriptive-paragraph">{{$desc}}</div>
+
+ <label for="import-filename" id="label-import-filename" class="import-label" >{{$label_filename}}</label>
+ <input type="file" name="filename" id="import-filename" class="import-input" value="" />
+ <div id="import-filename-end" class="import-field-end"></div>
+
+ <div id="import-choice" class="descriptive-paragraph">{{$choice}}</div>
+
+ <label for="import-old-address" id="label-import-old-address" class="import-label" >{{$label_old_address}}</label>
+ <input type="text" name="old_address" id="import-old-address" class="import-input" value="" />
+ <div id="import-old-address-end" class="import-field-end"></div>
+
+ <label for="import-old-email" id="label-import-old-email" class="import-label" >{{$label_old_email}}</label>
+ <input type="text" name="email" id="import-old-email" class="import-input" value="{{$email}}" />
+ <div id="import-old-email-end" class="import-field-end"></div>
+
+ <label for="import-old-pass" id="label-import-old-pass" class="import-label" >{{$label_old_pass}}</label>
+ <input type="password" name="password" id="import-old-pass" class="import-input" value="{{$pass}}" />
+ <div id="import-old-pass-end" class="import-field-end"></div>
+
+ <input type="checkbox" name="import_posts" id="import-posts" value="1" />
+ <label for="import-posts" id="label-import-posts">{{$label_import_posts}}</label>
+ <div id="import-posts-end" class="import-field-end"></div>
+
+ <div id="import-common-desc" class="descriptive-paragraph">{{$common}}</div>
+
+ <input type="checkbox" name="make_primary" id="import-make-primary" value="1" />
+ <label for="import-make-primary" id="label-import-make-primary">{{$label_import_primary}}</label>
+ <div id="import-make-primary-end" class="import-field-end"></div>
+
+ <input type="checkbox" name="moving" id="import-moving" value="1" />
+ <label for="import-moving" id="label-import-moving">{{$label_import_moving}}</label>
+ <div id="import-moving-end" class="import-field-end"></div>
+
+ <input type="submit" name="submit" id="import-submit-button" value="{{$submit}}" />
+ <div id="import-submit-end" class="import-field-end"></div>
+
+ <div id="import-common-desc" class="descriptive-paragraph">{{$pleasewait}}</div>
+</form>
diff --git a/view/tpl/channels.tpl b/view/tpl/channels.tpl
new file mode 100755
index 000000000..f484b49e5
--- /dev/null
+++ b/view/tpl/channels.tpl
@@ -0,0 +1,24 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <a class="btn btn-success btn-sm pull-right" href="{{$create.0}}" title="{{$create.1}}"><i class="fa fa-plus-circle"></i>&nbsp;{{$create.2}}</a>
+ <h2>{{$header}}</h2>
+ </div>
+ <div class="section-content-wrapper-np">
+ {{if $channel_usage_message}}
+ <div id="channel-usage-message" class="section-content-warning-wrapper">
+ {{$channel_usage_message}}
+ </div>
+ {{/if}}
+ <div id="channels-desc" class="section-content-info-wrapper">
+ {{$desc}}
+ </div>
+ {{foreach $all_channels as $chn}}
+ {{include file="channel.tpl" channel=$chn}}
+ {{/foreach}}
+ {{if $delegates}}
+ {{foreach $delegates as $chn}}
+ {{include file="channel.tpl" channel=$chn}}
+ {{/foreach}}
+ {{/if}}
+ </div>
+</div>
diff --git a/view/tpl/chanview.tpl b/view/tpl/chanview.tpl
new file mode 100755
index 000000000..39fafaf8e
--- /dev/null
+++ b/view/tpl/chanview.tpl
@@ -0,0 +1 @@
+<a href="{{$url}}">{{$url}}</a>
diff --git a/view/tpl/chat.tpl b/view/tpl/chat.tpl
new file mode 100644
index 000000000..22f3465bf
--- /dev/null
+++ b/view/tpl/chat.tpl
@@ -0,0 +1,346 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ {{if $is_owner}}
+ <form id="chat-destroy" method="post" action="chat">
+ <input type="hidden" name="room_name" value="{{$room_name}}" />
+ <input type="hidden" name="action" value="drop" />
+ <button class="btn btn-danger btn-sm" type="submit" name="submit" value="{{$drop}}" onclick="return confirmDelete();"><i class="fa fa-trash-o"></i>&nbsp;{{$drop}}</button>
+ </form>
+ {{/if}}
+ <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(); adjustFullscreenTopBarHeight();"><i class="fa fa-expand"></i></button>
+ <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false); adjustInlineTopBarHeight();"><i class="fa fa-compress"></i></button>
+ </div>
+ <h2>{{$room_name}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div id="chatContainer" class="section-content-wrapper">
+ <div id="chatTopBar">
+ <div id="chatLineHolder"></div>
+ </div>
+ <div class="clear"></div>
+ <div id="chatBottomBar" >
+ <form id="chat-form" method="post" action="#">
+ <input type="hidden" name="room_id" value="{{$room_id}}" />
+ <div class="form-group">
+ <textarea id="chatText" name="chat_text" class="form-control"></textarea>
+ </div>
+ <div id="chat-submit-wrapper">
+ <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>
+ <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">
+ <a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=online"><i class="fa fa-circle online"></i>&nbsp;{{$online}}</a>
+ <a class="dropdown-item" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="fa fa-circle away"></i>&nbsp;{{$away}}</a>
+ <a class="dropdown-item" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="fa fa-circle leave"></i>&nbsp;{{$leave}}</a>
+ <div class="dropdown-divider"></div>
+ <a id="toggle-notifications" class="dropdown-item" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="fa fa-bell-slash-o"></i>&nbsp;Toggle notifications</a>
+ <a id="toggle-notifications-audio" class="dropdown-item disabled" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="fa fa-volume-off"></i>&nbsp;Toggle sound</a>
+ {{if $bookmark_link}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="{{$bookmark_link}}" target="_blank" ><i class="fa fa-bookmark"></i>&nbsp;{{$bookmark}}</a>
+ {{/if}}
+ </div>
+ </div>
+ <div id="chat-tools" class="btn-toolbar pull-left">
+ <div class="btn-group mr-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>
+ <button id="main-editor-italic" class="btn btn-outline-secondary btn-sm" title="{{$italic}}" onclick="inserteditortag('i', 'chatText'); 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', 'chatText'); 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', 'chatText'); 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', 'chatText'); return false;">
+ <i class="fa fa-terminal jot-icons"></i>
+ </button>
+ </div>
+ <div class="btn-group mr-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">
+ <button id="chat-encrypt-wrapper" class="btn btn-outline-secondary btn-sm" onclick="red_encrypt('{{$cipher}}', '#chatText', $('#chatText').val()); 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">
+ <i id="more-tools-icon" class="fa fa-cog jot-icons"></i>
+ </button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="#" onclick="chatJotGetLink(); return false;" ><i class="fa fa-link"></i>&nbsp;{{$insert}}</a>
+ {{if $feature_encrypt}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="#" onclick="red_encrypt('{{$cipher}}', '#chatText' ,$('#chatText').val()); return false;"><i class="fa fa-key"></i>&nbsp;{{$encrypt}}</a>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ <div id="chat-rotator-wrapper" class="pull-left">
+ <div id="chat-rotator"></div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </form>
+ </div>
+ </div>
+</div>
+
+<script>
+var room_id = {{$room_id}};
+var last_chat = 0;
+var chat_timer = null;
+
+$(document).ready(function() {
+ $('#chatTopBar').spin('small');
+ chat_timer = setTimeout(load_chats,300);
+ $('#chatroom_bookmarks, #vcard').hide();
+ $('#chatroom_list, #chatroom_members').show();
+ adjustInlineTopBarHeight();
+ chatNotificationInit();
+});
+
+$(window).resize(function () {
+ if($('main').hasClass('fullscreen')) {
+ adjustFullscreenTopBarHeight();
+ }
+ else {
+ adjustInlineTopBarHeight();
+ }
+});
+
+$('#chat-form').submit(function(ev) {
+ $('body').css('cursor','wait');
+ $.post("chatsvc", $('#chat-form').serialize(),function(data) {
+ if(chat_timer) clearTimeout(chat_timer);
+ $('#chatText').val('');
+ load_chats();
+ $('body').css('cursor','auto');
+ },'json');
+ ev.preventDefault();
+});
+
+function load_chats() {
+ $.get("chatsvc?f=&room_id=" + room_id + '&last=' + last_chat + ((stopped) ? '&stopped=1' : ''),function(data) {
+ if(data.success && (! stopped)) {
+ update_inroom(data.inroom);
+ update_chats(data.chats);
+ $('#chatTopBar').spin(false);
+ }
+ });
+
+ chat_timer = setTimeout(load_chats,10000);
+
+}
+
+var previousChatRoomMembers = null; // initialize chat room member change register
+var currentChatRoomMembers = null; // initialize chat room member change register
+function update_inroom(inroom) {
+ var html = document.createElement('div');
+ var count = inroom.length;
+ $.each( inroom, function(index, item) {
+ var newNode = document.createElement('div');
+ newNode.setAttribute('class', 'member-item');
+ $(newNode).html('<img class="menu-img-2" src="' + item.img + '" alt="' + item.name + '" /> ' + '<span class="contactname">' + item.name + '</span><span class="' + item.status_class + '">' + item.status + '</span>');
+ html.appendChild(newNode);
+ });
+ memberChange = chatRoomMembersChange(inroom); // get list of arrivals and departures
+ if(memberChange.membersArriving.length > 0) {
+ // Issue pop-up notification if anyone enters the room.
+ chat_issue_notification(JSON.stringify(memberChange.membersArriving.pop().name) + ' entered the room', 'Hubzilla Chat');
+ }
+ $('#chatMembers').html(html);
+}
+
+// Determine if the new list of chat room members has any new members or if any have left
+function chatRoomMembersChange(inroom) {
+ previousChatRoomMembers = currentChatRoomMembers;
+ currentChatRoomMembers = inroom;
+ var membersArriving = [];
+ var membersLeaving = [];
+ if(previousChatRoomMembers !== null) {
+ var newMember = false;
+ $.each( currentChatRoomMembers, function(index, currMember) {
+ newMember = true;
+ $.each( previousChatRoomMembers, function(index, prevMember) {
+ if (prevMember.name === currMember.name) {
+ newMember = false;
+ }
+ });
+ if (newMember === true) {
+ membersArriving.push(currMember);
+ }
+ });
+ }
+ return {membersArriving: membersArriving, membersLeaving: membersLeaving};
+}
+
+function update_chats(chats) {
+ var count = chats.length;
+ $.each( chats, function(index, item) {
+ last_chat = item.id;
+ var newNode = document.createElement('div');
+
+ if(item.self) {
+ newNode.setAttribute('class', 'chat-item-self clear');
+ $(newNode).html('<div class="chat-body-self"><div class="chat-item-title-self wall-item-ago"><span class="chat-item-name-self">' + item.name + ' </span><span class="autotime chat-item-time-self" title="' + item.isotime + '">' + item.localtime + '</span></div><div class="chat-item-text-self">' + item.text + '</div></div><img class="chat-item-photo-self" src="' + item.img + '" alt="' + item.name + '" />');
+ }
+ else {
+ newNode.setAttribute('class', 'chat-item clear');
+ $(newNode).html('<img class="chat-item-photo" src="' + item.img + '" alt="' + item.name + '" /><div class="chat-body"><div class="chat-item-title wall-item-ago"><span class="chat-item-name">' + item.name + ' </span><span class="autotime chat-item-time" title="' + item.isotime + '">' + item.localtime + '</span></div><div class="chat-item-text">' + item.text + '</div></div>');
+ chat_issue_notification(item.name + ':\n' + item.text, 'Hubzilla Chat');
+ }
+ $('#chatLineHolder').append(newNode);
+ $(".autotime").timeago();
+
+ var elem = document.getElementById('chatTopBar');
+ elem.scrollTop = elem.scrollHeight;
+ });
+}
+
+var chat_notify_granted = false; // Initialize notification permission to denied
+var chat_notify_enabled = false;
+var chat_notify_audio_enabled = false;
+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");
+ }
+ // Let's check whether notification permissions have already been granted
+ else if (Notification.permission === "granted") {
+ // If it's okay let's create a notification
+ chat_notify_granted = true; //var notification = new Notification("Hi there!");
+ }
+
+ // Otherwise, we need to ask the user for permission
+ else if (Notification.permission !== 'denied') {
+ Notification.requestPermission(function (permission) {
+ // If the user accepts, let's create a notification
+ if (permission === "granted") {
+ chat_notify_granted = true; //var notification = new Notification("Hi there!");
+ }
+ });
+ }
+ // Encode a wav audio file in base64 and create the audio object for game alerts
+ //var base64string = 'UklGRr4VAABXQVZFZm10IBAAAAABAAEAIlYAACJWAAABAAgAZGF0YZkVAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBxcnJycoGNjY2NjYyMjIyMg3FxcXFxcXJycnJ0jY2NjY2NjIyMjIx1cXFxcXFxcnJycoKNjY2NjY2MjIyMgXFxcXFxcXJycnJ2jY2NjY2NjIyMjIxzcXFxcXFxcnJycoSNjY2NjY2MjIyMgHFxcXFxcXJycnJ4jY2NjY2NjIyMjIxycXFxcXFycnJycoWNjY2NjY2MjIyMf3FxcXFxcXJycnJ5jY2NjY2NjIyMjIxxcXFxcXFycnJycoeNjY2NjY2MjIyMfnFxcXFxcXJycnJ7jY2NjY2NjIyMjIpxcXFxcXFycnJycomNjY2NjYyMjIyMfHFxcXFxcXJycnJ8jY2NjY2NjIyMjIhycnJycoyLi4uLi4uLioqKfHFxcXFxcnJycnJyc4yMjIuLi4uLi4uKin5xcXFxcnJycnJyc3OMjIyMi4uLi4uLi4p/cXFxcnJycnJyc3Nzi4yMjIyLi4uLi4uLgHBwcXFxcXFxcnJycouNjY2NjYyMjIyMjIBwcHFxcXFxcXJycnKLjY2NjY2MjIyMjIyBcHFxcXFxcXJycnJyio2NjY2NjIyMjIyMgnBxcXFxcXFycnJycomNjY2NjY2MjIyMjINwcXFxcXFxcnJycnKIjY2NjY2NjIyMjIyEcHFxcXFxcXJycnJyh42NjY2NjYyMjIyMhXBxcXFxcXFycnJycoaNjY2NjY2MjIyMjIZwcXFxcXFxcnJycnKFjY2NjY2NjIyMjIyHcHFxcXFxcXJycnJyhI2NjY2NjYyMjIyMiHBxcXFxcXFycnJycoONjY2NjY2MjIyMjIlwcXFxcXFxcnJycnKCjY2NjY2NjIyMjIyKcHFxcXFxcXJycnJygY2NjYyMjIyLi4uLi4uLioqKioqKdnBxcXFxcXFycnKAi4uLi4uLioqKioJxcXFxcXFycnJydIyMi4uLi4uLi4qKdXFxcXFycnJycnKBjIyLi4uLi4uLioFxcXFycnJycXFydY2NjYyMjIyMjIyLc3BwcXFxcXFxcnKDjY2NjIyMjIyMjIBwcHFxcXFxcXJyd42NjY2MjIyMjIyMcnBxcXFxcXFycnKFjY2NjYyMjIyMjH9wcXFxcXFxcnJyeY2NjY2NjIyMjIyMcHFxcXFxcXJycnKHjY2NjY2MjIyMjH5xcXFxcXFycnJyeo2NjY2NjIyMjIyKcHFxcXFxcXJycnKIjY2NjY2MjIyMjHxxcXFxcXFycnJyfI2NjY2NjYyMjIyJcXFxcXFxcXJycnKKjY2NjY2MjIyMjHtxcXFxcXFycnJyfo2NjY2NjYyMjIyHcXFxcXFxcnJycnKMjY2NjY2MjIuLi3lycnJycnJzc3Nzf4yMjIyMjIuLi4uFcnJycnJycnNzc3OMjIyMjIyMi4uLi3hycnJycnJzc3NzgIyMjIyMjIuLi4uDcnJycnJycnNzc3SMjIyMjIyMi4uLi3dycnJycnJzc3NzgYyMjIyMjIuLi4uCcnJycnJyc3Nzc3aMjIyMjIyMi4uLi3VycnJycnJzc3Nzg4yMjIyMjIuLi4uAcnJycnJyc3Nzc3eMjIyMjIyMi4uLi3RycnJycnJzc3NzhIyMjIyMjIuLi4uAcnJycnJyc3Nzc3mMjIyMjIyMi4uLi3JycnJycnJzc3NzhoyMjIyMjIuLi4t+cnJycnJyc3Nzc3qMjIyMjIyLi4uLinJycnNzc3N0dHR0h4uLi4uLi4qKiop9c3Nzc3Nzc3R0dHyLi4uLi4uLioqKiHNzc3Nzc3N0dHR0iIuLi4uLi4qKiop8c3Nzc3Nzc3R0dH2Li4uLi4uLioqKhnNzc3Nzc3N0dHR0iYuLi4uLi4qKiop6c3Nzc3Nzc3R0dH+Li4uLi4uLioqKhXNzc3Nzc3N0dHR0i4uLi4uLi4qKiop5c3Nzc3Nzc3R0dICLi4uLi4uLioqKhHNzc3Nzc3N0dHR1i4uLi4uLi4qKiop4c3Nzc3NzdHR0dIGLi4uLi4uLioqKgnNzc3Nzc3N0dHR2i4uLi4uLi4qKiop2c3Nzc3NzdHR0dIKLi4uLi4uLioqKgXNzc3Nzc3N0dHR3i4uLi4uLi4qKiol2dHR0dHR0dHV1dYOKioqKioqKiYmJgHR0dHR0dHR0dXV5ioqKioqKiomJiYl0dHR0dHR0dHV1dYSKioqKioqKiYmJf3R0dHR0dHR0dXV7ioqKioqKiomJiYl0dHR0dHR0dHV1dYaKioqKioqKiYmJfnR0dHR0dHR1dXV8ioqKioqKioqJiYd0dHR0dHR0dHV1dYeKioqKioqKiYmJfHR0dHR0dHR1dXV9ioqKioqKiomJiYZ0dHR0dHR0dHV1dYiKioqKioqKiYmJe3R0dHR0dHR1dXV+ioqKioqKiomJiYV0dHR0dHR0dHV1dYmKioqKioqKiYmJenR0dHR0dHR1dXWAioqKiYmJiYmIiIN1dXV1dXV1dXZ2domJiYmJiYmJiYiIeXV1dXV1dXV1dnaAiYmJiYmJiYmIiIJ1dXV1dXV1dXZ2d4mJiYmJiYmJiYiIeHV1dXV1dXV1dnaBiYmJiYmJiYmIiIF1dXV1dXV1dXZ2eImJiYmJiYmJiYiId3V1dXV1dXV1dnaCiYmJiYmJiYmIiIB1dXV1dXV1dXZ2eYmJiYmJiYmJiIiIdnV1dXV1dXV1dnaDiYmJiYmJiYmIiH91dXV1dXV1dXZ2e4mJiYmJiYmJiIiIdXV1dXV1dXV1dnaFiYmJiYmJiYmIiH51dXV1dXV1dXZ2fImJiYmJiYmJiIiHdXV1dXV1dXV1dnaGiYmJiYmJiYmIiH11dXV1dXV1dXZ2fYiIiIiIiIiIiIiFdnZ2dnZ2dnZ2d3eGiIiIiIiIiIiIh3x2dnZ2dnZ2dnd3foiIiIiIiIiIiIeEdnZ2dnZ2dnZ2d3eHiIiIiIiIiIiIh3t2dnZ2dnZ2dnZ3f4iIiIiIiIiIiIeDdnZ2dnZ2dnZ2d3eIiIiIiIiIiIiIh3p2dnZ2dnZ2dnZ3gIiIiIiIiIiIiIeCdnZ2dnZ2dnZ2d3iIiIiIiIiIiIiIh3l2dnZ2dnZ2dnZ3gIiIiIiIiIiIiIeBdnZ2dnZ2dnZ2d3mIiIiIiIiIiIiHh3h2dnZ2dnZ2dnZ3goiIiIiIiIiIiIeAdnZ2dnZ2dnZ2d3qIiIiIiIiIiIiHh3d2dnZ2dnZ2dnZ3g4iIiIiIh4eHh4eAd3d3d3d3d3d3d3uHh4eHh4eHh4eHhnd3d3d3d3d3d3d3g4eHh4eHh4eHh4d/d3d3d3d3d3d3d3yHh4eHh4eHh4eHhnd3d3d3d3d3d3d4hIeHh4eHh4eHh4d+d3d3d3d3d3d3d32Hh4eHh4eHh4eHhXd3d3d3d3d3d3d4hYeHh4eHh4eHh4d9d3d3d3d3d3d3d36Hh4eHh4eHh4eHhHd3d3d3d3d3d3d4hoeHh4eHh4eHh4d8d3d3d3d3d3d3d3+Hh4eHh4eHh4eHg3d3d3d3d3d3d3d4h4eHh4eHh4eHh4d7d3d3d3d3d3d3d4CHh4eHh4eHh4eHgnd3d3d3d3d3d3d5h4aGhoaGhoaGhoZ7eHh4eHh4eHh4eICGhoaGhoaGhoaGgXh4eHh4eHh4eHh6h4aGhoaGhoaGhoZ6eHh4eHh4eHh4eIGGhoaGhoaGhoaGgHh4eHh4eHh4eHh7hoaGhoaGhoaGhoZ5eHh4eHh4eHh4eIKGhoaGhoaGhoaGgHh4eHh4eHh4eHh7hoaGhoaGhoaGhoZ4eHh4eHh4eHh4eIKGhoaGhoaGhoaGf3h4eHh4eHh4eHh8hoaGhoaGhoaGhoV4eHh4eHh4eHh4eIOGhoaGhoaGhoaGfnh4eHh4eHh4eHh9hoaGhoaGhoaGhoR4eHh4eHh4eHh4eISGhoaGhoaGhoaGfXh4eHh4eHh4eHh+hoaGhoaGhoaGhoR4eHh4eHh5eXl5eYSFhYWFhYWFhYWFfXl5eXl5eXl5eXl/hYWFhYWFhYWFhYJ5eXl5eXl5eXl5eYWFhYWFhYWFhYWFfHl5eXl5eXl5eXmAhYWFhYWFhYWFhYF5eXl5eXl5eXl5eYWFhYWFhYWFhYWFe3l5eXl5eXl5eXmAhYWFhYWFhYWFhYF5eXl5eXl5eXl5eoWFhYWFhYWFhYWFe3l5eXl5eXl5eXmAhYWFhYWFhYWFhYB5eXl5eXl5eXl5e4WFhYWFhYWFhYWFenl5eXl5eXl5eXmBhYWFhYWFhYWFhYB5eXl5eXl5eXl5fIWFhYWFhYWFhYWFeXl5eXl5eXl5eXmChYWFhYWFhYWFhX95enp6f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f4CAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAA';
+ var base64string = 'UklGRvQbAABXQVZFZm10IBAAAAABAAEAIlYAAESsAAACABAAZGF0YdAbAADk/qz+y/5X/pP+Pv53/j/+UP5//p7+nf6j/rf+HP/u/gP/Ff/B/v/+3/63/qz+sf6G/pn+U/6h/hL+ef5o/qz+hf6q/tf+SP/k/i7/7v4b/6f+M//S/hv/uf7Y/nX+3/5k/sz+V/6f/nT+kf6V/uv+4v48/9T+Vf/S/vT++f72/sD+zP7c/uD+k/5t/rv+Tv7G/lX+fv6W/un+/v7//jz/KP8v/z3/E/9g/+H+m//1/kr//P5O/+r+NP/R/g//4P4a/zz/ff+6//n/jP/8/0z/cf8f/xX//f4t/+z+4v6q/gj/qv5y/kv+mP7V/oX+gP7l/gX/+f7f/pH+P/7f/UD+KP5E/hH+RP4H/m7+/v1S/gT+h/4Q/j/+GP4P/tH98P27/ST++v1F/gz+Hv6v/WH+Lf63/hz+UP43/ov+oP5y/jX+TP6C/v3+xP69/l7+nv7t/uH+MP/X/pz+uP6T/ij+V/5B/i3/d/1Q+xH7z/tL+3X7+/0oBFkF2QS1CcILQwrTDmQTChOuEfwTuw4hBaL8/fey+VH9ff20/D79f/3L+eD2bvHQ587gC9t20FnG2cN5xYPFbMV0xuHIUsqUyu3N6NxK7SL0DfqRBIoP7RecHxApjTF4M4Uvqyp6KvUpuybyIjIhPR5PHAcbVxglFf8SDRAADWEIWwNw/Pz3o/Pl8V/1fvsn/Zb9XQBtBuoJkAtaD0YVZBfDFXUUaxSHFNUVmRZDFj4WMBZbFokU1BG0D5APIg/cDZwJAAfSBeEFGAMLAOr+Tf0b+y/6CvrF+hz65fmH+R766fkD/DD9zP26/E/+1gBHAsMC8wPBBRYFlANfBJcFdgWAA68CvgLdArsByQBpAOn/cf7m/X39rfvT+V/4oPcg9QHzW/QW9vv0DPR79cT3/fZ99WL1+/aI96j4Dfkm+sH6oPwe/av98/39/2oBtwFUAa4BIQJ+AnUAZf+5/4cA6v4e/cH89fy++yj7o/lh+Ef3OfcR9xf25/SK9Db0UPPT8eLxUvSI9GvzTvMY9cj13PUh9rL30Pex+Nj58Prc+l77svyJ/sv+JQDGAPMA+f8FAO//JgD0/9z/1P94/yH9Yfte+iX7rvrz+ML3HfeP9sr1K/Ua9ov2PfaJ9un2OfeZ98T3wff8+Tz83v3x/RH/EgBYAXcCiAMyBJEE8AQwBR4FLQbaBvEHegemBrEFTAXEA9sBR/7f/KP8f/yU+oL4Ifjh9vX0XfQT9Gv06/PW853z+vOp9JL1r/aZ+Bn6RPup/Mf9xv80AfsCiwQ5BW0GVQcHCOwIFAo3C44KSAmnBzMHNAfKBg8FDQT3AawBAwE0ALz+4f1K/Xz92Pwk/eL8J/0J/P37qvxM/J77YvxN/WL+xv7D/0UAqAAQAbcBWwMkBbQGVgdIBzsIDgmICXkKJAq6Ci0L1wvrCqkKtApGC2EKWQlsCb8JYghYBzsGaAbeBrkGlQSHAgMB7wCG/wf/pv5l/jP9rvzh+y/8Wvsz+/H7EP2n/tX/NgAgAZMBzgNWBV0GGwcnCBAKIwtKDKEMVA1jDZoNFA2VDAUMggsKC20KQwo8CaEHtAZfBUwEoQK6ATYA1P8//jb9DPt9+lX6xfoB+iT6cPo0++T7yfwe/fX9l/6y/0MAmQHiAvMDCAVyBpAHpQgTCcUJHwoPCxgMdwzZDCUNJg0tDWoMswvbCm8JugimB7UGgAUtBIICUQH0/1n/SP10/Df7SPoO+YH4wPiR+ez5gfpg+k37FPxi/fD9AP8PAEwBTQI1BGQFpQeuCZ8LKg33DgMQ1xABESkR3RCWEMUPkA4wDQoLHQkgB7QF8AOXAe7+fv2X+zf6yvgf9y31KPS285XzLPSp9Rn2IPeO91L50Prk/Eb+bgBPAt0E7AbFCeoL8w2ODx4RARIdE9AS9hJgEs4RDBBsDqQMQQr5B6cFGANwAGn9l/rz9/T0kvKQ8Azv4u1Z7ffsuuyl7S3vG/AX8cvxKPS59S34QfoE/fX/awNbBT0ICwrnDCMOdg9NEO0Q0BCsEMoPHA85DUwL1wieBtoDTQGD/r37cPhT9ZHyefBZ7u7rnupz6Zjox+jU6HzpOOo06/TsYe7F8DXzJPad+Hv7rP4lAtkE2wf7CRQMcw2DDhUPtw84D3IPIQ7QDKkKdAgWBq8D+QAz/nf6b/f0853wzOzq6YznlOUa5FXjTeIo4l7iKeP24/TlNOgy6p/ske/o8uX1F/k+/I7/HgIfBfIG4QgTChsLwwtdC7IKHQlYB8wFkwL5/2H8Z/lF9ejxqu3z6RnlpOFa3u/b8tmI2HbXHNfC1q3Xq9g+2gvcct4P4aHk0eeM677vrPNw9/b6Wv5pAQ4E6gVjB4oIPQnlCKgIuAdABgQExAGM/qz7n/cE9Hzv9Orf5QTinN3V2mrXINXf0pTR1NDo0G3RCtPy1NfXKtqc3bLgMOWq6VTupfIP9wf78f5AAh8FhAetCRELHAz0C8YLZAoFCYAGuwMTADz8a/jd84PvruoY5hfh89zg2HXWctMm0VXPvs51z/3QLNN41STYfdvO3m7joOfY7Dbx9PVk+uH/pQP6B/EKjw2xDyERFRJxEroRzRCYDpAMYAn3BbkBk/0R+Tz0PO/b6ebkMOB+3MrYMtaX037SEdL00tTU0Nd52mrdmOC55EnoVO0r8hj4XP3wAsoHIA3GEF4UKRegGWIbZhyCHEscxRrjGN0V+RIYD84KtQV/AEf7P/Z/8Z7smOfK43Tg/d0e3BzbfNvh3CzffuHI5EvozeuV7xf0m/h1/TMCLggGDt4T/BcgHO8fEyM5JdcmVietJw0n+iWTI6ggnRwyGYwUmg8aCv8E/f7K+X70L/D/69voueU/5NXjsORm5g3oZeoR7mzxSvXG+B39uwG9Bs8LsRB+FskcdCIjJz4r0y1LML0xxDKTMt8xxTBULqormygsJL8fSRofFcAOYgkoA9X9n/j29K3wr+2t6/nrmuy07UbvUfH48lz1Wvhk/XkCcQg7DiQUZxk/HlkjVClLLrcyQDZzOLU6STvJO+86RDlXN1g0oDBuLJsnNyJZHFEW6A9qCkME+f7N+aP19PFX8IHv8e+y75zvi/BY8wb3AvuT/48EWwk4D/4URxuXINIlmyoGMMU0qjhTO0g9oz4tPzw/Lj58PJY5KTbfMfss6ieKIi4cbhbtD+MJDwSM/s75XfZE82rxhfDA8InwzPCU8kT1Ofht/NgA9gXyCgkRlRaJHD4hYCbwKgUwozMMN/44kTo/O2Y7eDrDOBA2EzNXLzAroyU6IJIauRS+Dq0IDwOm/Rn5U/XV8Vbvze2y7Ajtee317cbv6PJ/9hz7hf92BPsIhQ6ME/UYzx3OIt0m2iqkLcowJTIZM9IyEDLwMA0v3iu+KMQkkyBuGwkWCBC0Cu8EIv+q+RP1qvD67JjpK+dm5tflQuav563p8OtQ7oTx7fTI+Or9GALsBpIL5hB9FcoZMR1OIMYhwyM6JPMk8iPXIhkhux4VG4YXmhJLDhsJawQl/zj6v/Tn7y/rjueO49zgtd5y3QPd19yv3XjfceEB5P7m1+oy7mDy6vZr+/X/PQSOCCsMcA/BEc0T1hTuFf8VvhWEFL8ScRCuDfQJvAX6AKn8zPcK89HtT+k65GbgS9xv2QbWodSr05TTYNNe1MrVrNdQ2rvdj+BX5BXodOyl8DT1qPlu/ewAmQP5BaYHwggOCTMJxwisB/kFDQR+Ae39bvqu9m3yLe5y6Zzl/OBJ3WvZ3db602/SKNCnzyjP3s+z0D3SStSz1qnZi91c4DXkY+fP62rvcfPN9sD5+PtF/sv/PQGIAW4BtABj/wn+lfsB+Qb2P/Ly7uPq3+Yv44nf59v01wXVEtL2zxTOxc37zJ7N8c0uz7PQXdM91mDZiNxY4KnjjucA6zPvMfLu9HL3E/pw+zD9V/3V/Xv9L/2e+xL6nvfU9ODxOe/h67PomOQf4aPdMdqf15/UCdIv0BrP8s60z/vPotEb03TVxNc426Xed+ID5qjpYO0D8Zbz+/Yf+bL7Lf3C/lf/LwCa/1D/vf1+/AL6wPdt9efyi+9N7L7ohuZe44fgvd3D287ZcNhB1x7XS9cP2E/ZmdoY3UDfaeLV5Wrpee388CD0Qffp+fz8+P79ADACfAOnAzAEVgOIAscAV//0/Nb6B/iS9ajyoe8W7DTppObQ5JvipuCh3hPett2l3YfdG9+Q4ADjY+UY6OnqGe5n8Rn1kvjS+0j+GwFaAzgF8wbgB6wIjAhvCMQGhQWEA4EBov52/Cn5g/Za847wI+7966fp8+eM5V3k9+O85Nbk6uU15w7qKuyD7+XxQ/Vb+En89P/zAhYGzQktDNgOVxAGEgIS/hEAEQwQ7w6vDFgKrgfqBBQBq/3t+iT4h/Ua87Hwz+6g7UPsneto7Dvtru6T8JXzDvab+YD8VQCtAyIIHQtuD4gSvBXyF60ZThtJHEocNRyvGiUZRBbmE8kQjQ2/CbcFuQEq/nz63fZ18xTxTe887tvtfO5r79rw2PKh9e746fxhAYsFdAo3DwwU5hetG+seGCLHI/4loybuJsolEyT6IUEfFBx9GHMT8w6ECXIFqwA+/NT3j/Ql8QbvPO0M7Tvt5u7T8N3zDfcf+6n/xwQhCuEPOBWUGs4fdSSIKJQrJy6xL+YvkC+QLkEsqynTJXkhWBzwFj8RXAttBXT/vfn49Fzw9O0L62fqWOrO6+LtE/Eo9D74HP0nA9EJHBF3Fy4erSSsKmovxzOjNgc5tjlnOa83lDXmMdwtuChPIhccahUEDpQGVf9K+ePzHO8U63fotuZ95u7n0elT7UHxcfbZ+5QCFwlxEd8YOCAEJ2UtrDJdN0Q6wTxfPSI99DpeOKczti5PKBki/BpsE3ML7gPL+8n0su526XHlHuPP4VHih+QK6NjsHPIl91T9BAVeDZcVvx2yJXoseDLCNg06lzu6PL878zkYN48z3S6iKcwixRt6EyYLkAKy+szyF+3H5+Tjv+DB3+nfbuLV5d7qSfA9953+cAZNDrgWfB4/JtgsrTK5Njo55ToBO6M5GTdiM7ku0CjgIbsarRKDCo4BtPmJ8v3rDObB4brett2F3RHgs+Ph6IHuevW1/KcFCQ4tF88frCjzL8o1YDrRPLU93D0XPAU5KDTCLt4nbiB/FzAOuwNo+gnxH+ht4Gjai9Zg1GHUq9VX2NvcseK+6UHyFPvfBMsOVxnKI1EtFjWFO98/aUKWQudBSj97PK03tTHdKQEhmxZUCxj/lPOf55Ld+9SizlPJUcdnxvvH1Mrwzx7X6+Bj6672BgMrDzwaIibXMGI5Lz9jQ/VFcEZRRQBDmj8jO141yS15JHcZiAww/sjw1+Ou2CPPGce+wVq/yb4EwXHEusrC0qXdaej89CkC5g9rHEMpoDMBPExBjkS1RaNF/UPsQYc+DTpnM+0rKiKEFmQIDPm26ZfbP8/PxIy8wrc4tke2Crkbv7jGVNB62/jnv/W8AwUSVB+pK2Y1Az2JQKZCXELDQbA+zjtcN5Iy9SuVI5gYWQvM+5Lspd3BzwvDcrlQshGvea6lsD21rrz0xdfR4N447RP8gwq7GCQmzTAVOMI7mT1lPX88ljopNwgzoS0zJzQefRO0BWD27+Tl1EvFtLjZrnSouKSjpHWnKK1ttL6+c8oM2VboUPikB4wW1SJKLUMz0DaTN3o30TXVM54wgSzPJugfvBZiC8X8UOzH2rLJ2Lqzrqql2Z+SnfOeDKOYqdayvL28y3baYuqf+k4KoxhPJAMs8DAHM9kzUzI4MBstfClVJGweARZtDNz++O703R7Nx7zzrq+jKJ3zmTqaAZ2Po8KrpLYawyTSMOE98TABqBA1HVsmOiyNLocvNy+aLegq9CbzIVAb2hI0CGP6xeqo2UnJOLqirUqjxJ0em0+c4Z9lpYitbbkQx8XVM+VK9H8DJRJPHZ4lSiqLLK4sUyy8KZYmfCF9G54TAwoW/ljv1N4iz8rAtrQYqrei6J6vnnWhyKbqrTW4g8QU0mbgfe9t/qgLnxgrIsQoviukLAAswSkCJswhJxtmEw0Jdvzf7APerc6pwBi0garDoy+hzqDZo9apArGTuwnIs9Wi5Pvy5gEoD2kbBSQsKpIthi66LN0ppCVpIDwZxg+TBPf2puih2Z/LYr8Qtfetfqljp++oBq04tCC9pMg+1cnid/AN/zIM+RgbIsop2C1/LzQv7SzNKJAj9hs6E3kH//r87E/fD9Jjxru8frbpspmy87TeuX/B78o91jji+u7e/AYK0BUqIHcoPS5WMfAx9TDOLRco/iA0F2IMav8d8t/k/tmBz3XGDcAPvce8R79+w6HKttOr3iDrGPlgBkMTih4PKasv3DQ7N8A2RTQHMEMp2CBvFmkKqfxs7dzettLFx8m+27kFuK25+L2RxMPNc9kb5vf04QPPEpIgsSyqNs084T9mQC8+xjrUNC0taCKPFWgFVfTf4hXTCsXLuvSyMK+4rnWxV7iqwo3OCN0B7Uv+Fw/UH+4uijocQuVG7UfvRqZEmEDKOqoyyShpG3sKpfYO46PQ0cBJtN+r3Kj6qaqud7fnwlXRyOEu9PoG4BrcLMw7xkUwTNtOw0+2TiBMf0d+Qck5xS81IjwRnvw46ELU78Nst+6veaxZrtOzu73uyq/adOyC/yMTuiUvNkdD7UsCUTNT71IzUcBN1EiLQjo6qC9JIjERZf/s7NXcoc/nxvTB/cDtw9/KnNSY4ULvz/7PDSIdWCq6Nm5AO0e9SVdKHUjsRJg/hzhlL+gkjxjxCnb+EvTA6svjfd9Y3irfC+NP6WnxlPpHBIIOoxeFH/Yl4CqVLUMuDS3AKcgkKR7QFaMN6gTa/HT1J/B07Jjruey18Ij0b/qAAdIJQRJnGysjMyk5LWUv7S4iLQMoUiHfGLIPOgW4+i3w6eai3uDZ6dfg13XaqeAu6c3yT/7kClEXoSPTLqs3ST5+QiZEDUKZPQs2LSx9HygSdwKC89/kXdgizkHH9MMaxS3JVtDk2p3nrfWUBUAVsSQFMto95UWjSqpKCklpRPA9hjWoKZgbrwvj+n7rU9wW0HnG/cFcwRnEaMp/1A3hYO5w/ecMHxwIKaE0dTyFQdBCrEFsPkU4jS+oJWgZWQwg/vbx4uZO3jrYjdVt1bfY1d1g5lnv3fk5BKkOexitIPslminMKgcq+SWsILEZixHWCNoAa/nR8u3sH+oI6ojrae7J8uP40/9NB1QOlxSeGcocjB6RHuIbvRdsEQ8L0wMN/eH1TPDa6jvoDuea6LnrTPDj9kj+mwWoDRgV4BomHwIifiKNIfsdGBnvEd0KaALr+kvzeOvg5WXjIuP75FDozu2M9Gr8BwWzDaoVphuDICYjeSOjIQkePhiREQ8JpQAv+ATxHOoj5S7i1OGX443nGeyy8rD6RwM9CzcTHhnhHfofYSCXHlUbchUjDxMIpQBW+fnyDO0v6TXnQufE6PDr/vC99kD9PwT8CngQ4xOVFlMXRhawEzgPSAoqBOD9HPhf8yPvF+yc6hHrZewP8Pn0GPv2ANoHNA3wEm8VjhdjFxcWyxL8DTgIGwK1++z1OvBJ7ALpj+fc5oDoO+xb8RH3vP3RA+kJNw7/EZQUQhViFFgS4Q7PCoAF6QBX+2X2bvLG72vusu3S7v7w0fME90n79v5kA50GTAnGCjEM1QuiCsYI5waeA/cA1v3s+y35GfiU9wr4nPj4+f36Af2P/o8A8AH7AqUDBQT7A6sDiAKYAWEAWv9Q/r/9Wf0f/Vn9zf38/TL+Z/+c/z8AZgBpAJ3/m//S/0L/lP6X/s39Kv6//WX++P5nAOEAIgK/Ar8DrgPHA0QDmAK/AWoA9/5f/Xj7Ovpx+IH3yvZA9//3Lfmi+n38af5FAeMDOQY5CB0JMgp9CoUKPQl2B3MFFQNJALv9qvu5+fb3L/eS9ob3D/hs+WH6lfzq/X0AyQFwA44EugVyBsQGZwZbBmcFGQVjA5UCWQHnAKwAdQAGAEIAGQC5APEArQFDAncCNQL+AYMBRQGsAL3/F/5D/a38FPwV/J38TP24/f7+iAB3AjgDLgTyBA4GkQYnB9sGYQYKBfUDrwGNADr+Gf1d+4v6uPlf+Qz59vl5+tj7Df1+/hsA6wEZA4oE7wS4BXoFQAUlBP4CvQEeAPL9Ivzw+b74gPdV9jX2rPVS9gb3yvic+qD8/f6oAGMCTQQSBbIFdAVsBV4EYAMBAXz/Hf04+3P4Y/cr9aDzvPIy88fzSfQ69YT3cfny+wv+AQGWAp8EBgaaBrsGngbEBdUDOgLW/3j9xPpT+LD2pvQB87HxN/Fd8RXya/NI9UX3Nvk6/HP+YAFTA0UF8gWjBkUGTgZvBWYERwInAK79RPu2+Nf2fvT88pbxFPEC8RXydfJI9Kb13feA+Sn7Hf3F/gYAxgAmAcABMwHfAOn/Lv9V/hH9ePzH+9b6MPpf+Z34WPjg99b3APf99hr3X/eG92n3VPe29zP3svdl9/X3A/gM+X75v/oY+2T88PwI/uf+jP+1/5L/Y/9Z/23+7f1e/DL7/PiQ9xn2S/WA9HLzivKU8hbz9/Nj9VD2Kfih+RL8yf1B/3gAcwFuARYB0gC1AJj/pP5I/bf7+vmw+LX2mPVt9MH0f/QI9VT1WPZ/9yP5BPqC+7P8+P2r/nj/HQC2AGQABgAG/5r+Vf3Q/L/7+/om+nL5Ivne+Gj4DfgL+IL4Afl1+Qf6x/qW+wz8lPzu/I79R/7//or+8f4p/sz9Q/2j/BD8B/x5+/H6Mvps+qf5k/ka+cj5pPn/+Rz6DPtt+1r88PyZ/b79Sv7Q/iX/h/6v/gz+A/5f/dP8ZvwZ/In7+Pqj+p/6jvqK+r36y/p3+4v7L/y3/PH81P1j/s3+DP8g/6L/VP+n/wr/sv9X/xn/SP5P/uv9Nf6t/fH9rP2v/QP+Ff4d/oz+Rf6l/lX+pf6k/qn+Av92/3P/yP/Y/wUACADT/5EAsADZAB4BBgFXAYwBsQHXAS8BAQGYAEgA2v+8/2n/zf9I/4H/w/48/zv/9f8gAHoAGAG7AcIBdQLZAscCmwIBA3sC2QK3AvgCZwJAAqQBfwH8ALUAUAAGABQAfAAiAJMAlgCNAMEAJwFRAa4BcQKxAuwClQKUAosCmAJ8ApcCEAIRAscBrwGSAYcBRQEuAaQA6ABcAOwAxQBYAeUAcQEYAVUBZgELArwBLAJmAugC5wIMA/ICIAO3At0CVQJcAhYC8wHKAacBhQFwAYMBegGOARQBZwGcATwCWgKtAn8C6wIBAyUDKwP9AvsC/AKiArwCNQJtAtEB0QERASMBqgC1AKsAvQCoAMwAuQCuAKEA/gDLAFwBDQFuAVQB/wGPAYUBgwFxARoBKwEXAfwA2wDPAHsAsgBcAP//+v+z/4T/S/9L//r+8P5D/7z/yf+IAPr/dABVAFIAXACcALYA5gDkABIBpgCoAOr/0v9f/2//0f7w/j3+ev4a/hD+7v02/kz+';
+ chat_notify_audio = new Audio("data:audio/wav;base64," + base64string);
+
+}
+
+// Issue a pop-up notification using the web standard Notification API
+// https://developer.mozilla.org/docs/Web/API/notification
+var chat_issue_notification = function (theBody,theTitle) {
+ if ( !chat_notify_granted || !chat_notify_enabled) {
+ return;
+ }
+ var nIcon = "/images/icons/48/group.png";
+ var options = {
+ body: theBody,
+ icon: nIcon,
+ silent: false
+ }
+ var n = new Notification(theTitle,options);
+ n.onclick = function (event) {
+ setTimeout(n.close.bind(n), 300);
+ }
+ if(chat_notify_audio_enabled) {
+ chat_notify_audio.play();
+ }
+}
+
+
+function toggleChatNotificationAudio() {
+ if(!chat_notify_audio_enabled) {
+ chat_notify_audio_enabled = true;
+ $('#toggle-notifications-audio-icon').removeClass('fa-volume-off');
+ $('#toggle-notifications-audio-icon').addClass('fa-volume-up');
+ }
+ else {
+ chat_notify_audio_enabled = false;
+ $('#toggle-notifications-audio-icon').removeClass('fa-volume-up');
+ $('#toggle-notifications-audio-icon').addClass('fa-volume-off');
+ }
+}
+
+function toggleChatNotifications() {
+ if(!chat_notify_enabled) {
+ chat_notify_enabled = true;
+ $('#toggle-notifications-icon').addClass('fa-bell');
+ $('#toggle-notifications-icon').removeClass('fa-bell-slash-o');
+ $('#toggle-notifications-audio').removeClass('disabled');
+ }
+ else {
+ chat_notify_enabled = false;
+ $('#toggle-notifications-icon').addClass('fa-bell-slash-o');
+ $('#toggle-notifications-icon').removeClass('fa-bell');
+ $('#toggle-notifications-audio').addClass('disabled');
+ }
+}
+
+function chatJotGetLink() {
+ reply = prompt("{{$linkurl}}");
+ if(reply && reply.length) {
+ $('#chat-rotator').spin('tiny');
+ $.get('linkinfo?f=&url=' + reply, function(data) {
+ addmailtext(data);
+ $('#chat-rotator').spin(false);
+ });
+ }
+}
+
+function addmailtext(data) {
+ var currentText = $("#chatText").val();
+ $("#chatText").val(currentText + data);
+}
+
+function adjustFullscreenTopBarHeight() {
+ $('#chatTopBar').height($(window).height() - $('#chatBottomBar').outerHeight(true) - $('.section-title-wrapper').outerHeight(true) - 16);
+ $('#chatTopBar').scrollTop($('#chatTopBar').prop('scrollHeight'));
+}
+
+function adjustInlineTopBarHeight() {
+ $('#chatTopBar').height($(window).height() - $('#chatBottomBar').outerHeight(true) - $('.section-title-wrapper').outerHeight(true) - $('nav').outerHeight(true) - 23);
+ $('#chatTopBar').scrollTop($('#chatTopBar').prop('scrollHeight'));
+}
+
+function isMobile() {
+ if( navigator.userAgent.match(/Android/i)
+ || navigator.userAgent.match(/webOS/i)
+ || navigator.userAgent.match(/iPhone/i)
+ || navigator.userAgent.match(/iPad/i)
+ || navigator.userAgent.match(/iPod/i)
+ || navigator.userAgent.match(/BlackBerry/i)
+ || navigator.userAgent.match(/Windows Phone/i)
+ ){
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+$(function(){
+ $('#chatText').keypress(function(e){
+ if (e.keyCode == 13 && e.shiftKey||isMobile()) {
+ //do nothing
+ }
+ else if (e.keyCode == 13) {
+ e.preventDefault();
+ $('#chat-form').trigger('submit');
+ }
+ });
+});
+</script>
diff --git a/view/tpl/chatroom_members.tpl b/view/tpl/chatroom_members.tpl
new file mode 100644
index 000000000..ea5fbede8
--- /dev/null
+++ b/view/tpl/chatroom_members.tpl
@@ -0,0 +1,5 @@
+<div id="chatroom_members" class="widget">
+ <h3>{{$header}}</h3>
+ <div id="chatMembers"></div>
+</div>
+
diff --git a/view/tpl/chatroom_new.tpl b/view/tpl/chatroom_new.tpl
new file mode 100644
index 000000000..1497939f6
--- /dev/null
+++ b/view/tpl/chatroom_new.tpl
@@ -0,0 +1,12 @@
+<div id="chatroom-new" class="section-content-tools-wrapper">
+ <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>
+ <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>
+ </form>
+</div>
+{{$acl}}
diff --git a/view/tpl/chatroomlist.tpl b/view/tpl/chatroomlist.tpl
new file mode 100644
index 000000000..a81b8ec1e
--- /dev/null
+++ b/view/tpl/chatroomlist.tpl
@@ -0,0 +1,10 @@
+<div id="chatroom_list" class="widget">
+ <h3>{{$header}}</h3>
+ <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>
+ {{/foreach}}
+ </ul>
+</div>
+
diff --git a/view/tpl/chatrooms.tpl b/view/tpl/chatrooms.tpl
new file mode 100644
index 000000000..71a2acada
--- /dev/null
+++ b/view/tpl/chatrooms.tpl
@@ -0,0 +1,41 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $is_owner}}
+ <button type="button" class="btn btn-success btn-sm pull-right acl-form-trigger" onclick="openClose('chatroom-new');" data-form_id="chatroom-new-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$newroom}}</button>
+ {{/if}}
+ <h2>{{$header}}</h2>
+ </div>
+ {{if $is_owner}}
+ {{$chatroom_new}}
+ {{/if}}
+ {{if $rooms}}
+ <div class="section-content-wrapper-np">
+ <table id="chatrooms-index">
+ <tr>
+ <th width="97%">{{$name}}</th>
+ <th width="1%">{{$expire}}</th>
+ <th width="1%" class="chatrooms-index-tool"></th>
+ <th width="1%"></th>
+ </tr>
+ {{foreach $rooms as $room}}
+ <tr class="chatroom-index-row">
+ <td><a href="{{$baseurl}}/chat/{{$nickname}}/{{$room.cr_id}}">{{$room.cr_name}}</a></td>
+ <td>{{$room.cr_expire}}&nbsp;min</td>
+ <td class="chatrooms-index-tool{{if $room.allow_cid || $room.allow_gid || $room.deny_cid || $room.deny_gid}} dropdown float-right{{/if}}">
+ {{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>
+ <ul id="panel-{{$room.cr_id}}" class="lockview-panel dropdown-menu"></ul>
+ {{/if}}
+ </td>
+ <td><span class="badge badge-default">{{$room.cr_inroom}}</span></td>
+ </tr>
+ {{/foreach}}
+ </table>
+
+ </div>
+ {{else}}
+ <div class="section-content-wrapper">
+ {{$norooms}}
+ </div>
+ {{/if}}
+</div>
diff --git a/view/tpl/cloud.tpl b/view/tpl/cloud.tpl
new file mode 100644
index 000000000..d1567af9f
--- /dev/null
+++ b/view/tpl/cloud.tpl
@@ -0,0 +1,4 @@
+<div class="generic-content-wrapper">
+{{include file="cloud_header.tpl"}}
+{{include file="cloud_directory.tpl"}}
+</div>
diff --git a/view/tpl/cloud_actionspanel.tpl b/view/tpl/cloud_actionspanel.tpl
new file mode 100644
index 000000000..0ebecce29
--- /dev/null
+++ b/view/tpl/cloud_actionspanel.tpl
@@ -0,0 +1,42 @@
+<div id="files-mkdir-tools" class="section-content-tools-wrapper">
+ <label for="files-mkdir">{{$folder_header}}</label>
+ <form id="mkdir-form" method="post" action="file_upload" class="acl-form" data-form_id="mkdir-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ <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">
+ <div class="btn-group">
+ {{if $lockstate}}
+ <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-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>
+ </div>
+ </div>
+ </form>
+ <div class="clear"></div>
+</div>
+<div id="files-upload-tools" class="section-content-tools-wrapper">
+ {{if $quota.limit || $quota.used}}<div class="{{if $quota.warning}}section-content-danger-wrapper{{else}}section-content-info-wrapper{{/if}}">{{if $quota.warning}}<strong>{{$quota.warning}} </strong>{{/if}}{{if $quota.desc}}{{$quota.desc}}<br><br>{{/if}}{{$info}}</div>{{/if}}
+ <form id="ajax-upload-files" method="post" action="file_upload" enctype="multipart/form-data" class="acl-form" data-form_id="ajax-upload-files" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ <input type="hidden" name="directory" value="{{$path}}" />
+ <input type="hidden" name="channick" value="{{$channick}}" />
+ <input type="hidden" name="return_url" value="{{$return_url}}" />
+ <label for="files-upload">{{$upload_header}}</label>
+ <input class="form-group pull-left" id="files-upload" type="file" name="userfile">
+ <div class="pull-right btn-group">
+ <div class="btn-group">
+ {{if $lockstate}}
+ <button class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-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" type="submit" name="submit" value="{{$upload_submit}}">{{$upload_submit}}</button>
+ </div>
+ </div>
+ </form>
+ <div class="clear"></div>
+</div>
+{{$aclselect}}
diff --git a/view/tpl/cloud_directory.tpl b/view/tpl/cloud_directory.tpl
new file mode 100644
index 000000000..adc8584c3
--- /dev/null
+++ b/view/tpl/cloud_directory.tpl
@@ -0,0 +1,45 @@
+<div id="cloud-drag-area" class="section-content-wrapper-np">
+ <table id="cloud-index">
+ <tr>
+ <th width="1%"></th>
+ <th width="92%">{{$name}}</th>
+ <th width="1%"></th><th width="1%"></th><th width="1%"></th><th width="1%"></th>
+ <th width="1%">{{*{{$type}}*}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$size}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$lastmod}}</th>
+ </tr>
+ {{if $parentpath}}
+ <tr>
+ <td><i class="fa fa-level-up"></i>{{*{{$parentpath.icon}}*}}</td>
+ <td><a href="{{$parentpath.path}}" title="{{$parent}}">..</a></td>
+ <td></td><td></td><td></td><td></td>
+ <td>{{*[{{$parent}}]*}}</td>
+ <td class="d-none d-md-table-cell"></td>
+ <td class="d-none d-md-table-cell"></td>
+ </tr>
+ {{/if}}
+ <tr id="new-upload-progress-bar--1"></tr> {{* this is needed to append the upload files in the right order *}}
+ {{foreach $entries as $item}}
+ <tr id="cloud-index-{{$item.attachId}}">
+ <td><i class="fa {{$item.iconFromType}}" title="{{$item.type}}"></i></td>
+ <td><a href="{{$item.fullPath}}">{{$item.displayName}}</a></td>
+ {{if $item.is_owner}}
+ <td class="cloud-index-tool">{{$item.attachIcon}}</td>
+ <td id="file-edit-{{$item.attachId}}" class="cloud-index-tool"></td>
+ <td class="cloud-index-tool"><i class="fakelink fa fa-pencil" onclick="filestorage(event, '{{$nick}}', {{$item.attachId}});"></i></td>
+ <td class="cloud-index-tool"><a href="#" title="{{$delete}}" onclick="dropItem('{{$item.fileStorageUrl}}/{{$item.attachId}}/delete', '#cloud-index-{{$item.attachId}},#cloud-tools-{{$item.attachId}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a></td>
+
+ {{else}}
+ <td></td><td></td><td></td><td></td>
+ {{/if}}
+ <td>{{*{{$item.type}}*}}</td>
+ <td class="d-none d-md-table-cell">{{$item.sizeFormatted}}</td>
+ <td class="d-none d-md-table-cell">{{$item.lastmodified}}</td>
+ </tr>
+ <tr id="cloud-tools-{{$item.attachId}}">
+ <td id="perms-panel-{{$item.attachId}}" colspan="9"></td>
+ </tr>
+
+ {{/foreach}}
+ </table>
+</div>
diff --git a/view/tpl/cloud_header.tpl b/view/tpl/cloud_header.tpl
new file mode 100644
index 000000000..c1e589341
--- /dev/null
+++ b/view/tpl/cloud_header.tpl
@@ -0,0 +1,16 @@
+<div class="section-title-wrapper">
+ {{if $actionspanel}}
+ <div class="pull-right">
+ {{if $is_owner}}
+ <a href="/sharedwithme" class="btn btn-sm btn-outline-secondary"><i class="fa fa-cloud-download"></i>&nbsp;{{$shared}}</a>
+ {{/if}}
+ <button id="files-create-btn" class="btn btn-sm btn-primary" onclick="openClose('files-mkdir-tools'); closeMenu('files-upload-tools');"><i class="fa fa-folder-o"></i>&nbsp;{{$create}}</button>
+ <button id="files-upload-btn" class="btn btn-sm btn-success" onclick="openClose('files-upload-tools'); closeMenu('files-mkdir-tools');"><i class="fa fa-arrow-circle-o-up"></i>&nbsp;{{$upload}}</button>
+ </div>
+ {{/if}}
+ <h2>{{$header}}</h2>
+ <div class="clear"></div>
+</div>
+{{if $actionspanel}}
+ {{$actionspanel}}
+{{/if}}
diff --git a/view/tpl/comment_item.tpl b/view/tpl/comment_item.tpl
new file mode 100755
index 000000000..f490483b8
--- /dev/null
+++ b/view/tpl/comment_item.tpl
@@ -0,0 +1,67 @@
+ {{if $threaded}}
+ <div class="comment-wwedit-wrapper threaded" id="comment-edit-wrapper-{{$id}}" style="display: block;">
+ {{else}}
+ <div class="comment-wwedit-wrapper" id="comment-edit-wrapper-{{$id}}" style="display: block;">
+ {{/if}}
+ <form class="comment-edit-form" style="display: block;" id="comment-edit-form-{{$id}}" action="item" method="post" onsubmit="post_comment({{$id}}); return false;">
+ <input type="hidden" name="type" value="{{$type}}" />
+ <input type="hidden" name="profile_uid" value="{{$profile_uid}}" />
+ <input type="hidden" name="parent" value="{{$parent}}" />
+ <input type="hidden" name="return" value="{{$return_path}}" />
+ <input type="hidden" name="jsreload" value="{{$jsreload}}" />
+ <input type="hidden" name="preview" id="comment-preview-inp-{{$id}}" value="0" />
+ <textarea id="comment-edit-text-{{$id}}" class="comment-edit-text-empty" name="body" onFocus="commentOpenUI(this,{{$id}});" onBlur="commentCloseUI(this,{{$id}});" ondragenter="linkdropper(event);" ondragleave="linkdropexit(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >{{$comment}}</textarea>
+ {{if $qcomment}}
+ <select id="qcomment-select-{{$id}}" name="qcomment-{{$id}}" class="qcomment" onchange="qCommentInsert(this,{{$id}});" >
+ <option value=""></option>
+ {{foreach $qcomment as $qc}}
+ <option value="{{$qc}}">{{$qc}}</option>
+ {{/foreach}}
+ </select>
+ {{/if}}
+ <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">
+ <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>
+ <button class="btn btn-outline-secondary btn-sm" title="{{$editalic}}" onclick="insertbbcomment('{{$comment}}','i', {{$id}}); return false;">
+ <i class="fa fa-italic comment-icon"></i>
+ </button>
+ <button class="btn btn-outline-secondary btn-sm" title="{{$eduline}}" onclick="insertbbcomment('{{$comment}}','u', {{$id}}); return false;">
+ <i class="fa fa-underline comment-icon"></i>
+ </button>
+ <button class="btn btn-outline-secondary btn-sm" title="{{$edquote}}" onclick="insertbbcomment('{{$comment}}','quote', {{$id}}); return false;">
+ <i class="fa fa-quote-left comment-icon"></i>
+ </button>
+ <button class="btn btn-outline-secondary btn-sm" title="{{$edcode}}" onclick="insertbbcomment('{{$comment}}','code', {{$id}}); return false;">
+ <i class="fa fa-terminal comment-icon"></i>
+ </button>
+ </div>
+ <div class="btn-group mr-2">
+ <button class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertCommentURL('{{$comment}}',{{$id}}); return false;">
+ <i class="fa fa-link comment-icon"></i>
+ </button>
+ </div>
+ {{if $feature_encrypt}}
+ <div class="btn-group mr-2">
+ <button class="btn btn-outline-secondary btn-sm" title="{{$encrypt}}" onclick="red_encrypt('{{$cipher}}','#comment-edit-text-' + '{{$id}}',''); return false;">
+ <i class="fa fa-key comment-icon"></i>
+ </button>
+ </div>
+ {{/if}}
+ {{$comment_buttons}}
+ </div>
+ <div class="btn-group float-right" 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>
+ </button>
+ {{/if}}
+ <button id="comment-edit-submit-{{$id}}" class="btn btn-primary btn-sm" type="submit" name="button-submit" onclick="post_comment({{$id}}); return false;">{{$submit}}</button>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </form>
+ </div>
+ <div id="comment-edit-preview-{{$id}}" class="comment-edit-preview"></div>
diff --git a/view/tpl/common_friends.tpl b/view/tpl/common_friends.tpl
new file mode 100755
index 000000000..489717e78
--- /dev/null
+++ b/view/tpl/common_friends.tpl
@@ -0,0 +1,15 @@
+<div class="profile-match-wrapper">
+ <div class="profile-match-photo">
+ <a href="{{$url}}">
+ <img src="{{$photo}}" alt="{{$name}}" width="80" height="80" title="{{$name}} [{{$url}}]" />
+ </a>
+ </div>
+ <div class="profile-match-break"></div>
+ <div class="profile-match-name">
+ <a href="{{$url}}" title="{{$name}}[{{$tags}}]">{{$name}}</a>
+ </div>
+ {{if $note}}
+ <div class="profile-match-note">{{$note}}</div>
+ {{/if}}
+ <div class="profile-match-end"></div>
+</div>
diff --git a/view/tpl/common_tabs.tpl b/view/tpl/common_tabs.tpl
new file mode 100755
index 000000000..29c46369b
--- /dev/null
+++ b/view/tpl/common_tabs.tpl
@@ -0,0 +1,17 @@
+<div class="mb-4 d-none d-md-block">
+ <ul class="nav nav-tabs nav-fill">
+ {{foreach $tabs as $tab}}
+ <li class="nav-item"{{if $tab.id}} id="{{$tab.id}}"{{/if}}><a class="nav-link{{if $tab.sel}} {{$tab.sel}}{{/if}}" href="{{$tab.url}}"{{if $tab.title}} title="{{$tab.title}}"{{/if}}>{{$tab.label}}</a></li>
+ {{/foreach}}
+ </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">
+ <i class="fa fa-bars"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{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}}
+ </div>
+</div>
diff --git a/view/tpl/connection_template.tpl b/view/tpl/connection_template.tpl
new file mode 100755
index 000000000..16915abda
--- /dev/null
+++ b/view/tpl/connection_template.tpl
@@ -0,0 +1,48 @@
+<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}}
+ <a href="#" class="btn btn-danger btn-sm" 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></a>
+ {{if $contact.approve}}
+ </form>
+ {{/if}}
+ </div>
+ <h3>{{if $contact.public_forum}}<i class="fa fa-comments-o"></i>&nbsp;{{/if}}<a href="{{$contact.url}}" title="{{$contact.img_hover}}" >{{$contact.name}}</a>{{if $contact.phone}}&nbsp;<a class="btn btn-outline-secondary btn-sm" href="tel:{{$contact.phone}}" title="{{$contact.call}}"><i class="fa fa-phone connphone"></i></a>{{/if}}</h3>
+ </div>
+ <div class="section-content-tools-wrapper">
+ <div class="contact-photo-wrapper" >
+ <a href="{{$contact.url}}" title="{{$contact.img_hover}}" ><img class="directory-photo-img {{if $contact.classes}}{{$contact.classes}}{{/if}}" src="{{$contact.thumb}}" alt="{{$contact.name}}" /></a>
+ </div>
+ <div class="contact-info">
+ {{if $contact.status}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$contact.status_label}}:</span> {{$contact.status}}
+ </div>
+ {{/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>
+ </div>
+ {{/if}}
+ {{if $contact.webbie}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$contact.webbie_label}}:</span> {{$contact.webbie}}
+ </div>
+ {{/if}}
+ {{if $contact.network}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$contact.network_label}}:</span> {{$contact.network}} - <a href="{{$contact.recentlink}}">{{$contact.recent_label}}</a>
+ </div>
+ {{/if}}
+ </div>
+
+ </div>
+</div>
+
diff --git a/view/tpl/connections.tpl b/view/tpl/connections.tpl
new file mode 100755
index 000000000..13261965a
--- /dev/null
+++ b/view/tpl/connections.tpl
@@ -0,0 +1,36 @@
+<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()">
+ <i class="fa fa-search"></i>&nbsp;{{$label}}
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{$sort}}">
+ <i class="fa fa-sort"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{foreach $tabs as $menu}}
+ <a class="dropdown-item" href="{{$menu.url}}">{{$menu.label}}</a>
+ {{/foreach}}
+ </div>
+ </div>
+ {{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" >
+ <div class="input-group form-group">
+ <input type="text" name="search" id="contacts-search" class="form-control" onfocus="this.select();" value="{{$search}}" placeholder="{{$desc}}" />
+ <div class="input-group-btn">
+ <button id="contacts-search-submit" class="btn btn-outline-secondary" type="submit" name="submit" value="{{$submit}}"><i class="fa fa-fw fa-search"></i></button>
+ </div>
+ </div>
+ </form>
+ </div>
+ <div id="connections-wrapper clearfix">
+ {{foreach $contacts as $contact}}
+ {{include file="connection_template.tpl"}}
+ {{/foreach}}
+ <div id="page-end"></div>
+ </div>
+</div>
+<script>$(document).ready(function() { loadingPage = false;});</script>
+<div id="page-spinner"></div>
diff --git a/view/tpl/contact_block.tpl b/view/tpl/contact_block.tpl
new file mode 100755
index 000000000..580a8a41c
--- /dev/null
+++ b/view/tpl/contact_block.tpl
@@ -0,0 +1,14 @@
+<div id="contact-block" class="widget">
+ <h3>{{$contacts}}</h3>
+ {{if $micropro}}
+ {{if $viewconnections}}
+ <a class="allcontact-link" href="viewconnections/{{$nickname}}">{{$viewconnections}}</a>
+ {{/if}}
+ <div class='contact-block-content'>
+ {{foreach $micropro as $m}}
+ {{$m}}
+ {{/foreach}}
+ </div>
+ {{/if}}
+</div>
+<div class="clear"></div>
diff --git a/view/tpl/contact_head.tpl b/view/tpl/contact_head.tpl
new file mode 100755
index 000000000..72e7edbfb
--- /dev/null
+++ b/view/tpl/contact_head.tpl
@@ -0,0 +1,30 @@
+<script language="javascript" type="text/javascript"
+ src="{{$baseurl}}/library/tinymce/jscripts/tiny_mce/tiny_mce_src.js"></script>
+ <script language="javascript" type="text/javascript">
+
+tinyMCE.init({
+ theme : "advanced",
+ mode : "{{$editselect}}",
+ elements: "contact-edit-info",
+ plugins : "bbcode",
+ theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "center",
+ theme_advanced_styles : "blockquote,code",
+ gecko_spellcheck : true,
+ entity_encoding : "raw",
+ add_unload_trigger : false,
+ remove_linebreaks : false,
+ force_p_newlines : false,
+ force_br_newlines : true,
+ forced_root_block : '',
+ content_css: "{{$baseurl}}/view/custom_tinymce.css"
+
+
+});
+
+
+</script>
+
diff --git a/view/tpl/contact_slider.tpl b/view/tpl/contact_slider.tpl
new file mode 100755
index 000000000..550abc147
--- /dev/null
+++ b/view/tpl/contact_slider.tpl
@@ -0,0 +1,20 @@
+<div id="contact-slider" class="slider form-group"><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
+ // the slider container is hidden (display: none) during rendering.
+ // So let's unhide it to render and hide again afterwards.
+ if(!$("#affinity-tool-collapse").hasClass("in")) {
+ $("#affinity-tool-collapse").addClass("in");
+ makeContactSlider();
+ $("#affinity-tool-collapse").removeClass("in");
+ }
+ else {
+ makeContactSlider();
+ }
+});
+
+function makeContactSlider() {
+ $("#contact-range").jRange({ from: {{$min|default:'0'}}, to: 99, step: 1, scale: [{{$labels}}], width:'98%', showLabels: false, onstatechange: function(v) { $("#contact-closeness-mirror").val(v); } });
+}
+</script>
diff --git a/view/tpl/contact_template.tpl b/view/tpl/contact_template.tpl
new file mode 100755
index 000000000..3d1bfa4a4
--- /dev/null
+++ b/view/tpl/contact_template.tpl
@@ -0,0 +1,8 @@
+<div class="contact-entry-wrapper" id="contact-entry-wrapper-{{$contact.id}}" >
+ <div class="contact-entry-photo-wrapper" >
+ <a href="{{$contact.link}}" title="{{$contact.img_hover}}" ><img class="contact-block-img" src="{{$contact.thumb}}" alt="{{$contact.name}}" /></a>
+ </div>
+ <div class="contact-entry-photo-end" ></div>
+ <div class="contact-entry-name" id="contact-entry-name-{{$contact.id}}" >{{$contact.name}}</div>
+ <div class="contact-entry-end" ></div>
+</div>
diff --git a/view/tpl/contactsajax.tpl b/view/tpl/contactsajax.tpl
new file mode 100644
index 000000000..a6b5ad791
--- /dev/null
+++ b/view/tpl/contactsajax.tpl
@@ -0,0 +1,3 @@
+{{foreach $contacts as $contact}}
+{{include file="connection_template.tpl"}}
+{{/foreach}}
diff --git a/view/tpl/conv.tpl b/view/tpl/conv.tpl
new file mode 100755
index 000000000..ddb959b84
--- /dev/null
+++ b/view/tpl/conv.tpl
@@ -0,0 +1,17 @@
+{{foreach $threads as $thread}}
+<div id="thread-wrapper-{{$thread.id}}" class="thread-wrapper">
+ {{foreach $thread.items as $item}}
+ {{if $item.comment_firstcollapsed}}
+ <div class="hide-comments-outer">
+ <span id="hide-comments-total-{{$thread.id}}" class="hide-comments-total">{{$thread.num_comments}}</span> <span id="hide-comments-{{$thread.id}}" class="hide-comments fakelink" onclick="showHideComments({{$thread.id}});">{{$thread.hide_text}}</span>
+ </div>
+ <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/conv_frame.tpl b/view/tpl/conv_frame.tpl
new file mode 100755
index 000000000..aa7b55e9b
--- /dev/null
+++ b/view/tpl/conv_frame.tpl
@@ -0,0 +1,5 @@
+<div id="threads-begin"></div>
+<div id="threads-end"></div>
+<div id="conversation-end"></div>
+<div id="page-spinner"></div>
+
diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl
new file mode 100755
index 000000000..2d51af4ff
--- /dev/null
+++ b/view/tpl/conv_item.tpl
@@ -0,0 +1,250 @@
+{{if $item.comment_firstcollapsed}}
+<div class="hide-comments-outer fakelink" onclick="showHideComments({{$item.id}});">
+ <span id="hide-comments-{{$item.id}}" class="hide-comments">{{$item.hide_text}}</span>&nbsp;<span id="hide-comments-total-{{$item.id}}" class="hide-comments-total">{{$item.num_comments}}</span>
+</div>
+<div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: none;">
+{{/if}}
+ <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} mb-4 generic-content-wrapper h-entry {{else}} u-comment h-cite {{/if}} item_{{$item.submid}}">
+ <a name="item_{{$item.id}}" ></a>
+ <div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
+ <div class="clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
+ {{if $item.photo}}
+ <div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
+ {{$item.photo}}
+ </div>
+ {{/if}}
+ {{if $item.event}}
+ <div class="wall-event-item" id="wall-event-item-{{$item.id}}">
+ {{$item.event}}
+ </div>
+ {{/if}}
+ {{if $item.title && !$item.event}}
+ <div class="p-2{{if $item.is_new}} bg-primary text-white{{/if}} wall-item-title h3{{if !$item.photo}} rounded-top{{/if}}" id="wall-item-title-{{$item.id}}">
+ {{if $item.title_tosource}}{{if $item.plink}}<a href="{{$item.plink.href}}" title="{{$item.title}} ({{$item.plink.title}})">{{/if}}{{/if}}{{$item.title}}{{if $item.title_tosource}}{{if $item.plink}}</a>{{/if}}{{/if}}
+ </div>
+ {{if ! $item.is_new}}
+ <hr class="m-0">
+ {{/if}}
+ {{/if}}
+ <div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment}} wall-item-head-new rounded-top{{/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}}">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-photo-link u-url" id="wall-item-photo-link-{{$item.id}}"><img src="{{$item.thumb}}" class="wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" /></a>
+ </div>
+ </div>
+ {{if $item.lock}}
+ <div class="wall-item-lock dropdown">
+ <i class="fa fa-lock lockview" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
+ </div>
+ {{/if}}
+ <div class="wall-item-author">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" >{{$item.name}}</span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
+ {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ </div>
+ </div>
+
+ {{if $item.body}}
+ <div class="p-2 wall-item-content clearfix" id="wall-item-content-{{$item.id}}">
+ <div class="wall-item-body e-content" id="wall-item-body-{{$item.id}}" >
+ {{$item.body}}
+ </div>
+ </div>
+ {{/if}}
+ {{if $item.has_tags}}
+ <div class="p-2 wall-item-tools clearfix">
+
+ <div class="body-tags">
+ <span class="tag">{{$item.mentions}} {{$item.tags}} {{$item.categories}} {{$item.folders}}</span>
+ </div>
+ {{**
+ {{if $item.mentions}}
+ <div class="body-tags" id="item-mentions">
+ <span class="tag">{{$item.mentions}}</span>
+ </div>
+ {{/if}}
+ {{if $item.tags}}
+ <div class="body-tags" id="item-tags">
+ <span class="tag">{{$item.tags}}</span>
+ </div>
+ {{/if}}
+ {{if $item.categories}}
+ <div class="body-tags" id="item-categories">
+ <span class="tag p-category">{{$item.categories}}</span>
+ </div>
+ {{/if}}
+ {{if $item.folders}}
+ <div class="body-tags" id="item-folders">
+ <span class="tag">{{$item.folders}}</span>
+ </div>
+ {{/if}}
+ **}}
+ </div>
+ {{/if}}
+ <div class="p-2 clearfix wall-item-tools">
+ <div class="wall-item-tools-right pull-right">
+ {{if $item.toplevel && $item.emojis && $item.reactions}}
+ <div class="btn-group dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-react-{{$item.id}}">
+ <i class="fa fa-smile-o"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{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}}
+ </div>
+ </div>
+ {{/if}}
+ <div class="btn-group dropdown">
+ {{if $item.like}}
+ <button type="button" title="{{$item.like.0}}" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$item.id}},'like'); return false;">
+ <i class="fa fa-thumbs-o-up{{if $item.my_responses.like}} ivoted{{/if}}" ></i>
+ </button>
+ {{/if}}
+ {{if $item.dislike}}
+ <button type="button" title="{{$item.dislike.0}}" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$item.id}},'dislike'); return false;">
+ <i class="fa fa-thumbs-o-down{{if $item.my_responses.dislike}} ivoted{{/if}}" ></i>
+ </button>
+ {{/if}}
+ {{if $item.isevent}}
+ <div class="btn-group dropdown">
+ <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}}">
+ <i class="fa fa-calendar-check-o"></i>
+ </button>
+ <div class="dropdown-menu">
+ <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>
+ <a class="dropdown-item" href="#" title="{{$item.attend.1}}" onclick="itemAddToCal({{$item.id}}), dolike({{$item.id}},'attendno'); return false;">
+ <i class="item-act-list fa fa-times{{if $item.my_responses.attendno}} ivoted{{/if}}" ></i> {{$item.attend.1}}
+ </a>
+ <a class="dropdown-item" href="#" title="{{$item.attend.2}}" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendmaybe'); return false;">
+ <i class="item-act-list fa fa-question{{if $item.my_responses.attendmaybe}} ivoted{{/if}}" ></i> {{$item.attend.2}}
+ </a>
+ </div>
+ </div>
+ {{/if}}
+ {{if $item.canvote}}
+ <div class="btn-group dropdown">
+ <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}}">
+ <i class="fa fa-check-square-o"></i>
+ </button>
+ <div class="dropdown-menu" 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>
+ <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 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>
+ </div>
+ </div>
+ {{/if}}
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-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}}">
+ {{if $item.share}}
+ <a class="dropdown-item" href="#" onclick="jotShare({{$item.id}}); return false"><i class="generic-icons-nav fa fa-fw fa-retweet" title="{{$item.share.0}}"></i>{{$item.share.0}}</a>
+ {{/if}}
+ {{if $item.plink}}
+ <a class="dropdown-item" href="{{$item.plink.href}}" title="{{$item.plink.title}}" class="u-url"><i class="generic-icons-nav fa fa-fw fa-external-link"></i>{{$item.plink.title}}</a>
+ {{/if}}
+ {{if $item.edpost}}
+ <a class="dropdown-item" href="{{$item.edpost.0}}" title="{{$item.edpost.1}}"><i class="generic-icons-nav fa fa-fw fa-pencil"></i>{{$item.edpost.1}}</a>
+ {{/if}}
+ {{if $item.tagger}}
+ <a class="dropdown-item" href="#" onclick="itemTag({{$item.id}}); return false;"><i id="tagger-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-tag" title="{{$item.tagger.tagit}}"></i>{{$item.tagger.tagit}}</a>
+ {{/if}}
+ {{if $item.filer}}
+ <a class="dropdown-item" href="#" onclick="itemFiler({{$item.id}}); return false;"><i id="filer-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-folder-open" title="{{$item.filer}}"></i>{{$item.filer}}</a>
+ {{/if}}
+ {{if $item.bookmark}}
+ <a class="dropdown-item" href="#" onclick="itemBookmark({{$item.id}}); return false;"><i id="bookmarker-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-bookmark" title="{{$item.bookmark}}"></i>{{$item.bookmark}}</a>
+ {{/if}}
+ {{if $item.addtocal}}
+ <a class="dropdown-item" href="#" onclick="itemAddToCal({{$item.id}}); return false;"><i id="addtocal-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-calendar" title="{{$item.addtocal}}"></i>{{$item.addtocal}}</a>
+ {{/if}}
+ {{if $item.star}}
+ <a class="dropdown-item" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-star {{$item.star.isstarred}}" 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="generic-icons-nav fa fa-fw fa-{{$mitem.icon}}"></i>{{$mitem.title}}</a>
+ {{/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>
+ {{/if}}
+ {{if $item.thread_author_menu}}
+ <div class="dropdown-divider"></div>
+ {{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>
+ {{/foreach}}
+ {{/if}}
+ {{if $item.edpost && $item.dreport}}
+ <a class="dropdown-item" href="dreport/{{$item.mid}}">{{$item.dreport}}</a>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ <div id="like-rotator-{{$item.id}}" class="like-rotator"></div>
+
+ {{if $item.responses || $item.attachments}}
+ <div class="wall-item-tools-left{{if ($item.responses.count > 1) || ($item.responses.count && $item.attachments)}} btn-group{{/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>
+ <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>
+ {{if $response.modal}}
+ <div class="modal" id="{{$verb}}Modal-{{$item.id}}">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">{{$response.count}} {{$response.button}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </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>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+ {{else}}
+ <div class="dropdown-menu">{{foreach $response.list as $liker}}{{$liker}}{{/foreach}}</div>
+ {{/if}}
+ </div>
+ {{/if}}
+ {{/foreach}}
+ </div>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ {{if $item.toplevel}}
+ {{foreach $item.children as $child}}
+ {{include file="{{$child.template}}" item=$child}}
+ {{/foreach}}
+ {{/if}}
+ {{if $item.comment}}
+ <div class="p-2 wall-item-comment-wrapper{{if $item.children}} wall-item-comment-wrapper-wc{{/if}}" >
+ {{$item.comment}}
+ </div>
+ {{/if}}
+ </div>
+{{if $item.comment_lastcollapsed}}
+</div>
+{{/if}}
diff --git a/view/tpl/conv_list.tpl b/view/tpl/conv_list.tpl
new file mode 100755
index 000000000..59153e41f
--- /dev/null
+++ b/view/tpl/conv_list.tpl
@@ -0,0 +1,251 @@
+{{if $item.comment_firstcollapsed}}
+<div class="hide-comments-outer fakelink" onclick="showHideComments({{$item.id}});">
+ <span id="hide-comments-{{$item.id}}" class="hide-comments">{{$item.hide_text}}</span>&nbsp;<span id="hide-comments-total-{{$item.id}}" class="hide-comments-total">{{$item.num_comments}}</span>
+</div>
+<div id="collapsed-comments-{{$item.id}}" class="collapsed-comments" style="display: none;">
+{{/if}}
+ <div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} mb-4 generic-content-wrapper h-entry {{else}} u-comment h-cite {{/if}} item_{{$item.submid}}">
+ <a name="item_{{$item.id}}" ></a>
+ <div class="wall-item-outside-wrapper{{if $item.is_comment}} comment{{/if}}{{if $item.previewing}} preview{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
+ <div class="clearfix wall-item-content-wrapper{{if $item.is_comment}} comment{{/if}}" id="wall-item-content-wrapper-{{$item.id}}">
+ {{if $item.photo}}
+ <div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
+ {{$item.photo}}
+ </div>
+ {{/if}}
+ {{if $item.event}}
+ <div class="wall-event-item" id="wall-event-item-{{$item.id}}">
+ {{$item.event}}
+ </div>
+ {{/if}}
+ {{if $item.title && !$item.event}}
+ <div class="p-2{{if $item.is_new}} bg-primary text-white{{/if}} wall-item-title h3{{if !$item.photo}} rounded-top{{/if}}" id="wall-item-title-{{$item.id}}">
+ {{if $item.title_tosource}}{{if $item.plink}}<a href="{{$item.plink.href}}" title="{{$item.title}} ({{$item.plink.title}})">{{/if}}{{/if}}{{$item.title}}{{if $item.title_tosource}}{{if $item.plink}}</a>{{/if}}{{/if}}
+ </div>
+ {{if ! $item.is_new}}
+ <hr class="m-0">
+ {{/if}}
+ {{/if}}
+ <div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment}} wall-item-head-new rounded-top{{/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}}">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-photo-link u-url" id="wall-item-photo-link-{{$item.id}}"><img src="{{$item.thumb}}" class="wall-item-photo{{$item.sparkle}} u-photo p-name" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" /></a>
+ </div>
+ </div>
+ {{if $item.lock}}
+ <div class="wall-item-lock dropdown">
+ <i class="fa fa-lock lockview" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i>&nbsp;
+ <div id="panel-{{$item.id}}" class="dropdown-menu"></div>
+ </div>
+ {{/if}}
+ <div class="wall-item-author">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" >{{$item.name}}</span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
+ {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location p-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}"><time class="dt-published" datetime="{{$item.isotime}}">{{$item.localtime}}</time>{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ </div>
+ </div>
+
+ {{if $item.body}}
+ <div class="p-2 wall-item-content clearfix" id="wall-item-content-{{$item.id}}">
+ <div class="wall-item-body e-content" id="wall-item-body-{{$item.id}}" >
+ {{$item.body}}
+ </div>
+ </div>
+ {{/if}}
+ {{if $item.has_tags}}
+ <div class="p-2 wall-item-tools clearfix">
+
+ <div class="body-tags">
+ <span class="tag">{{$item.mentions}} {{$item.tags}} {{$item.categories}} {{$item.folders}}</span>
+ </div>
+ {{**
+ {{if $item.mentions}}
+ <div class="body-tags" id="item-mentions">
+ <span class="tag">{{$item.mentions}}</span>
+ </div>
+ {{/if}}
+ {{if $item.tags}}
+ <div class="body-tags" id="item-tags">
+ <span class="tag">{{$item.tags}}</span>
+ </div>
+ {{/if}}
+ {{if $item.categories}}
+ <div class="body-tags" id="item-categories">
+ <span class="tag p-category">{{$item.categories}}</span>
+ </div>
+ {{/if}}
+ {{if $item.folders}}
+ <div class="body-tags" id="item-folders">
+ <span class="tag">{{$item.folders}}</span>
+ </div>
+ {{/if}}
+ **}}
+ </div>
+ {{/if}}
+ <div class="p-2 clearfix wall-item-tools">
+ <div class="wall-item-tools-right pull-right">
+ {{if $item.toplevel && $item.emojis && $item.reactions}}
+ <div class="btn-group dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-react-{{$item.id}}">
+ <i class="fa fa-smile-o"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{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}}
+ </div>
+ </div>
+ {{/if}}
+ <div class="btn-group dropdown">
+ {{if $item.like}}
+ <button type="button" title="{{$item.like.0}}" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$item.id}},'like'); return false;">
+ <i class="fa fa-thumbs-o-up{{if $item.my_responses.like}} ivoted{{/if}}" ></i>
+ </button>
+ {{/if}}
+ {{if $item.dislike}}
+ <button type="button" title="{{$item.dislike.0}}" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$item.id}},'dislike'); return false;">
+ <i class="fa fa-thumbs-o-down{{if $item.my_responses.dislike}} ivoted{{/if}}" ></i>
+ </button>
+ {{/if}}
+ {{if $item.isevent}}
+ <div class="btn-group dropdown">
+ <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}}">
+ <i class="fa fa-calendar-check-o"></i>
+ </button>
+ <div class="dropdown-menu">
+ <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>
+ <a class="dropdown-item" href="#" title="{{$item.attend.1}}" onclick="itemAddToCal({{$item.id}}), dolike({{$item.id}},'attendno'); return false;">
+ <i class="item-act-list fa fa-times{{if $item.my_responses.attendno}} ivoted{{/if}}" ></i> {{$item.attend.1}}
+ </a>
+ <a class="dropdown-item" href="#" title="{{$item.attend.2}}" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendmaybe'); return false;">
+ <i class="item-act-list fa fa-question{{if $item.my_responses.attendmaybe}} ivoted{{/if}}" ></i> {{$item.attend.2}}
+ </a>
+ </div>
+ </div>
+ {{/if}}
+ {{if $item.canvote}}
+ <div class="btn-group dropdown">
+ <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}}">
+ <i class="fa fa-check-square-o"></i>
+ </button>
+ <div class="dropdown-menu" 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>
+ <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 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>
+ </div>
+ </div>
+ {{/if}}
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-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}}">
+ {{if $item.share}}
+ <a class="dropdown-item" href="#" onclick="jotShare({{$item.id}}); return false"><i class="generic-icons-nav fa fa-fw fa-retweet" title="{{$item.share.0}}"></i>{{$item.share.0}}</a>
+ {{/if}}
+ {{if $item.plink}}
+ <a class="dropdown-item" href="{{$item.plink.href}}" title="{{$item.plink.title}}" class="u-url"><i class="generic-icons-nav fa fa-fw fa-external-link"></i>{{$item.plink.title}}</a>
+ {{/if}}
+ {{if $item.edpost}}
+ <a class="dropdown-item" href="{{$item.edpost.0}}" title="{{$item.edpost.1}}"><i class="generic-icons-nav fa fa-fw fa-pencil"></i>{{$item.edpost.1}}</a>
+ {{/if}}
+ {{if $item.tagger}}
+ <a class="dropdown-item" href="#" onclick="itemTag({{$item.id}}); return false;"><i id="tagger-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-tag" title="{{$item.tagger.tagit}}"></i>{{$item.tagger.tagit}}</a>
+ {{/if}}
+ {{if $item.filer}}
+ <a class="dropdown-item" href="#" onclick="itemFiler({{$item.id}}); return false;"><i id="filer-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-folder-open" title="{{$item.filer}}"></i>{{$item.filer}}</a>
+ {{/if}}
+ {{if $item.bookmark}}
+ <a class="dropdown-item" href="#" onclick="itemBookmark({{$item.id}}); return false;"><i id="bookmarker-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-bookmark" title="{{$item.bookmark}}"></i>{{$item.bookmark}}</a>
+ {{/if}}
+ {{if $item.addtocal}}
+ <a class="dropdown-item" href="#" onclick="itemAddToCal({{$item.id}}); return false;"><i id="addtocal-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-calendar" title="{{$item.addtocal}}"></i>{{$item.addtocal}}</a>
+ {{/if}}
+ {{if $item.star}}
+ <a class="dropdown-item" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="generic-icons-nav fa fa-fw fa-star {{$item.star.isstarred}}" 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="generic-icons-nav fa fa-fw fa-{{$mitem.icon}}"></i>{{$mitem.title}}</a>
+ {{/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>
+ {{/if}}
+ {{if $item.thread_author_menu}}
+ <div class="dropdown-divider"></div>
+ {{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>
+ {{/foreach}}
+ {{/if}}
+ {{if $item.edpost && $item.dreport}}
+ <a class="dropdown-item" href="dreport/{{$item.mid}}">{{$item.dreport}}</a>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ <div id="like-rotator-{{$item.id}}" class="like-rotator"></div>
+ <div class="wall-item-tools-left{{if $item.unseen_comments || $item.like_count || $item.dislike_count || $item.attachments}} btn-group{{/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>
+ <ul class="dropdown-menu" role="menu" aria-labelledby="attachment-menu-{{$item.id}}">{{$item.attachments}}</ul>
+ </div>
+ {{/if}}
+ <div class="wall-item-list-comments btn-group">
+ <a class="btn btn-outline-secondary btn-sm" href="{{$item.viewthread}}">
+ {{$item.comment_count_txt}}{{if $item.unseen_comments}}<span class="unseen-wall-indicator-{{$item.id}}">, {{$item.list_unseen_txt}}</span>{{/if}}
+ </a>
+ </div>
+ {{if $item.unseen_comments}}
+ <div class="unseen-wall-indicator-{{$item.id}} btn-group">
+ <button class="btn btn-outline-secondary btn-sm" title="{{$item.markseen}}" onclick="markItemRead({{$item.id}}); return false;">
+ <i class="fa fa-check-square-o"></i>
+ </button>
+ </div>
+ {{/if}}
+ {{if $item.responses }}
+ {{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>
+ {{if $response.modal}}
+ <div class="modal" id="{{$verb}}Modal-{{$item.id}}">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">{{$response.count}} {{$response.button}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </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>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+ {{else}}
+ <div class="dropdown-menu">{{foreach $response.list as $liker}}{{$liker}}{{/foreach}}</div>
+ {{/if}}
+ </div>
+ {{/if}}
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+{{if $item.comment_lastcollapsed}}
+</div>
+{{/if}}
diff --git a/view/tpl/conversation.tpl b/view/tpl/conversation.tpl
new file mode 100755
index 000000000..82c7be922
--- /dev/null
+++ b/view/tpl/conversation.tpl
@@ -0,0 +1,20 @@
+<div id="threads-begin"></div>
+{{foreach $threads as $thread}}
+<div id="thread-wrapper-{{$thread.id}}" class="thread-wrapper generic-content-wrapper">
+ {{foreach $thread.items as $item}}
+ {{if $item.comment_firstcollapsed}}
+ <div class="hide-comments-outer">
+ <span id="hide-comments-total-{{$thread.id}}" class="hide-comments-total">{{$thread.num_comments}}</span> <span id="hide-comments-{{$thread.id}}" class="hide-comments fakelink" onclick="showHideComments({{$thread.id}});">{{$thread.hide_text}}</span>
+ </div>
+ <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}}
+<div id="threads-end"></div>
+<div id="conversation-end"></div>
diff --git a/view/tpl/convobj.tpl b/view/tpl/convobj.tpl
new file mode 100755
index 000000000..d5cee1170
--- /dev/null
+++ b/view/tpl/convobj.tpl
@@ -0,0 +1,4 @@
+{{foreach $threads as $item}}
+{{include file="{{$item.template}}"}}
+{{/foreach}}
+
diff --git a/view/tpl/cover_photo.tpl b/view/tpl/cover_photo.tpl
new file mode 100755
index 000000000..4352501ae
--- /dev/null
+++ b/view/tpl/cover_photo.tpl
@@ -0,0 +1,29 @@
+<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="cover_photo" method="post">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <div id="profile-photo-upload-wrapper">
+
+ <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" />
+ <div class="clear"></div>
+ <br />
+ <br />
+ <div id="profile-photo-submit-wrapper">
+ <input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
+ </div>
+ </div>
+
+ </form>
+ <br />
+ <br />
+ <div id="profile-photo-link-select-wrapper">
+ {{$select}}
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/cover_photo_widget.tpl b/view/tpl/cover_photo_widget.tpl
new file mode 100755
index 000000000..a9c384d2f
--- /dev/null
+++ b/view/tpl/cover_photo_widget.tpl
@@ -0,0 +1,76 @@
+<script>
+ var aside_padding_top;
+ var section_padding_top;
+ var coverSlid = false;
+
+ $(document).ready(function() {
+
+ aside_padding_top = parseInt($('aside').css('padding-top'));
+ section_padding_top = parseInt($('section').css('padding-top'));
+
+ $(document).on('click', slideUpCover);
+
+ if($('#cover-photo').length && $(window).width() > 755) {
+ if($(window).scrollTop() < $('#cover-photo').height()) {
+ $('.navbar').removeClass('fixed-top');
+ $('main').css('margin-top', - $('nav').outerHeight(true) + 'px');
+ $('main').css('opacity', 0);
+ }
+ }
+ else {
+ $('#cover-photo').remove();
+ coverSlid = true;
+ }
+ });
+
+ $(window).scroll(function () {
+ if($('#cover-photo').length && $(window).width() > 755 && $(window).scrollTop() >= $('#cover-photo').height()) {
+ $('.navbar').addClass('fixed-top');
+ $('main').css('margin-top', '');
+ $('main').css('opacity', 1);
+ coverSlid = true;
+ }
+ else if ($('#cover-photo').length && $(window).width() > 755 && $(window).scrollTop() < $('#cover-photo').height()){
+ if(coverSlid) {
+ $(window).scrollTop(Math.ceil($('#cover-photo').height()));
+ setTimeout(function(){ coverSlid = false; }, 1000);
+ }
+ else {
+ if($(window).scrollTop() < $('#cover-photo').height()) {
+ $('.navbar').removeClass('fixed-top');
+ $('main').css('margin-top', - $('nav').outerHeight(true) + 'px');
+ $('main').css('opacity', 0);
+ }
+ }
+ }
+ if($('#cover-photo').length && $('main').css('opacity') < 1) {
+ $('main').css('opacity', ($(window).scrollTop()/$('#cover-photo').height()).toFixed(1));
+ }
+ });
+
+ $(window).resize(function () {
+ if($('#cover-photo').length && $(window).width() < 755) {
+ $('#cover-photo').remove();
+ $('.navbar').addClass('fixed-top');
+ $('main').css('opacity', 1);
+ coverSlid = true;
+ }
+
+ });
+
+ function slideUpCover() {
+ if(coverSlid) {
+ return;
+ }
+ $('html, body').animate({scrollTop: Math.ceil($('#cover-photo').height()) + 'px' });
+ return;
+ }
+</script>
+
+<div id="cover-photo" title="{{$hovertitle}}">
+ {{$photo_html}}
+ <div id="cover-photo-caption">
+ <h1>{{$title}}</h1>
+ <h3>{{$subtitle}}</h3>
+ </div>
+</div>
diff --git a/view/tpl/cropbody.tpl b/view/tpl/cropbody.tpl
new file mode 100755
index 000000000..01d9a24a0
--- /dev/null
+++ b/view/tpl/cropbody.tpl
@@ -0,0 +1,58 @@
+<h1>{{$title}}</h1>
+<p id="cropimage-desc">
+{{$desc}}
+</p>
+<div id="cropimage-wrapper">
+<img src="{{$image_url}}" id="croppa" class="imgCrop" alt="{{$title}}" />
+</div>
+<div id="cropimage-preview-wrapper" >
+<div id="previewWrap" ></div>
+</div>
+
+<script type="text/javascript" language="javascript">
+
+ function onEndCrop( coords, dimensions ) {
+ $( 'x1' ).value = coords.x1;
+ $( 'y1' ).value = coords.y1;
+ $( 'x2' ).value = coords.x2;
+ $( 'y2' ).value = coords.y2;
+ $( 'width' ).value = dimensions.width;
+ $( 'height' ).value = dimensions.height;
+ }
+
+ Event.observe( window, 'load', function() {
+ new Cropper.ImgWithPreview(
+ 'croppa',
+ {
+ previewWrap: 'previewWrap',
+ minWidth: 300,
+ minHeight: 300,
+ maxWidth: 1024,
+ maxHeight: 1024,
+ ratioDim: { x: 100, y:100 },
+ displayOnInit: true,
+ onEndCrop: onEndCrop
+ }
+ );
+ }
+ );
+
+</script>
+
+<form action="profile_photo/{{$resource}}" id="crop-image-form" method="post" />
+<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+<input type='hidden' name='profile' value='{{$profile}}'>
+<input type="hidden" name="cropfinal" value="1" />
+<input type="hidden" name="xstart" id="x1" />
+<input type="hidden" name="ystart" id="y1" />
+<input type="hidden" name="xfinal" id="x2" />
+<input type="hidden" name="yfinal" id="y2" />
+<input type="hidden" name="height" id="height" />
+<input type="hidden" name="width" id="width" />
+
+<div id="crop-image-submit-wrapper" >
+<input type="submit" name="submit" value="{{$done}}" />
+</div>
+
+</form>
diff --git a/view/tpl/cropcover.tpl b/view/tpl/cropcover.tpl
new file mode 100755
index 000000000..04b96a603
--- /dev/null
+++ b/view/tpl/cropcover.tpl
@@ -0,0 +1,58 @@
+<h1>{{$title}}</h1>
+<p id="cropimage-desc">
+{{$desc}}
+</p>
+<div id="cropimage-wrapper">
+<img src="{{$image_url}}" id="croppa" class="imgCrop" alt="{{$title}}" />
+</div>
+<div id="cropimage-preview-wrapper" >
+<div id="previewWrap" ></div>
+</div>
+
+<script type="text/javascript" language="javascript">
+
+ function onEndCrop( coords, dimensions ) {
+ $( 'x1' ).value = coords.x1;
+ $( 'y1' ).value = coords.y1;
+ $( 'x2' ).value = coords.x2;
+ $( 'y2' ).value = coords.y2;
+ $( 'width' ).value = dimensions.width;
+ $( 'height' ).value = dimensions.height;
+ }
+
+ Event.observe( window, 'load', function() {
+ new Cropper.ImgWithPreview(
+ 'croppa',
+ {
+ previewWrap: 'previewWrap',
+ minWidth: 240,
+ minHeight: 87,
+ maxWidth: 320,
+ maxHeight: 116,
+ ratioDim: { x: 100, y:36 },
+ displayOnInit: true,
+ onEndCrop: onEndCrop
+ }
+ );
+ }
+ );
+
+</script>
+
+<form action="cover_photo/{{$resource}}" id="crop-image-form" method="post" />
+<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+<input type='hidden' name='profile' value='{{$profile}}'>
+<input type="hidden" name="cropfinal" value="1" />
+<input type="hidden" name="xstart" id="x1" />
+<input type="hidden" name="ystart" id="y1" />
+<input type="hidden" name="xfinal" id="x2" />
+<input type="hidden" name="yfinal" id="y2" />
+<input type="hidden" name="height" id="height" />
+<input type="hidden" name="width" id="width" />
+
+<div id="crop-image-submit-wrapper" >
+<input type="submit" name="submit" value="{{$done}}" />
+</div>
+
+</form>
diff --git a/view/tpl/crophead.tpl b/view/tpl/crophead.tpl
new file mode 100755
index 000000000..48f375426
--- /dev/null
+++ b/view/tpl/crophead.tpl
@@ -0,0 +1,4 @@
+ <script type="text/javascript" src="library/cropper/lib/prototype.js" language="javascript"></script>
+ <script type="text/javascript" src="library/cropper/lib/scriptaculous.js?load=effects,builder,dragdrop" language="javascript"></script>
+ <script type="text/javascript" src="library/cropper/cropper.js" language="javascript"></script>
+ <link rel="stylesheet" href="library/cropper/cropper.css" type="text/css" />
diff --git a/view/tpl/delegate.tpl b/view/tpl/delegate.tpl
new file mode 100755
index 000000000..cbaa8da86
--- /dev/null
+++ b/view/tpl/delegate.tpl
@@ -0,0 +1,57 @@
+<h3>{{$header}}</h3>
+
+<div id="delegate-desc" class="delegate-desc">{{$desc}}</div>
+
+{{if $managers}}
+<h3>{{$head_managers}}</h3>
+
+{{foreach $managers as $x}}
+
+<div class="contact-block-div">
+<a class="contact-block-link" href="#" >
+<img class="contact-block-img" src="{{$base}}/photo/thumb/{{$x.uid}}" title="{{$x.username}} ({{$x.nickname}})" />
+</a>
+</div>
+
+{{/foreach}}
+<div class="clear"></div>
+<hr />
+{{/if}}
+
+
+<h3>{{$head_delegates}}</h3>
+
+{{if $delegates}}
+{{foreach $delegates as $x}}
+
+<div class="contact-block-div">
+<a class="contact-block-link" href="{{$base}}/delegate/remove/{{$x.uid}}" >
+<img class="contact-block-img" src="{{$base}}/photo/thumb/{{$x.uid}}" title="{{$x.username}} ({{$x.nickname}})" />
+</a>
+</div>
+
+{{/foreach}}
+<div class="clear"></div>
+{{else}}
+{{$none}}
+{{/if}}
+<hr />
+
+
+<h3>{{$head_potentials}}</h3>
+{{if $potentials}}
+{{foreach $potentials as $x}}
+
+<div class="contact-block-div">
+<a class="contact-block-link" href="{{$base}}/delegate/add/{{$x.uid}}" >
+<img class="contact-block-img" src="{{$base}}/photo/thumb/{{$x.uid}}" title="{{$x.username}} ({{$x.nickname}})" />
+</a>
+</div>
+
+{{/foreach}}
+<div class="clear"></div>
+{{else}}
+{{$none}}
+{{/if}}
+<hr />
+
diff --git a/view/tpl/design_tools.tpl b/view/tpl/design_tools.tpl
new file mode 100644
index 000000000..bc7d46dc1
--- /dev/null
+++ b/view/tpl/design_tools.tpl
@@ -0,0 +1,9 @@
+<div id="design-tools" class="widget design-tools">
+ <h3>{{$title}}</h3>
+ <div class="nav nav-pills flex-column">
+ <a class="nav-link" href="blocks/{{$who}}">{{$blocks}}</a>
+ <a class="nav-link" href="menu{{if $sys}}?f=&sys=1{{/if}}">{{$menus}}</a>
+ <a class="nav-link" href="layouts/{{$who}}">{{$layout}}</a>
+ <a class="nav-link" href="webpages/{{$who}}">{{$pages}}</a>
+ </div>
+</div>
diff --git a/view/tpl/diaspora_vcard.tpl b/view/tpl/diaspora_vcard.tpl
new file mode 100644
index 000000000..017eb555c
--- /dev/null
+++ b/view/tpl/diaspora_vcard.tpl
@@ -0,0 +1,69 @@
+<div style="display:none;">
+ <dl class="entity_uid">
+ <dt>Uid</dt>
+ <dd>
+ <span class="uid p-uid">{{$diaspora.guid}}</span>
+ </dd>
+ </dl>
+ <dl class='entity_nickname'>
+ <dt>Nickname</dt>
+ <dd>
+ <span class="nickname p-nickname">{{$diaspora.nickname}}</span>
+ </dd>
+ </dl>
+ <dl class='entity_full_name'>
+ <dt>Full name</dt>
+ <dd>
+ <span class='fn p-name'>{{$diaspora.fullname}}</span>
+ </dd>
+ </dl>
+
+ <dl class='entity_first_name'>
+ <dt>First name</dt>
+ <dd>
+ <span class='given_name p-given-name'>{{$diaspora.firstname}}</span>
+ </dd>
+ </dl>
+ <dl class='entity_family_name'>
+ <dt>Family name</dt>
+ <dd>
+ <span class='family_name p-family-name'>{{$diaspora.lastname}}</span>
+ </dd>
+ </dl>
+ <dl class="entity_url">
+ <dt>URL</dt>
+ <dd>
+ <a href="{{$diaspora.podloc}}/" id="pod_location" class="url" rel="me" >{{$diaspora.podloc}}/</a>
+ </dd>
+ </dl>
+ <dl class="entity_photo">
+ <dt>Photo</dt>
+ <dd>
+ <img class="photo u-photo avatar" height="300" width="300" src="{{$diaspora.photo300}}" />
+ </dd>
+ </dl>
+ <dl class="entity_photo_medium">
+ <dt>Photo</dt>
+ <dd>
+ <img class="photo u-photo avatar" height="100" width="100" src="{{$diaspora.photo100}}" />
+ </dd>
+ </dl>
+ <dl class="entity_photo_small">
+ <dt>Photo</dt>
+ <dd>
+ <img class="photo u-photo avatar" height="50" width="50" src="{{$diaspora.photo50}}" />
+ </dd>
+ </dl>
+ <dl class="entity_searchable">
+ <dt>Searchable</dt>
+ <dd>
+ <span class="searchable">{{$diaspora.searchable}}</span>
+ </dd>
+ </dl>
+ <dl class="entity_key">
+ <dt>Key</dt>
+ <dd>
+ <pre class="key">{{$diaspora.pubkey}}</pre>
+ </dd>
+ </dl>
+</div>
diff --git a/view/tpl/dir_sort_links.tpl b/view/tpl/dir_sort_links.tpl
new file mode 100644
index 000000000..9346a7455
--- /dev/null
+++ b/view/tpl/dir_sort_links.tpl
@@ -0,0 +1,8 @@
+<div class="widget" id="dir_sort_links">
+<h3>{{$header}}</h3>
+
+{{include file="field_checkbox.tpl" field=$safemode}}
+{{include file="field_checkbox.tpl" field=$globaldir}}
+{{include file="field_checkbox.tpl" field=$pubforums}}
+
+</div>
diff --git a/view/tpl/directajax.tpl b/view/tpl/directajax.tpl
new file mode 100644
index 000000000..8faec4222
--- /dev/null
+++ b/view/tpl/directajax.tpl
@@ -0,0 +1,4 @@
+{{foreach $entries as $entry}}
+{{include file="direntry.tpl"}}
+{{/foreach}}
+
diff --git a/view/tpl/directory_header.tpl b/view/tpl/directory_header.tpl
new file mode 100755
index 000000000..71e991f3a
--- /dev/null
+++ b/view/tpl/directory_header.tpl
@@ -0,0 +1,22 @@
+<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}}">
+ <i class="fa fa-sort"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ <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>
+ <a class="dropdown-item" href="directory?f=&order=reverse{{$suggest}}">{{$reverse}}</a>
+ </div>
+ </div>
+ <h2>{{$dirlbl}}{{if $search}}:&nbsp;{{$safetxt}}{{/if}}</h2>
+ </div>
+ {{foreach $entries as $entry}}
+ {{include file="direntry.tpl"}}
+ {{/foreach}}
+ <div id="page-end"></div>
+</div>
+<script>$(document).ready(function() { loadingPage = false;});</script>
+<div id="page-spinner"></div>
diff --git a/view/tpl/direntry.tpl b/view/tpl/direntry.tpl
new file mode 100755
index 000000000..f7ec7db23
--- /dev/null
+++ b/view/tpl/direntry.tpl
@@ -0,0 +1,77 @@
+<div class="directory-item{{if $entry.safe}} safe{{/if}}" id="directory-item-{{$entry.hash}}" >
+ <div class="section-subtitle-wrapper clearfix">
+ <div class="pull-right">
+ {{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}}
+ {{if $entry.ignlink}}
+ <a class="directory-ignore btn btn-warning btn-sm" href="{{$entry.ignlink}}"> {{$entry.ignore_label}}</a>
+ {{/if}}
+ {{if $entry.connect}}
+ <a class="btn btn-success btn-sm" href="{{$entry.connect}}"><i class="fa fa-plus connect-icon"></i> {{$entry.conn_label}}</a>
+ {{/if}}
+ {{if $entry.viewrate}}
+ {{if $entry.canrate}}<button class="btn btn-outline-secondary btn-sm" onclick="doRatings('{{$entry.hash}}'); return false;" ><i class="fa fa-pencil"></i><span id="edited-{{$entry.hash}}" class="required" id="edited-{{$entry.hash}}" style="display: none;" >&nbsp;*</span></button>{{/if}}
+ {{/if}}
+ </div>
+ <h3>{{if $entry.public_forum}}<i class="fa fa-comments-o" title="{{$entry.forum_label}} @{{$entry.nickname}}+"></i>&nbsp;{{/if}}<a href='{{$entry.profile_link}}' >{{$entry.name}}</a>{{if $entry.online}}&nbsp;<i class="fa fa-asterisk online-now" title="{{$entry.online}}"></i>{{/if}}</h3>
+ </div>
+ <div class="section-content-tools-wrapper directory-collapse">
+ <div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$entry.hash}}" >
+ <div class="contact-photo" id="directory-photo-{{$entry.hash}}" >
+ <a href="{{$entry.profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$entry.hash}}" >
+ <img class="directory-photo-img" src="{{$entry.photo}}" alt="{{$entry.alttext}}" title="{{$entry.alttext}}" />
+ </a>
+ </div>
+ </div>
+ <div class="contact-info">
+ {{if $entry.common_friends}}
+ <div id="dir-common" class="contact-info-element">
+ <span class="contact-info-label">{{$entry.common_label}}</span> {{$entry.common_count}}
+ </div>
+ {{/if}}
+
+ {{if $entry.pdesc}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.pdesc_label}}</span> {{$entry.pdesc}}
+ </div>
+ {{/if}}
+
+ {{if $entry.age}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.age_label}}</span> {{$entry.age}}
+ </div>
+ {{/if}}
+
+ {{if $entry.location}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.location_label}}</span> {{$entry.location}}
+ </div>
+ {{/if}}
+
+ {{if $entry.hometown}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.hometown_label}}</span> {{$entry.hometown}}
+ </div>
+ {{/if}}
+
+ {{if $entry.homepage}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.homepage}}</span> {{$entry.homepageurl}}
+ </div>
+ {{/if}}
+
+ {{if $entry.kw}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.kw}}</span> {{$entry.keywords}}
+ </div>
+ {{/if}}
+
+ {{if $entry.about}}
+ <div class="contact-info-element">
+ <span class="contact-info-label">{{$entry.about_label}}</span> {{$entry.about}}
+ </div>
+ {{/if}}
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/display-head.tpl b/view/tpl/display-head.tpl
new file mode 100755
index 000000000..913784d98
--- /dev/null
+++ b/view/tpl/display-head.tpl
@@ -0,0 +1,8 @@
+<script>
+$(document).ready(function() {
+ $(".comment-edit-wrapper textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
+ // make auto-complete work in more places
+ $(".wall-item-comment-wrapper textarea").editor_autocomplete(baseurl+"/acl?f=&n=1");
+});
+</script>
+
diff --git a/view/tpl/dreport.tpl b/view/tpl/dreport.tpl
new file mode 100644
index 000000000..1f5915609
--- /dev/null
+++ b/view/tpl/dreport.tpl
@@ -0,0 +1,28 @@
+<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}}">
+ <i class="fa fa-sort-desc"></i>
+ </button>
+ <ul class="dropdown-menu">
+ <li><a href="dreport/push/{{$mid}}">{{$push}}</a></li>
+ </ul>
+ </div>
+ {{/if}}
+ <h2>{{$title}}</h2>
+ </div>
+
+ <div>
+ <table>
+ {{if $entries}}
+ {{foreach $entries as $e}}
+ <tr>
+ <td width="40%">{{$e.name}}</td>
+ <td width="20%">{{$e.result}}</td>
+ <td width="20%">{{$e.time}}</td>
+ </tr>
+ {{/foreach}}
+ {{/if}}
+ </table>
+</div>
diff --git a/view/tpl/edpost_head.tpl b/view/tpl/edpost_head.tpl
new file mode 100755
index 000000000..b2ab5db4e
--- /dev/null
+++ b/view/tpl/edpost_head.tpl
@@ -0,0 +1,14 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $delete}}
+ <div class="pull-right">
+ <a href="item/drop/{{$id}}" id="delete-btn" class="btn btn-sm btn-danger" onclick="return confirmDelete();"><i class="fa fa-trash-o"></i>&nbsp;{{$delete}}</a>
+ </div>
+ {{/if}}
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div id="webpage-editor" class="section-content-tools-wrapper">
+ {{$editor}}
+ </div>
+</div>
diff --git a/view/tpl/email_notify_html.tpl b/view/tpl/email_notify_html.tpl
new file mode 100755
index 000000000..5b4954c8e
--- /dev/null
+++ b/view/tpl/email_notify_html.tpl
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN">
+<html>
+<head>
+ <title>{{$banner}}</title>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+</head>
+<body>
+<table style="border:1px solid #ccc; background-color: #FFFFFF; color: #000000;">
+ <tbody>
+ <tr><td colspan="2" style="background:#43488A; color:#FFFFFF; font-weight:bold; font-family:'lucida grande', tahoma, verdana,arial, sans-serif; padding: 4px 8px; vertical-align: middle; font-size:16px; letter-spacing: -0.03em; text-align: left;"><img style="width:32px;height:32px; float:left;" src="{{$notify_icon}}"><div style="padding:7px; margin-left: 5px; float:left; font-size:18px;letter-spacing:1px;">{{$product}}</div><div style="clear: both;"></div></td></tr>
+
+
+ <tr><td style="padding-top:22px;" colspan="2">{{$preamble}}</td></tr>
+
+
+ <tr><td style="padding-left:22px;padding-top:22px;width:60px;" valign="top" rowspan=3><a href="{{$source_link}}"><img style="border:0px;width:48px;height:48px;" src="{{$source_photo}}"></a></td>
+ <td style="padding-top:22px;"><a href="{{$source_link}}">{{$source_name}}</a></td></tr>
+ <tr><td style="font-weight:bold;padding-bottom:5px;">{{$title}}</td></tr>
+ <tr><td style="padding-right:22px;">{{$htmlversion}}</td></tr>
+ <tr><td style="padding-top:11px;" colspan="2">{{$hsitelink}}</td></tr>
+ <tr><td style="padding:11px 0;" colspan="2">{{$hitemlink}}</td></tr>
+ <tr><td></td><td>{{$thanks}}</td></tr>
+ <tr><td></td><td>{{$site_admin}}</td></tr>
+ </tbody>
+</table>
+</body>
+</html>
diff --git a/view/tpl/email_notify_text.tpl b/view/tpl/email_notify_text.tpl
new file mode 100755
index 000000000..56925c18b
--- /dev/null
+++ b/view/tpl/email_notify_text.tpl
@@ -0,0 +1,13 @@
+{{$preamble}}
+
+{{$title}}
+
+{{$textversion}}
+
+{{$tsitelink}}
+
+{{$titemlink}}
+
+{{$thanks}}
+{{$site_admin}}
+
diff --git a/view/tpl/event.tpl b/view/tpl/event.tpl
new file mode 100755
index 000000000..cc0bfc1c7
--- /dev/null
+++ b/view/tpl/event.tpl
@@ -0,0 +1,16 @@
+{{foreach $events as $event}}
+ <div class="event-wrapper">
+ <div class="event">
+ <div class="event-owner">
+ {{if $event.item.author.xchan_name}}<a href="{{$event.item.author.xchan_url}}" ><img src="{{$event.item.author.xchan_photo_s}}">{{$event.item.author.xchan_name}}</a>{{/if}}
+ </div>
+ {{$event.html}}
+ <div class="event-buttons">
+ {{if $event.item.plink}}<a href="{{$event.plink.0}}" title="{{$event.plink.1}}" class="plink-event-link"><i class="fa fa-external-link btn btn-outline-secondary" ></i></a>{{/if}}
+ {{if $event.edit}}<a href="{{$event.edit.0}}" title="{{$event.edit.1}}" class="edit-event-link"><i class="fa fa-pencil btn btn-outline-secondary"></i></a>{{/if}}
+ {{if $event.drop}}<a href="{{$event.drop.0}}" title="{{$event.drop.1}}" class="drop-event-link"><i class="fa fa-trash-o btn btn-outline-secondary"></i></a>{{/if}}
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+{{/foreach}}
diff --git a/view/tpl/event_cal.tpl b/view/tpl/event_cal.tpl
new file mode 100755
index 000000000..d7662786b
--- /dev/null
+++ b/view/tpl/event_cal.tpl
@@ -0,0 +1,14 @@
+{{foreach $events as $event}}
+ <div class="event-wrapper">
+ <div class="event">
+ <div class="event-owner">
+ {{if $event.item.author.xchan_name}}<a href="{{$event.item.author.xchan_url}}" ><img src="{{$event.item.author.xchan_photo_s}}">{{$event.item.author.xchan_name}}</a>{{/if}}
+ </div>
+ {{$event.html}}
+ <div class="event-buttons">
+ {{if $event.item.plink}}<a href="{{$event.plink.0}}" title="{{$event.plink.1}}" class="plink-event-link"><i class="fa fa-external-link btn btn-outline-secondary" ></i></a>{{/if}}
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+{{/foreach}}
diff --git a/view/tpl/event_form.tpl b/view/tpl/event_form.tpl
new file mode 100755
index 000000000..d07a06b67
--- /dev/null
+++ b/view/tpl/event_form.tpl
@@ -0,0 +1,130 @@
+<form id="event-edit-form" action="{{$post}}" method="post" class="acl-form" data-form_id="event-edit-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+
+ <input type="hidden" name="event_id" value="{{$eid}}" />
+ <input type="hidden" name="event_hash" value="{{$event_hash}}" />
+ <input type="hidden" name="xchan" value="{{$xchan}}" />
+ <input type="hidden" name="mid" value="{{$mid}}" />
+ <input type="hidden" name="type" value="{{$type}}" />
+ <input type="hidden" name="preview" id="event-edit-preview" value="0" />
+
+
+ {{include file="field_input.tpl" field=$summary}}
+
+ {{if $tz_choose}}
+ {{include file="field_select_grouped.tpl" field=$timezone}}
+ {{/if}}
+
+ {{$s_dsel}}
+
+ {{$f_dsel}}
+
+ {{include file="field_checkbox.tpl" field=$nofinish}}
+
+ <div id="advanced" style="display:none">
+
+ {{include file="field_checkbox.tpl" field=$adjust}}
+
+ {{if $catsenabled}}
+ <div id="event-category-text"><b>{{$c_text}}</b></div>
+ <div id="events-category-wrap">
+ <input name="category" id="event-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" data-role="cat-tagsinput" />
+ </div>
+ {{/if}}
+
+ <div class="form-group">
+ <div class="form-group">
+ <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'>
+ <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>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$editalic}}" onclick="insertbbcomment('none','i', 'desc');">
+ <i class="fa fa-italic comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$eduline}}" onclick="insertbbcomment('none','u', 'desc');">
+ <i class="fa fa-underline comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edquote}}" onclick="insertbbcomment('none','quote','desc');">
+ <i class="fa fa-quote-left comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edcode}}" onclick="insertbbcomment('none','code', 'desc');">
+ <i class="fa fa-terminal comment-icon"></i>
+ </button>
+ </div>
+ <div class='btn-group'>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'desc');">
+ <i class="fa fa-camera comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'desc');">
+ <i class="fa fa-link comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'desc');">
+ <i class="fa fa-video-camera comment-icon"></i>
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="form-group">
+ <div class="form-group">
+ <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'>
+ <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>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$editalic}}" onclick="insertbbcomment('none','i', 'loc');">
+ <i class="fa fa-italic comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$eduline}}" onclick="insertbbcomment('none','u', 'loc');">
+ <i class="fa fa-underline comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edquote}}" onclick="insertbbcomment('none','quote','loc');">
+ <i class="fa fa-quote-left comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edcode}}" onclick="insertbbcomment('none','code', 'loc');">
+ <i class="fa fa-terminal comment-icon"></i>
+ </button>
+ </div>
+ <div class='btn-group'>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edimg}}" onclick="insertbbcomment('none','img', 'loc');">
+ <i class="fa fa-camera comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edurl}}" onclick="insertbbcomment('none','url', 'loc');">
+ <i class="fa fa-link comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$edvideo}}" onclick="insertbbcomment('none','video', 'loc');">
+ <i class="fa fa-video-camera comment-icon"></i>
+ </button>
+ <button type="button" class="btn btn-outline-secondary btn-sm" title="{{$mapper}}" onclick="insertbbcomment('none','map','loc');">
+ <i class="fa fa-globe comment-icon"></i>
+ </button>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <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">
+ <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>
+ {{/if}}
+ <button id="event-submit" class="btn btn-primary btn-sm" type="submit" name="submit">{{$submit}}</button>
+ </div>
+</form>
+
+{{if ! $eid}}
+ {{$acl}}
+{{/if}}
diff --git a/view/tpl/event_head.tpl b/view/tpl/event_head.tpl
new file mode 100755
index 000000000..3b2cb5041
--- /dev/null
+++ b/view/tpl/event_head.tpl
@@ -0,0 +1,160 @@
+<link rel='stylesheet' type='text/css' href='{{$baseurl}}/library/fullcalendar/fullcalendar.css' />
+<script language="javascript" type="text/javascript" src="{{$baseurl}}/library/moment/moment.min.js"></script>
+<script language="javascript" type="text/javascript" src="{{$baseurl}}/library/fullcalendar/fullcalendar.min.js"></script>
+<script language="javascript" type="text/javascript" src="{{$baseurl}}/library/fullcalendar/locale-all.js"></script>
+
+<script>
+ function showEvent(eventid) {
+ $.get(
+ '{{$baseurl}}{{$module_url}}/?id='+eventid,
+ function(data){
+ $.colorbox({ scrolling: false, html: data, onComplete: function() { $.colorbox.resize(); }});
+ }
+ );
+ }
+
+ function doEventPreview() {
+ $('#event-edit-preview').val(1);
+ $.post('events',$('#event-edit-form').serialize(), function(data) {
+ $.colorbox({ html: data });
+ });
+ $('#event-edit-preview').val(0);
+ }
+
+ function exportDate() {
+ var moment = $('#events-calendar').fullCalendar('getDate');
+ var sT = 'events/' + moment.year() + '/' + (moment.month() + 1) + '/export';
+ window.location.href=sT;
+ }
+
+ function changeView(action, viewName) {
+ $('#events-calendar').fullCalendar(action, viewName);
+ var view = $('#events-calendar').fullCalendar('getView');
+
+ if(view.type !== 'month' && !$('main').hasClass('fullscreen')) {
+ $('#events-calendar').fullCalendar('option', 'height', 'auto');
+ }
+ else {
+ $('#events-calendar').fullCalendar('option', 'height', '');
+ }
+
+ if($('main').hasClass('fullscreen')) {
+ $('#events-calendar').fullCalendar('option', 'height', $(window).height() - $('.section-title-wrapper').outerHeight(true) - 2); // -2 is for border width (.generic-content-wrapper top and bottom) of .generic-content-wrapper
+ }
+
+ $('#title').text(view.title);
+ }
+
+
+ $(document).ready(function() {
+ $('#events-calendar').fullCalendar({
+ events: '{{$baseurl}}{{$module_url}}/json',
+ header: false,
+ eventTextColor: 'white',
+ lang: '{{$lang}}',
+ firstDay: {{$first_day}},
+
+ eventLimit: 3,
+
+ monthNames: aStr['monthNames'],
+ monthNamesShort: aStr['monthNamesShort'],
+ dayNames: aStr['dayNames'],
+ dayNamesShort: aStr['dayNamesShort'],
+
+ allDayText: aStr['allday'],
+ timeFormat: 'HH:mm',
+ eventClick: function(calEvent, jsEvent, view) {
+ showEvent(calEvent.id);
+ },
+ loading: function(isLoading, view) {
+ $('#events-spinner').spin('tiny');
+ $('#events-spinner > i').css('color', 'transparent');
+ if(!isLoading) {
+ $('#events-spinner').spin(false);
+ $('#events-spinner > i').css('color', '');
+ $('td.fc-day').dblclick(function() {
+ openMenu('form');
+ //window.location.href='/events/new?start='+$(this).data('date');
+ });
+ }
+ },
+
+ eventRender: function(event, element, view) {
+
+ //console.log(view.name);
+ if (event.item['author']['xchan_name']==null) return;
+
+ switch(view.name){
+ case "month":
+ element.find(".fc-title").html(
+ "<img src='{0}' style='height:12px;width:12px;' title='{1}'>&nbsp;<span title='{3}{4}'>{2}</span>".format(
+ event.item['author']['xchan_photo_s'],
+ event.item['author']['xchan_name'],
+ event.title,
+ event.item.description ? event.item.description + "\r\n\r\n" : '',
+ event.item.location ? aStr['location'] + ': ' + event.item.location.replace(/(<([^>]+)>)/ig,"") : ''
+ ));
+ break;
+ case "agendaWeek":
+ element.find(".fc-title").html(
+ "<img src='{0}' style='height:12px;width:12px;'>&nbsp;{1}: <span title='{3}{4}'>{2}</span>".format(
+ event.item['author']['xchan_photo_s'],
+ event.item['author']['xchan_name'],
+ event.title,
+ event.item.description ? event.item.description + "\r\n\r\n" : '',
+ event.item.location ? aStr['location'] + ': ' + event.item.location.replace(/(<([^>]+)>)/ig,"") : ''
+ ));
+ break;
+ case "agendaDay":
+ element.find(".fc-title").html(
+ "<img src='{0}' style='height:12px;width:12px;'>&nbsp;{1}: <span title='{3}{4}'>{2}</span>".format(
+ event.item['author']['xchan_photo_s'],
+ event.item['author']['xchan_name'],
+ event.title,
+ event.item.description ? event.item.description + "\r\n\r\n" : '',
+ event.item.location ? aStr['location'] + ': ' + event.item.location.replace(/(<([^>]+)>)/ig,"") : ''
+ ));
+ break;
+ }
+ }
+
+ });
+
+ // center on date
+ // @fixme does not work for cal/$nick module_url
+ var args=location.href.replace(baseurl,"").split("/");
+ {{if $modparams == 2}}
+ if (args.length>=5) {
+ $("#events-calendar").fullCalendar('gotoDate',args[3] , args[4]-1);
+ }
+ {{else}}
+ if (args.length>=4) {
+ $("#events-calendar").fullCalendar('gotoDate',args[2] , args[3]-1);
+ }
+ {{/if}}
+
+ // show event popup
+ var hash = location.hash.split("-")
+ if (hash.length==2 && hash[0]=="#link") showEvent(hash[1]);
+
+ // echo the title
+ var view = $('#events-calendar').fullCalendar('getView');
+ $('#title').text(view.title);
+
+ // shift the finish time date on start time date change automagically
+ var origsval = $('#id_start_text').val();
+ $('#id_start_text').change(function() {
+ var origfval = $('#id_finish_text').val();
+ if(origfval) {
+ var sval = $('#id_start_text').val();
+ var diff = moment(sval).diff(origsval);
+ var fval = moment(origfval).add(diff, 'millisecond').format("YYYY-MM-DD HH:mm");
+ $('#id_finish_text').val(fval);
+ origsval = sval;
+ }
+ });
+
+ });
+
+</script>
+
diff --git a/view/tpl/event_item_content.tpl b/view/tpl/event_item_content.tpl
new file mode 100644
index 000000000..76e0f4616
--- /dev/null
+++ b/view/tpl/event_item_content.tpl
@@ -0,0 +1,10 @@
+{{if $description}}
+<div class="event-item-description">
+ {{$description}}
+</div>
+{{/if}}
+{{if $location}}
+<div class="event-item-location">
+ <span class="event-item-label">{{$location_label}}</span>&nbsp;<span class="event-item-location">{{$location}}</span>
+</div>
+{{/if}}
diff --git a/view/tpl/event_item_header.tpl b/view/tpl/event_item_header.tpl
new file mode 100755
index 000000000..6247aaf6f
--- /dev/null
+++ b/view/tpl/event_item_header.tpl
@@ -0,0 +1,11 @@
+<div class="event-item-title">
+ <h3><i class="fa fa-calendar"></i>&nbsp;{{$title}}</h3>
+</div>
+<div class="event-item-start">
+ <span class="event-item-label">{{$dtstart_label}}</span>&nbsp;<span class="dtstart" title="{{$dtstart_title}}">{{$dtstart_dt}}</span>
+</div>
+{{if $finish}}
+<div class="event-item-start">
+ <span class="event-item-label">{{$dtend_label}}</span>&nbsp;<span class="dtend" title="{{$dtend_title}}">{{$dtend_dt}}</span>
+</div>
+{{/if}}
diff --git a/view/tpl/events-js.tpl b/view/tpl/events-js.tpl
new file mode 100755
index 000000000..9d32c76be
--- /dev/null
+++ b/view/tpl/events-js.tpl
@@ -0,0 +1,31 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <div class="dropdown">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i>&nbsp;{{$view_label}}</button>
+ <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>
+ <a class="dropdown-item" href="#" onclick="changeView('changeView', 'agendaDay'); return false;">{{$day}}</a>
+ </div>
+ <button class="btn btn-success btn-sm" onclick="openClose('form');">{{$new_event.1}}</button>
+ <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="events-spinner" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><i class="fa fa-bullseye"></i></button>
+ <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="fa fa-forward"></i></button>
+ </div>
+ <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>
+ </div>
+ <h2 id="title"></h2>
+ <div class="clear"></div>
+ </div>
+ <div id="form" class="section-content-tools-wrapper"{{if !$expandform}} style="display:none;"{{/if}}>
+ {{$form}}
+ </div>
+ <div class="clear"></div>
+ <div class="section-content-wrapper-np">
+ <div id="events-calendar"></div>
+ </div>
+</div>
diff --git a/view/tpl/events_cal-js.tpl b/view/tpl/events_cal-js.tpl
new file mode 100755
index 000000000..ba9e16dd6
--- /dev/null
+++ b/view/tpl/events_cal-js.tpl
@@ -0,0 +1,20 @@
+{{$tabs}}
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <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="events-spinner" class="btn btn-outline-secondary btn-sm" onclick="changeView('today', false);" title="{{$today}}"><i class="fa fa-bullseye"></i></button>
+ <button class="btn btn-outline-secondary btn-sm" onclick="changeView('next', false);" title="{{$next}}"><i class="fa fa-forward"></i></button>
+ </div>
+ <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 id="title"></h2>
+ <div class="clear"></div>
+ </div>
+ <div class="clear"></div>
+ <div class="section-content-wrapper-np">
+ <div id="events-calendar"></div>
+ </div>
+</div>
diff --git a/view/tpl/events_menu_side.tpl b/view/tpl/events_menu_side.tpl
new file mode 100755
index 000000000..b9a9062b1
--- /dev/null
+++ b/view/tpl/events_menu_side.tpl
@@ -0,0 +1,8 @@
+<div class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills nav-stacked">
+ <li><a href="#" onclick="changeView('changeView', 'month'); return false;">{{$month}}</a></li>
+ <li><a href="#" onclick="changeView('changeView', 'agendaWeek'); return false;">{{$week}}</a></li>
+ <li><a href="#" onclick="changeView('changeView', 'agendaDay'); return false;">{{$day}}</a></li>
+ </ul>
+</div>
diff --git a/view/tpl/events_reminder.tpl b/view/tpl/events_reminder.tpl
new file mode 100755
index 000000000..fd6a1a5c7
--- /dev/null
+++ b/view/tpl/events_reminder.tpl
@@ -0,0 +1,10 @@
+{{if $count}}
+<div id="event-notice" class="birthday-notice fakelink {{$classtoday}}" onclick="openClose('event-wrapper');">{{$event_reminders}} ({{$count}})</div>
+<div id="event-wrapper" style="display: none;" ><div id="event-title">{{$event_title}}</div>
+<div id="event-title-end"></div>
+{{foreach $events as $event}}
+<div class="event-list" id="event-{{$event.id}}"></a> <a href="events/{{$event.link}}">{{$event.title}}</a> {{$event.date}} </div>
+{{/foreach}}
+</div>
+{{/if}}
+
diff --git a/view/tpl/events_tools_side.tpl b/view/tpl/events_tools_side.tpl
new file mode 100755
index 000000000..e22f95c1e
--- /dev/null
+++ b/view/tpl/events_tools_side.tpl
@@ -0,0 +1,17 @@
+<div class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a class="nav-link" href="#" onclick="exportDate(); return false;"><i class="fa fa-arrow-circle-o-down"></i>&nbsp;{{$export}}</a></li>
+ <li class="nav-item"><a class="nav-link" href="#" onclick="openClose('event-upload-form'); return false;"><i class="fa fa-arrow-circle-o-up"></i>&nbsp;{{$import}}</a></li>
+ </ul>
+ <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">
+ <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>
+ </form>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/failed_updates.tpl b/view/tpl/failed_updates.tpl
new file mode 100755
index 000000000..f53f1f478
--- /dev/null
+++ b/view/tpl/failed_updates.tpl
@@ -0,0 +1,18 @@
+<div class="generic-content-wrapper-styled">
+<h2>{{$banner}}</h2>
+
+<div id="failed_updates_desc">{{$desc}}</div>
+
+{{if $failed}}
+{{foreach $failed as $f}}
+
+<h4>{{$f}}</h4>
+<ul>
+<li><a href="{{$base}}/admin/dbsync/mark/{{$f}}">{{$mark}}</a></li>
+<li><a href="{{$base}}/admin/dbsync/{{$f}}">{{$apply}}</a></li>
+</ul>
+
+<hr />
+{{/foreach}}
+{{/if}}
+</div>
diff --git a/view/tpl/field.tpl b/view/tpl/field.tpl
new file mode 100755
index 000000000..942cfcef5
--- /dev/null
+++ b/view/tpl/field.tpl
@@ -0,0 +1,3 @@
+ {{if $field.0==select}}
+ {{include file="field_select.tpl"}}
+ {{/if}}
diff --git a/view/tpl/field_acheckbox.tpl b/view/tpl/field_acheckbox.tpl
new file mode 100755
index 000000000..c87b9ac79
--- /dev/null
+++ b/view/tpl/field_acheckbox.tpl
@@ -0,0 +1,23 @@
+<tr class="highlight">
+ <td>
+ <label class="mainlabel" for='me_id_{{$field.0}}'>{{$field.1}}</label><br>
+ <span class='field_abook_help'>{{$field.6}}</span>
+ </td>
+ {{if $notself}}
+ <td class="abook-them">
+ {{if $field.2}}<i class="fa fa-check-square-o"></i>{{else}}<i class="fa fa-square-o"></i>{{/if}}
+ </td>
+ {{/if}}
+ <td class="abook-me">
+ {{if $self || !$field.5 || $twocol }}
+ <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}}
+ {{/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}}
+ </td>
+</tr>
diff --git a/view/tpl/field_checkbox.tpl b/view/tpl/field_checkbox.tpl
new file mode 100755
index 000000000..f779f937c
--- /dev/null
+++ b/view/tpl/field_checkbox.tpl
@@ -0,0 +1,5 @@
+ <div id="{{$field.0}}_container" class="clearfix form-group checkbox">
+ <label for="id_{{$field.0}}">{{$field.1}}</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>
+ <small class="form-text text-muted">{{$field.3}}</small>
+ </div>
diff --git a/view/tpl/field_colorinput.tpl b/view/tpl/field_colorinput.tpl
new file mode 100644
index 000000000..9b6f33462
--- /dev/null
+++ b/view/tpl/field_colorinput.tpl
@@ -0,0 +1,6 @@
+ <div class='form-group 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>
+ <div id='end_{{$field.0}}' class='field_end'></div>
+ </div>
diff --git a/view/tpl/field_combobox.tpl b/view/tpl/field_combobox.tpl
new file mode 100755
index 000000000..12d00a08d
--- /dev/null
+++ b/view/tpl/field_combobox.tpl
@@ -0,0 +1,18 @@
+<div class="form-group">
+ <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}}" >
+ {{foreach $field.4 as $opt=>$val}}
+ <option value="{{$val}}">
+ {{/foreach}}
+ </datalist>
+ {{**
+ <input id="id_{{$field.0}}" class="form-control" type="text" value="{{$field.2}}">
+ <select id="select_{{$field.0}}" class="form-control" onChange="$('#id_{{$field.0}}').val($(this).val())">
+ <option value="">{{$field.5}}</option>
+ {{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{$val}}</option>{{/foreach}}
+ </select>
+ **}}
+ <span class='field_help'>{{$field.3}}</span>
+</div>
+
diff --git a/view/tpl/field_custom.tpl b/view/tpl/field_custom.tpl
new file mode 100755
index 000000000..907b4c50e
--- /dev/null
+++ b/view/tpl/field_custom.tpl
@@ -0,0 +1,5 @@
+ <div class='form-group field custom'>
+ <label for='{{$field.0}}'>{{$field.1}}</label>
+ {{$field.2}}
+ <span class='help-block'>{{$field.3}}</span>
+ </div>
diff --git a/view/tpl/field_input.tpl b/view/tpl/field_input.tpl
new file mode 100755
index 000000000..65a837e5f
--- /dev/null
+++ b/view/tpl/field_input.tpl
@@ -0,0 +1,5 @@
+ <div id="id_{{$field.0}}_wrapper" class="form-group">
+ <label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}}<span class="required"> {{$field.4}}</span>{{/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>
diff --git a/view/tpl/field_intcheckbox.tpl b/view/tpl/field_intcheckbox.tpl
new file mode 100755
index 000000000..abfe6e189
--- /dev/null
+++ b/view/tpl/field_intcheckbox.tpl
@@ -0,0 +1,5 @@
+ <div class="clearfix form-group 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>
+ <small class="form-text text-muted">{{$field.4}}</small>
+ </div>
diff --git a/view/tpl/field_password.tpl b/view/tpl/field_password.tpl
new file mode 100755
index 000000000..fa5e14582
--- /dev/null
+++ b/view/tpl/field_password.tpl
@@ -0,0 +1,5 @@
+ <div class="form-group">
+ <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>
+ </div>
diff --git a/view/tpl/field_radio.tpl b/view/tpl/field_radio.tpl
new file mode 100755
index 000000000..6b5f52de6
--- /dev/null
+++ b/view/tpl/field_radio.tpl
@@ -0,0 +1,8 @@
+ <div class="form-group 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}}
+ </label>
+ <span class='help-block'>{{$field.3}}</span>
+ </div>
+ <div class="clear"></div>
diff --git a/view/tpl/field_richtext.tpl b/view/tpl/field_richtext.tpl
new file mode 100755
index 000000000..378e02a62
--- /dev/null
+++ b/view/tpl/field_richtext.tpl
@@ -0,0 +1,5 @@
+ <div class='field richtext'>
+ <label class="mainlabel" for='id_{{$field.0}}'>{{$field.1}}</label>
+ <textarea name='{{$field.0}}' id='id_{{$field.0}}' class="fieldRichtext">{{$field.2}}</textarea>
+ <span class='field_help'>{{$field.3}}</span>
+ </div>
diff --git a/view/tpl/field_select.tpl b/view/tpl/field_select.tpl
new file mode 100755
index 000000000..cda9a823a
--- /dev/null
+++ b/view/tpl/field_select.tpl
@@ -0,0 +1,7 @@
+ <div class="form-group">
+ <label for="id_{{$field.0}}">{{$field.1}}</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}}
+ </select>
+ <small class="form-text text-muted">{{$field.3}}</small>
+ </div>
diff --git a/view/tpl/field_select_disabled.tpl b/view/tpl/field_select_disabled.tpl
new file mode 100644
index 000000000..ee5e1508f
--- /dev/null
+++ b/view/tpl/field_select_disabled.tpl
@@ -0,0 +1,7 @@
+ <div class='form-group 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}}
+ </select>
+ <span class='help-block'>{{$field.3}}</span>
+ </div>
diff --git a/view/tpl/field_select_grouped.tpl b/view/tpl/field_select_grouped.tpl
new file mode 100644
index 000000000..e6d1479de
--- /dev/null
+++ b/view/tpl/field_select_grouped.tpl
@@ -0,0 +1,12 @@
+ <div class='form-group 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}}
+ <optgroup label='{{$group}}'>
+ {{foreach $opts as $opt=>$val}}
+ <option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>{{/foreach}}
+ {{/foreach}}
+ </optgroup>
+ </select>
+ <span class='help-block'>{{$field.3}}</span>
+ </div>
diff --git a/view/tpl/field_select_raw.tpl b/view/tpl/field_select_raw.tpl
new file mode 100755
index 000000000..2780df58c
--- /dev/null
+++ b/view/tpl/field_select_raw.tpl
@@ -0,0 +1,7 @@
+ <div class='form-group field select'>
+ <label for='id_{{$field.0}}'>{{$field.1}}</label>
+ <select class="form-control" name='{{$field.0}}' id='id_{{$field.0}}'>
+ {{$field.4}}
+ </select>
+ <span class='help-block'>{{$field.3}}</span>
+ </div>
diff --git a/view/tpl/field_textarea.tpl b/view/tpl/field_textarea.tpl
new file mode 100755
index 000000000..437dece93
--- /dev/null
+++ b/view/tpl/field_textarea.tpl
@@ -0,0 +1,5 @@
+ <div class="form-group">
+ <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>
+ </div>
diff --git a/view/tpl/field_themeselect.tpl b/view/tpl/field_themeselect.tpl
new file mode 100755
index 000000000..7a529774c
--- /dev/null
+++ b/view/tpl/field_themeselect.tpl
@@ -0,0 +1,13 @@
+ {{if $field.5 == 'preview'}}
+ <script>$(document).ready(function(){ previewTheme($("#id_{{$field.0}}")[0]); });</script>
+ {{/if}}
+ <div class='form-group 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}}
+ </select>
+ <span class='field_help'>{{$field.3}}</span>
+ {{if $field.5=='preview'}}
+ <div id="theme-preview"></div>
+ {{/if}}
+ </div>
diff --git a/view/tpl/field_yesno.tpl b/view/tpl/field_yesno.tpl
new file mode 100755
index 000000000..8a4cda55b
--- /dev/null
+++ b/view/tpl/field_yesno.tpl
@@ -0,0 +1,13 @@
+ <div class='clearfix form-group'>
+ <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}}">
+ <a href="#" class='off'>
+ {{if $field.4}}{{$field.4.0}}{{else}}OFF{{/if}}
+ </a>
+ <a href="#" class='on'>
+ {{if $field.4}}{{$field.4.1}}{{else}}ON{{/if}}
+ </a>
+ </div>
+ <small class='form-text text-muted'>{{$field.3}}</small>
+ </div>
diff --git a/view/tpl/fileas_widget.tpl b/view/tpl/fileas_widget.tpl
new file mode 100755
index 000000000..a6a69b89c
--- /dev/null
+++ b/view/tpl/fileas_widget.tpl
@@ -0,0 +1,12 @@
+<div id="fileas-sidebar" class="widget">
+ <h3>{{$title}}</h3>
+ <div id="nets-desc">{{$desc}}</div>
+
+ <ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a class="nav-link{{if $sel_all}} active{{/if}}" href="{{$base}}">{{$all}}</a></li>
+ {{foreach $terms as $term}}
+ <li class="nav-item"><a class="nav-link{{if $term.selected}} active{{/if}}" href="{{$base}}?f=&file={{$term.name}}">{{$term.name}}</a></li>
+ {{/foreach}}
+ </ul>
+
+</div>
diff --git a/view/tpl/filebrowser.tpl b/view/tpl/filebrowser.tpl
new file mode 100755
index 000000000..787f7c0cd
--- /dev/null
+++ b/view/tpl/filebrowser.tpl
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script type="text/javascript" src="{{$baseurl}}/library/tinymce/jscripts/tiny_mce/tiny_mce_popup.js"></script>
+ <style>
+ .panel_wrapper div.current{.overflow: auto; height: auto!important; }
+ .filebrowser.path { font-family: fixed; font-size: 10px; background-color: #f0f0ee; height:auto; overflow:auto;}
+ .filebrowser.path a { border-left: 1px solid #C0C0AA; background-color: #E0E0DD; display: block; float:left; padding: 0.3em 1em;}
+ .filebrowser ul{ list-style-type: none; padding:0px; }
+ .filebrowser.folders a { display: block; padding: 0.3em }
+ .filebrowser.folders a:hover { background-color: #f0f0ee; }
+ .filebrowser.files.image { overflow: auto; height: auto; }
+ .filebrowser.files.image img { height:50px;}
+ .filebrowser.files.image li { display: block; padding: 5px; float: left; }
+ .filebrowser.files.image span { display: none;}
+ .filebrowser.files.file img { height:16px; vertical-align: bottom;}
+ .filebrowser.files a { display: block; padding: 0.3em}
+ .filebrowser.files a:hover { background-color: #f0f0ee; }
+ .filebrowser a { text-decoration: none; }
+ </style>
+ <script>
+ var FileBrowserDialogue = {
+ init : function () {
+ // Here goes your code for setting your custom things onLoad.
+ },
+ mySubmit : function (URL) {
+ //var URL = document.my_form.my_field.value;
+ var win = tinyMCEPopup.getWindowArg("window");
+
+ // insert information now
+ win.document.getElementById(tinyMCEPopup.getWindowArg("input")).value = URL;
+
+ // are we an image browser
+ if (typeof(win.ImageDialog) != "undefined") {
+ // we are, so update image dimensions...
+ if (win.ImageDialog.getImageData)
+ win.ImageDialog.getImageData();
+
+ // ... and preview if necessary
+ if (win.ImageDialog.showPreviewImage)
+ win.ImageDialog.showPreviewImage(URL);
+ }
+
+ // close popup window
+ tinyMCEPopup.close();
+ }
+ }
+
+ tinyMCEPopup.onInit.add(FileBrowserDialogue.init, FileBrowserDialogue);
+ </script>
+ </head>
+ <body>
+
+ <div class="tabs">
+ <ul >
+ <li class="current"><span>FileBrowser</span></li>
+ </ul>
+ </div>
+ <div class="panel_wrapper">
+
+ <div id="general_panel" class="panel current">
+ <div class="filebrowser path">
+ {{foreach $path as $p}}<a href="{{$p.0}}">{{$p.1}}</a>{{/foreach}}
+ </div>
+ <div class="filebrowser folders">
+ <ul>
+ {{foreach $folders as $f}}<li><a href="{{$f.0}}/">{{$f.1}}</a></li>{{/foreach}}
+ </ul>
+ </div>
+ <div class="filebrowser files {{$type}}">
+ <ul>
+ {{foreach $files as $f}}
+ <li><a href="#" onclick="FileBrowserDialogue.mySubmit('{{$f.0}}'); return false;"><img src="{{$f.2}}"><span>{{$f.1}}</span></a></li>
+ {{/foreach}}
+ </ul>
+ </div>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="button" id="cancel" name="cancel" value="{{$cancel}}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </body>
+
+</html>
diff --git a/view/tpl/filer_dialog.tpl b/view/tpl/filer_dialog.tpl
new file mode 100755
index 000000000..61860d10f
--- /dev/null
+++ b/view/tpl/filer_dialog.tpl
@@ -0,0 +1,19 @@
+<div class="modal" id="item-filer-dialog">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">{{$title}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+ <span aria-hidden="true">&times;</span>
+ </button>
+ </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 id="filer_save" type="button" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/follow.tpl b/view/tpl/follow.tpl
new file mode 100755
index 000000000..4def1415d
--- /dev/null
+++ b/view/tpl/follow.tpl
@@ -0,0 +1,14 @@
+<div id="follow-sidebar" class="widget">
+ <h3>{{$connect}}</h3>
+ <form action="follow" method="post" />
+ <div class="input-group">
+ <input class="form-control form-control-sm" type="text" name="url" title="{{$hint}}" placeholder="{{$desc}}" />
+ <div class="input-group-btn">
+ <button class="btn btn-success" type="submit" name="submit" value="{{$follow}}" title="{{$follow}}"><i class="fa fa-fw fa-plus"></i></button>
+ </div>
+ </div>
+ </form>
+ {{if $abook_usage_message}}
+ <div class="usage-message" id="abook-usage-message">{{$abook_usage_message}}</div>
+ {{/if}}
+</div>
diff --git a/view/tpl/force_image_reload.tpl b/view/tpl/force_image_reload.tpl
new file mode 100644
index 000000000..839bd22b5
--- /dev/null
+++ b/view/tpl/force_image_reload.tpl
@@ -0,0 +1,72 @@
+{{*
+Force the browser to reload an image from the server instead of the cache.
+based on an answer from http://stackoverflow.com/a/22429796/3343347
+
+Usage: Set $imgUrl to the src url you want to be re-fetched from the server
+
+*}}
+
+<script>
+ $(document).ready(
+ function() {
+ forceImgReload("{{$imgUrl}}");
+ }
+ );
+
+ {{*
+ * find and return any existing img tags with a matching src url, and set them to an intermediate
+ * src url so they can later be reverted back once the cached version has been updated.
+ *}}
+ function prepareImagesForReload(srcUrl) {
+
+ var result = $("img[src='" + srcUrl + "']").get();
+
+ for (i = 0; i < result.length; i++) {
+ {{*
+ * Set the image to a reloading image, in this case an animated "reloading" svg
+ * Ideally this wont be displayed long enough to matter.
+ *}}
+ result[i].src = "data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100' preserveAspectRatio='xMidYMid' class='uil-reload'%3E%3Cpath fill='none' class='bk' d='M0 0h100v100H0z'/%3E%3Cg%3E%3Cpath d='M50 15a35 35 0 1 0 24.787 10.213' fill='none' stroke='%23777' stroke-width='12'/%3E%3Cpath d='M50 0v30l16-15L50 0' fill='%23777'/%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 50 50' to='360 50 50' dur='1s' repeatCount='indefinite'/%3E%3C/g%3E%3C/svg%3E";
+ }
+
+ return result;
+ }
+
+ function restoreImages(srcUrl, imgList) {
+
+ for (i = 0; i < imgList.length; i++) {
+ imgList[i].src = srcUrl;
+ }
+ }
+
+ function forceImgReload(srcUrl) {
+ var imgList;
+ var step = 0;
+ var iframe = window.document.createElement("iframe"); // Hidden iframe, in which to perform the load+reload.
+
+ {{* Callback function, called after iframe load+reload completes (or fails).
+ Will be called TWICE unless twostage-mode process is cancelled. (Once after load, once after reload). *}}
+ var iframeLoadCallback = function(e) {
+
+ if (step === 0) {
+ // initial load just completed. Note that it doesn't actually matter if this load succeeded or not.
+
+ step = 1;
+ imgList = prepareImagesForReload(srcUrl);
+ iframe.contentWindow.location.reload(true); // initiate forced-reload!
+
+ } else if (step === 1) {
+ // forced re-load is done
+
+ restoreImages(srcUrl, imgList);
+ if (iframe.parentNode) iframe.parentNode.removeChild(iframe);
+ }
+ }
+
+ iframe.style.display = "none";
+ window.parent.document.body.appendChild(iframe); {{* NOTE: if this is done AFTER setting src, Firefox MAY fail to fire the load event! *}}
+ iframe.addEventListener("load", iframeLoadCallback, false);
+ iframe.addEventListener("error", iframeLoadCallback, false);
+ iframe.src = srcUrl;
+ }
+</script>
diff --git a/view/tpl/generic_addon_settings.tpl b/view/tpl/generic_addon_settings.tpl
new file mode 100644
index 000000000..bf39b2aea
--- /dev/null
+++ b/view/tpl/generic_addon_settings.tpl
@@ -0,0 +1,19 @@
+<div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="{{$addon.0}}-settings">
+ <h3>
+ <a title="{{$addon.2}}" data-toggle="collapse" data-parent="#settings" href="#{{$addon.0}}-settings-content" aria-controls="{{$addon.0}}-settings-content">
+ {{$addon.1}}
+ </a>
+ </h3>
+ </div>
+ <div id="{{$addon.0}}-settings-content" class="panel-collapse collapse" role="tabpanel" aria-labelledby="{{$addon.0}}-settings">
+ <div class="section-content-tools-wrapper">
+ {{$content}}
+ {{if $addon.0}}
+ <div class="settings-submit-wrapper" >
+ <button id="{{$addon.0}}-submit" type="submit" name="{{$addon.0}}-submit" class="btn btn-primary" value="{{$addon.3}}">{{$addon.3}}</button>
+ </div>
+ {{/if}}
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/generic_links_widget.tpl b/view/tpl/generic_links_widget.tpl
new file mode 100755
index 000000000..67801e666
--- /dev/null
+++ b/view/tpl/generic_links_widget.tpl
@@ -0,0 +1,11 @@
+<div class="widget{{if $class}} {{$class}}{{/if}}">
+ {{if $title}}<h3>{{$title}}</h3>{{/if}}
+ {{if $desc}}<div class="desc">{{$desc}}</div>{{/if}}
+
+ <ul class="nav nav-pills flex-column">
+ {{foreach $items as $item}}
+ <li class="nav-item"><a href="{{$item.url}}" class="nav-link{{if $item.selected}} active{{/if}}">{{$item.label}}</a></li>
+ {{/foreach}}
+ </ul>
+
+</div>
diff --git a/view/tpl/generic_modal.tpl b/view/tpl/generic_modal.tpl
new file mode 100644
index 000000000..18279b6f7
--- /dev/null
+++ b/view/tpl/generic_modal.tpl
@@ -0,0 +1,17 @@
+<div class="modal" id="generic-modal-{{$id}}" tabindex="-1" role="dialog" aria-labelledby="generic-modal-{{$id}}" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="generic-modal-title-{{$id}}">{{$title}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </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>
+ {{if $ok}}
+ <button id="generic-modal-ok-{{$id}}" type="button" class="btn btn-primary">{{$ok}}</button>
+ {{/if}}
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
diff --git a/view/tpl/group_drop.tpl b/view/tpl/group_drop.tpl
new file mode 100755
index 000000000..627debc80
--- /dev/null
+++ b/view/tpl/group_drop.tpl
@@ -0,0 +1,7 @@
+<div class="group-delete-wrapper button" id="group-delete-wrapper-{{$id}}" >
+ <a href="group/drop/{{$id}}?t={{$form_security_token}}"
+ onclick="return confirmDelete();"
+ id="group-delete-icon-{{$id}}"
+ class="group-delete-icon btn btn-outline-secondary" title="{{$delete}}" ><i class="fa fa-trash-o drop-icons"></i></a>
+</div>
+<div class="group-delete-end"></div>
diff --git a/view/tpl/group_edit.tpl b/view/tpl/group_edit.tpl
new file mode 100755
index 000000000..d9412a6f7
--- /dev/null
+++ b/view/tpl/group_edit.tpl
@@ -0,0 +1,26 @@
+<div class="generic-content-wrapper-styled">
+<h2>{{$title}}</h2>
+
+
+<div id="group-edit-wrapper" >
+ <form action="group/{{$gid}}" 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}}
+ {{if $drop}}{{$drop}}{{/if}}
+ <div id="group-edit-submit-wrapper" >
+ <input type="submit" name="submit" value="{{$submit}}" >
+ </div>
+ <div id="group-edit-select-end" ></div>
+ </form>
+</div>
+
+
+{{if $groupeditor}}
+ <div id="group-update-wrapper">
+ {{include file="groupeditor.tpl"}}
+ </div>
+{{/if}}
+{{if $desc}}<div id="group-edit-desc">{{$desc}}</div>{{/if}}
+</div>
diff --git a/view/tpl/group_selection.tpl b/view/tpl/group_selection.tpl
new file mode 100755
index 000000000..270d2aa79
--- /dev/null
+++ b/view/tpl/group_selection.tpl
@@ -0,0 +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>
diff --git a/view/tpl/group_side.tpl b/view/tpl/group_side.tpl
new file mode 100755
index 000000000..14f714ae9
--- /dev/null
+++ b/view/tpl/group_side.tpl
@@ -0,0 +1,26 @@
+<div class="widget" id="group-sidebar">
+ <h3>{{$title}}</h3>
+ <div>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $groups as $group}}
+ <li class="nav-item nav-item-hack">
+ {{if $group.cid}}
+ <i id="group-{{$group.id}}" class="widget-nav-pills-checkbox fa fa-fw {{if $group.ismember}}fa-check-square-o{{else}}fa-square-o{{/if}}" onclick="contactgroupChangeMember('{{$group.id}}','{{$group.enc_cid}}'); return true;"></i>
+ {{/if}}
+ {{if $group.edit}}
+ <a href="{{$group.edit.href}}" class="nav-link{{if $group.selected}} active{{/if}} widget-nav-pills-icons" title="{{$edittext}}"><i class="fa fa-fw fa-pencil"></i></a>
+ {{/if}}
+ <a class="nav-link{{if $group.selected}} active{{/if}}" href="{{$group.href}}">{{$group.text}}</a>
+ </li>
+ {{/foreach}}
+ <li class="nav-item">
+ <a class="nav-link" href="group/new" title="{{$createtext}}" ><i class="fa fa-plus-circle"></i> {{$createtext}}</a>
+ </li>
+ </ul>
+
+ </div>
+</div>
+
+
+
+
diff --git a/view/tpl/groupeditor.tpl b/view/tpl/groupeditor.tpl
new file mode 100755
index 000000000..c79bb0a2a
--- /dev/null
+++ b/view/tpl/groupeditor.tpl
@@ -0,0 +1,16 @@
+<div id="group">
+<h3>{{$groupeditor.label_members}}</h3>
+<div id="group-members" class="contact_list">
+{{foreach $groupeditor.members as $c}} {{$c}} {{/foreach}}
+</div>
+<div id="group-members-end"></div>
+<hr id="group-separator" />
+</div>
+
+<div id="contacts">
+<h3>{{$groupeditor.label_contacts}}</h3>
+<div id="group-all-contacts" class="contact_list">
+{{foreach $groupeditor.contacts as $m}} {{$m}} {{/foreach}}
+</div>
+<div id="group-all-contacts-end"></div>
+</div>
diff --git a/view/tpl/hdr.tpl b/view/tpl/hdr.tpl
new file mode 100644
index 000000000..cccee2229
--- /dev/null
+++ b/view/tpl/hdr.tpl
@@ -0,0 +1,3 @@
+<div id="nav-notifications-template" rel="template">
+ <a class="dropdown-item clearfix dropdown-notification {5}" href="{0}" title="{2} {3}"><img class="menu-img-3" data-src="{1}"><span class="contactname">{2}</span><span class="dropdown-sub-text">{3}<br>{4}</span></a>
+</div>
diff --git a/view/tpl/head.tpl b/view/tpl/head.tpl
new file mode 100755
index 000000000..5f874426c
--- /dev/null
+++ b/view/tpl/head.tpl
@@ -0,0 +1,21 @@
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<base href="{{$baseurl}}/" />
+<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable={{$user_scalable}}" />
+{{$metas}}
+{{$head_css}}
+{{$js_strings}}
+{{$head_js}}
+{{$linkrel}}
+{{$plugins}}
+<script>
+ var updateInterval = {{$update_interval}};
+ var localUser = {{if $local_channel}}{{$local_channel}}{{else}}false{{/if}};
+ var zid = {{if $zid}}'{{$zid}}'{{else}}null{{/if}};
+ var justifiedGalleryActive = false;
+ {{if $channel_hash}}var channelHash = '{{$channel_hash}}';{{/if}}
+ {{if $channel_id}}var channelId = '{{$channel_id}}';{{/if}}{{* Used in e.g. autocomplete *}}
+ var preloadImages = {{$preload_images}};
+</script>
+
+
+
diff --git a/view/tpl/help.tpl b/view/tpl/help.tpl
new file mode 100644
index 000000000..43b061dcc
--- /dev/null
+++ b/view/tpl/help.tpl
@@ -0,0 +1,33 @@
+<div id="help-content" class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}: {{$heading}}</h2>
+ </div>
+ <div class="section-content-wrapper" id="doco-content">
+ <h3 id="doco-top-toc-heading">
+ <span class="fakelink" onclick="docoTocToggle(); return false;">
+ <i class="fa fa-fw fa-caret-right fakelink" id="doco-toc-toggle"></i>
+ {{$tocHeading}}
+ </span>
+ </h3>
+ <ul id="doco-top-toc" style="margin-bottom: 1.5em; display: none;"></ul>
+ {{$content}}
+ </div>
+</div>
+
+<script>
+ // Generate the table of contents in the side nav menu (see view/tpl/help.tpl)
+ $(document).ready(function () {
+ $('#doco-top-toc').toc({content: "#doco-content", headings: "h3,h4,h5,h6"});
+ });
+
+ function docoTocToggle() {
+ if($('#doco-top-toc').is(':visible')) {
+ $('#doco-toc-toggle').removeClass('fa-cog').addClass('fa-caret-right');
+ } else {
+ $('#doco-toc-toggle').removeClass('fa-caret-right').addClass('fa-caret-down');
+ }
+ $('#doco-top-toc').toggle();
+
+ return false;
+ }
+</script>
diff --git a/view/tpl/install.tpl b/view/tpl/install.tpl
new file mode 100755
index 000000000..0e77aa97b
--- /dev/null
+++ b/view/tpl/install.tpl
@@ -0,0 +1,9 @@
+<h1>{{$title}}</h1>
+<h2>{{$pass}}</h2>
+
+
+{{if $status}}
+<h3 class="error-message">{{$status}}</h3>
+{{/if}}
+
+{{$text}}
diff --git a/view/tpl/install_checks.tpl b/view/tpl/install_checks.tpl
new file mode 100755
index 000000000..ad0aef6a3
--- /dev/null
+++ b/view/tpl/install_checks.tpl
@@ -0,0 +1,24 @@
+<h1>{{$title}}</h1>
+<h2>{{$pass}}</h2>
+<form action="{{$baseurl}}/index.php?q=setup" method="post">
+<table>
+{{foreach $checks as $check}}
+ <tr><td>{{$check.title}} </td><td><i class="fa {{if $check.status}}fa-check-square-o{{else}}{{if $check.required}}fa-square-o{{else}}fa-exclamation{{/if}}{{/if}}"></i></td><td>{{if $check.required}}(required){{/if}}</td></tr>
+ {{if $check.help}}
+ <tr><td colspan="3"><blockquote>{{$check.help}}</blockquote></td></tr>
+ {{/if}}
+{{/foreach}}
+</table>
+
+{{if $phpath}}
+ <input type="hidden" name="phpath" value="{{$phpath}}">
+{{/if}}
+
+{{if $passed}}
+ <input type="hidden" name="pass" value="2">
+ <input type="submit" value="{{$next}}">
+{{else}}
+ <input type="hidden" name="pass" value="1">
+ <input type="submit" value="{{$reload}}">
+{{/if}}
+</form>
diff --git a/view/tpl/install_db.tpl b/view/tpl/install_db.tpl
new file mode 100755
index 000000000..1a58de129
--- /dev/null
+++ b/view/tpl/install_db.tpl
@@ -0,0 +1,30 @@
+<h1>{{$title}}</h1>
+<h2>{{$pass}}</h2>
+
+
+<p>
+{{$info_01}}<br>
+{{$info_02}}<br>
+{{$info_03}}
+</p>
+
+{{if $status}}
+<h3 class="error-message">{{$status}}</h3>
+{{/if}}
+
+<form id="install-form" action="{{$baseurl}}/setup" method="post">
+
+<input type="hidden" name="phpath" value="{{$phpath}}" />
+<input type="hidden" name="pass" value="3" />
+
+{{include file="field_input.tpl" field=$dbhost}}
+{{include file="field_input.tpl" field=$dbport}}
+{{include file="field_input.tpl" field=$dbuser}}
+{{include file="field_password.tpl" field=$dbpass}}
+{{include file="field_input.tpl" field=$dbdata}}
+{{include file="field_select.tpl" field=$dbtype}}
+
+<input id="install-submit" type="submit" name="submit" value="{{$submit}}" />
+
+</form>
+
diff --git a/view/tpl/install_settings.tpl b/view/tpl/install_settings.tpl
new file mode 100755
index 000000000..62dcbb8b3
--- /dev/null
+++ b/view/tpl/install_settings.tpl
@@ -0,0 +1,28 @@
+<h1>{{$title}}</h1>
+<h2>{{$pass}}</h2>
+
+
+{{if $status}}
+<h3 class="error-message">{{$status}}</h3>
+{{/if}}
+
+<form id="install-form" action="{{$baseurl}}/setup" method="post">
+
+<input type="hidden" name="phpath" value="{{$phpath}}" />
+<input type="hidden" name="dbhost" value="{{$dbhost}}" />
+<input type="hidden" name="dbport" value="{{$dbport}}" />
+<input type="hidden" name="dbuser" value="{{$dbuser}}" />
+<input type="hidden" name="dbpass" value="{{$dbpass}}" />
+<input type="hidden" name="dbdata" value="{{$dbdata}}" />
+<input type="hidden" name="dbtype" value="{{$dbtype}}" />
+<input type="hidden" name="pass" value="4" />
+
+{{include file="field_input.tpl" field=$adminmail}}
+{{include file="field_input.tpl" field=$siteurl}}
+
+{{include file="field_select_grouped.tpl" field=$timezone}}
+
+<input id="install-submit" type="submit" name="submit" value="{{$submit}}" />
+
+</form>
+
diff --git a/view/tpl/invite.tpl b/view/tpl/invite.tpl
new file mode 100755
index 000000000..440e1e02b
--- /dev/null
+++ b/view/tpl/invite.tpl
@@ -0,0 +1,28 @@
+<div id="invite" class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$invite}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+
+ <form action="invite" method="post" id="invite-form" >
+
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <div id="invite-recipient-textarea" class="form-group field custom">
+ <label for="recipients">{{$addr_text}}</label>
+ <textarea id="invite-recipients" name="recipients" rows="6" class="form-control"></textarea>
+ </div>
+
+ <div id="invite-message-textarea" class="form-group field custom">
+ <label for="message">{{$msg_text}}</label>
+ <textarea id="invite-message" name="message" rows="12" class="form-control">{{$default_message}}</textarea>
+ </div>
+
+ <div id="invite-submit-wrapper" class="form-group">
+ <button class="btn btn-primary btn-sm" type="submit" id="invite-submit" name="submit" value="{{$submit}}">{{$submit}}</button>
+ </div>
+
+ </form>
+
+ </div>
+</div>
diff --git a/view/tpl/item_attach.tpl b/view/tpl/item_attach.tpl
new file mode 100644
index 000000000..95e38c0bd
--- /dev/null
+++ b/view/tpl/item_attach.tpl
@@ -0,0 +1,5 @@
+{{if $attaches}}
+{{foreach $attaches as $a}}
+<a class="dropdown-item" href="{{$a.url}}" title="{{$a.title}}"><i class="fa {{$a.icon}} attach-icons"></i>&nbsp;{{$a.label}}</a>
+{{/foreach}}
+{{/if}}
diff --git a/view/tpl/item_binary.tpl b/view/tpl/item_binary.tpl
new file mode 100644
index 000000000..b19f7e7dd
--- /dev/null
+++ b/view/tpl/item_binary.tpl
@@ -0,0 +1,3 @@
+<p>
+<center><a class="zrl" href="{{$url}}"><button class="btn btn-warning fakelink">{{$download}}</button></a></center>
+</p>
diff --git a/view/tpl/item_categories.tpl b/view/tpl/item_categories.tpl
new file mode 100644
index 000000000..e1b183c0d
--- /dev/null
+++ b/view/tpl/item_categories.tpl
@@ -0,0 +1,8 @@
+{{if $categories}}
+<!--div class="categorytags"-->
+{{foreach $categories as $cat}}
+<span class="item-category badge badge-pill badge-warning"><i class="fa fa-asterisk"></i>&nbsp;{{if $cat.url}}<a class="text-white" 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
new file mode 100644
index 000000000..4eb621f93
--- /dev/null
+++ b/view/tpl/item_filer.tpl
@@ -0,0 +1,8 @@
+{{if $categories}}
+<!--div class="filesavetags"-->
+{{foreach $categories as $cat}}
+<span class="item-category badge badge-pill badge-danger"><i class="fa fa-folder-o"></i>&nbsp;{{$cat.term}}&nbsp;<a href="{{$cat.removelink}}" class="text-white" title="{{$remove}}"><i class="fa fa-close"></i></a></span>
+{{/foreach}}
+<!--/div-->
+{{/if}}
+
diff --git a/view/tpl/item_import.tpl b/view/tpl/item_import.tpl
new file mode 100755
index 000000000..e976417e1
--- /dev/null
+++ b/view/tpl/item_import.tpl
@@ -0,0 +1,13 @@
+<h2>{{$title}}</h2>
+
+<form action="import_items" method="post" enctype="multipart/form-data" id="import-channel-form">
+ <input type="hidden" name="form_security_token" value="{{$form_security_token}}">
+ <div id="import-desc" class="descriptive-paragraph">{{$desc}}</div>
+
+ <label for="import-filename" id="label-import-filename" class="import-label" >{{$label_filename}}</label>
+ <input type="file" name="filename" id="import-filename" class="import-input" value="" />
+ <div id="import-filename-end" class="import-field-end"></div>
+
+ <input type="submit" name="submit" id="import-submit-button" value="{{$submit}}" />
+ <div id="import-submit-end" class="import-field-end"></div>
+</form>
diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl
new file mode 100755
index 000000000..1cc5a898a
--- /dev/null
+++ b/view/tpl/jot-header.tpl
@@ -0,0 +1,598 @@
+<script language="javascript" type="text/javascript">
+
+var editor = false;
+var plaintext = '{{$editselect}}';
+var pretext = '{{$pretext}}';
+
+function initEditor(cb){
+ if (editor==false){
+ $("#profile-jot-text-loading").spin('small').show();
+ {{$geotag}}
+ if(plaintext == 'none') {
+ $("#profile-jot-text-loading").spin(false).hide();
+ $("#profile-jot-text").css({ 'height': 200 });
+ {{if $bbco_autocomplete}}
+ $("#profile-jot-text").bbco_autocomplete('{{$bbco_autocomplete}}'); // autocomplete bbcode
+ {{/if}}
+ {{if $editor_autocomplete}}
+ if(typeof channelId === 'undefined')
+ $("#profile-jot-text").editor_autocomplete(baseurl+"/acl");
+ else
+ $("#profile-jot-text").editor_autocomplete(baseurl+"/acl",[channelId]); // Also gives suggestions from current channel's connections
+ {{/if}}
+ editor = true;
+ $("a#jot-perms-icon").colorbox({
+ 'inline' : true,
+ 'transition' : 'elastic'
+ });
+ $(".jothidden").show();
+ $("#profile-jot-text").addClass('jot-expanded');
+ if (typeof cb!="undefined") cb();
+ if(pretext.length)
+ addeditortext(pretext);
+ return;
+ }
+ tinyMCE.init({
+ theme : "advanced",
+ mode : "specific_textareas",
+ editor_selector: {{$editselect}},
+ auto_focus: "profile-jot-text",
+ plugins : "bbcode,paste,autoresize, inlinepopups",
+ theme_advanced_buttons1 : "bold,italic,underline,undo,redo,link,unlink,image,forecolor,formatselect,code",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "center",
+ theme_advanced_blockformats : "blockquote,code",
+ gecko_spellcheck : true,
+ paste_text_sticky : true,
+ entity_encoding : "raw",
+ add_unload_trigger : false,
+ remove_linebreaks : false,
+ force_p_newlines : false,
+ force_br_newlines : true,
+ forced_root_block : '',
+ convert_urls: false,
+ content_css: "{{$baseurl}}/view/custom_tinymce.css",
+ theme_advanced_path : false,
+ file_browser_callback : "fcFileBrowser",
+ setup : function(ed) {
+ cPopup = null;
+ ed.onKeyDown.add(function(ed,e) {
+ if(cPopup !== null)
+ cPopup.onkey(e);
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ var txt = tinyMCE.activeEditor.getContent();
+ match = txt.match(/@([^ \n]+)$/);
+ if(match!==null) {
+ if(cPopup === null) {
+ cPopup = new ACPopup(this,baseurl+"/acl");
+ }
+ if(cPopup.ready && match[1]!==cPopup.searchText) cPopup.search(match[1]);
+ if(! cPopup.ready) cPopup = null;
+ }
+ else {
+ if(cPopup !== null) { cPopup.close(); cPopup = null; }
+ }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.pasteAsPlainText = true;
+ $("#profile-jot-text-loading").spin(false).hide();
+ $(".jothidden").show();
+ if (typeof cb!="undefined") cb();
+ });
+
+ }
+ });
+
+ editor = true;
+ } else {
+ if (typeof cb!="undefined") cb();
+ }
+}
+
+function enableOnUser(){
+ if (editor) return;
+ $(this).val("");
+ initEditor();
+}
+</script>
+<script type="text/javascript" src="{{$baseurl}}/view/js/ajaxupload.js" ></script>
+<script>
+ $(document).ready(function() {
+ /* enable tinymce on focus and click */
+ $("#profile-jot-text").focus(enableOnUser);
+ $("#profile-jot-text").click(enableOnUser);
+
+ var upload_title = $('#wall-image-upload').attr('title');
+ var attach_title = $('#wall-file-upload').attr('title');
+ try {
+ var uploader = new window.AjaxUpload('wall-image-upload',
+ { action: '{{$baseurl}}/wall_upload/{{$nickname}}',
+ name: 'userfile',
+ title: upload_title,
+ onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addeditortext(response);
+ $('#jot-media').val($('#jot-media').val() + response);
+ $('#profile-rotator').spin(false);
+ }
+ });
+ } catch (e) {
+ }
+ try {
+ var uploader_sub = new window.AjaxUpload('wall-image-upload-sub',
+ { action: '{{$baseurl}}/wall_upload/{{$nickname}}',
+ name: 'userfile',
+ title: upload_title,
+ onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addeditortext(response);
+ $('#jot-media').val($('#jot-media').val() + response);
+ $('#profile-rotator').spin(false);
+ }
+ });
+ } catch(e) {
+ }
+ try {
+ var file_uploader = new window.AjaxUpload('wall-file-upload',
+ { action: '{{$baseurl}}/wall_attach/{{$nickname}}',
+ name: 'userfile',
+ title: attach_title,
+ onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addeditortext(response);
+ $('#jot-media').val($('#jot-media').val() + response);
+ $('#profile-rotator').spin(false);
+ }
+ });
+ } catch(e) {
+ }
+ try {
+ var file_uploader_sub = new window.AjaxUpload('wall-file-upload-sub',
+ { action: '{{$baseurl}}/wall_attach/{{$nickname}}',
+ name: 'userfile',
+ title: attach_title,
+ onSubmit: function(file,ext) { $('#profile-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addeditortext(response);
+ $('#jot-media').val($('#jot-media').val() + response);
+ $('#profile-rotator').spin(false);
+ }
+ });
+ } catch(e) {
+ }
+
+
+ // call initialization file
+ if (window.File && window.FileList && window.FileReader) {
+ DragDropUploadInit();
+ }
+ });
+
+ function deleteCheckedItems() {
+ var checkedstr = '';
+
+ $('.item-select').each( function() {
+ if($(this).is(':checked')) {
+ if(checkedstr.length != 0) {
+ checkedstr = checkedstr + ',' + $(this).val();
+ }
+ else {
+ checkedstr = $(this).val();
+ }
+ }
+ });
+ $.post('item', { dropitems: checkedstr }, function(data) {
+ window.location.reload();
+ });
+ }
+
+ function jotGetLink() {
+ textarea = document.getElementById('profile-jot-text');
+ if (textarea.selectionStart || textarea.selectionStart == "0") {
+ var start = textarea.selectionStart;
+ var end = textarea.selectionEnd;
+ if (end > start) {
+ reply = prompt("{{$linkurl}}");
+ if(reply && reply.length) {
+ textarea.value = textarea.value.substring(0, start) + "[url=" + reply + "]" + textarea.value.substring(start, end) + "[/url]" + textarea.value.substring(end, textarea.value.length);
+ }
+ } else {
+ reply = prompt("{{$linkurl}}");
+ if(reply && reply.length) {
+ reply = bin2hex(reply);
+ $('#profile-rotator').spin('tiny');
+ $.get('{{$baseurl}}/linkinfo?f=&binurl=' + reply, function(data) {
+ addeditortext(data);
+ $('#profile-rotator').spin(false);
+ });
+ }
+ }
+ }
+ }
+
+ function jotGetLocation() {
+ reply = prompt("{{$whereareu}}", $('#jot-location').val());
+ if(reply && reply.length) {
+ $('#jot-location').val(reply);
+ }
+ }
+
+ function jotGetExpiry() {
+ //reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
+ $('#expiryModal').modal();
+ $('#expiry-modal-OKButton').on('click', function() {
+ reply=$('#expiration-date').val();
+ if(reply && reply.length) {
+ $('#jot-expire').val(reply);
+ $('#expiryModal').modal('hide');
+ }
+ })
+ }
+
+ function jotGetPubDate() {
+ //reply = prompt("{{$expirewhen}}", $('#jot-expire').val());
+ $('#createdModal').modal();
+ $('#created-modal-OKButton').on('click', function() {
+ reply=$('#created-date').val();
+ if(reply && reply.length) {
+ $('#jot-created').val(reply);
+ $('#createdModal').modal('hide');
+ }
+ })
+ }
+
+
+ function jotShare(id) {
+ if ($('#jot-popup').length != 0) $('#jot-popup').show();
+
+ $('#like-rotator-' + id).spin('tiny');
+ $.get('{{$baseurl}}/share/' + id, function(data) {
+ if (!editor) $("#profile-jot-text").val("");
+ initEditor(function(){
+ addeditortext(data);
+ $('#like-rotator-' + id).spin(false);
+ $(window).scrollTop(0);
+ });
+ });
+ }
+
+ function linkdropper(event) {
+ var linkFound = event.dataTransfer.types.contains("text/uri-list");
+ if(linkFound) {
+ event.preventDefault();
+ var editwin = '#' + event.target.id;
+ var commentwin = false;
+ if(editwin) {
+ commentwin = ((editwin.indexOf('comment') >= 0) ? true : false);
+ if(commentwin) {
+ var commentid = editwin.substring(editwin.lastIndexOf('-') + 1);
+ $('#comment-edit-text-' + commentid).addClass('hover');
+ }
+ }
+ }
+ }
+
+ function linkdropexit(event) {
+ var editwin = '#' + event.target.id;
+ var commentwin = false;
+ if(editwin) {
+ commentwin = ((editwin.indexOf('comment') >= 0) ? true : false);
+ if(commentwin) {
+ var commentid = editwin.substring(editwin.lastIndexOf('-') + 1);
+ $('#comment-edit-text-' + commentid).removeClass('hover');
+ }
+ }
+ }
+
+ function linkdrop(event) {
+ var reply = event.dataTransfer.getData("text/uri-list");
+ event.preventDefault();
+ var editwin = '#' + event.target.id;
+ var commentwin = false;
+ if(editwin) {
+ commentwin = ((editwin.indexOf('comment') >= 0) ? true : false);
+ if(commentwin) {
+ var commentid = editwin.substring(editwin.lastIndexOf('-') + 1);
+ commentOpen(document.getElementById(event.target.id),commentid);
+
+ }
+ }
+
+ if(reply && reply.length) {
+ reply = bin2hex(reply);
+ $('#profile-rotator').spin('tiny');
+ $.get('{{$baseurl}}/linkinfo?f=&binurl=' + reply, function(data) {
+ if(commentwin) {
+ $(editwin).val( $(editwin).val() + data );
+ $('#profile-rotator').spin(false);
+ }
+ else {
+ if (!editor) $("#profile-jot-text").val("");
+ initEditor(function(){
+ addeditortext(data);
+ $('#profile-rotator').spin(false);
+ });
+ }
+ });
+ }
+ }
+
+ function itemTag(id) {
+ reply = prompt("{{$term}}");
+ if(reply && reply.length) {
+ reply = reply.replace('#','');
+ if(reply.length) {
+
+ commentBusy = true;
+ $('body').css('cursor', 'wait');
+
+ $.get('{{$baseurl}}/tagger/' + id + '?term=' + reply);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,3000);
+ liking = 1;
+ }
+ }
+ }
+
+ function itemFiler(id) {
+ if($('#item-filer-dialog').length)
+ $('#item-filer-dialog').remove();
+
+ $.get('filer/', function(data){
+ $('body').append(data);
+ $('#item-filer-dialog').modal('show');
+ $("#filer_save").click(function(e){
+ e.preventDefault();
+ reply = $("#id_term").val();
+ if(reply && reply.length) {
+ commentBusy = true;
+ $('body').css('cursor', 'wait');
+ $.get('{{$baseurl}}/filer/' + id + '?term=' + reply, NavUpdate);
+// if(timer) clearTimeout(timer);
+// timer = setTimeout(NavUpdate,3000);
+ liking = 1;
+ $('#item-filer-dialog').modal('hide');
+ }
+ return false;
+ });
+ });
+
+ }
+
+ function itemBookmark(id) {
+ $.get('{{$baseurl}}/bookmarks?f=&item=' + id);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,1000);
+ }
+
+ function itemAddToCal(id) {
+ $.get('{{$baseurl}}/events/add/' + id);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,1000);
+ }
+
+ function toggleVoting() {
+ if($('#jot-consensus').val() > 0) {
+ $('#jot-consensus').val(0);
+ $('#profile-voting, #profile-voting-sub').removeClass('fa-check-square-o').addClass('fa-square-o');
+ }
+ else {
+ $('#jot-consensus').val(1);
+ $('#profile-voting, #profile-voting-sub').removeClass('fa-square-o').addClass('fa-check-square-o');
+ }
+ }
+
+ function toggleNoComment() {
+ if($('#jot-nocomment').val() > 0) {
+ $('#jot-nocomment').val(0);
+ $('#profile-nocomment, #profile-nocomment-sub').removeClass('fa-comments-o').addClass('fa-comments');
+ $('#profile-nocomment-wrapper').attr('title', '{{$nocomment_enabled}}');
+ }
+ else {
+ $('#jot-nocomment').val(1);
+ $('#profile-nocomment, #profile-nocomment-sub').removeClass('fa-comments').addClass('fa-comments-o');
+ $('#profile-nocomment-wrapper').attr('title', '{{$nocomment_disabled}}');
+ }
+ }
+
+ function jotReact(id,icon) {
+ if(id && icon) {
+ $.get('{{$baseurl}}/react?f=&postid=' + id + '&emoji=' + icon);
+ if(timer) clearTimeout(timer);
+ timer = setTimeout(NavUpdate,1000);
+ }
+ }
+
+ function jotClearLocation() {
+ $('#jot-coord').val('');
+ $('#profile-nolocation-wrapper').attr('disabled', true);
+ }
+
+
+ var initializeEmbedPhotoDialog = function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ $(this).removeClass('embed-photo-selected-photo');
+ });
+ getPhotoAlbumList();
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('show');
+ };
+
+ var choosePhotoFromAlbum = function (album) {
+ $.post("embedphotos/album", {name: album},
+ function(data) {
+ if (data['status']) {
+ $('#embedPhotoModalLabel').html("{{$modalchooseimages}}");
+ $('#embedPhotoModalBodyAlbumDialog').html('\
+ <div><div class="nav nav-pills flex-column">\n\
+ <li class="nav-item"><a class="nav-link" href="#" onclick="initializeEmbedPhotoDialog();return false;">\n\
+ <i class="fa fa-chevron-left"></i>&nbsp\n\
+ {{$modaldiffalbum}}\n\
+ </a>\n\
+ </li>\n\
+ </div><br></div>')
+ $('#embedPhotoModalBodyAlbumDialog').append(data['content']);
+ $('#embedPhotoModalBodyAlbumDialog').click(function (evt) {
+ evt.preventDefault();
+ var image = document.getElementById(evt.target.id);
+ if (typeof($(image).parent()[0]) !== 'undefined') {
+ var imageparent = document.getElementById($(image).parent()[0].id);
+ $(imageparent).toggleClass('embed-photo-selected-photo');
+ }
+ });
+ $('#embedPhotoModalBodyAlbumListDialog').addClass('d-none');
+ $('#embedPhotoModalBodyAlbumDialog').removeClass('d-none');
+ $('#embed-photo-OKButton').click(function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ var href = $(this).attr('href');
+ $.post("embedphotos/photolink", {href: href},
+ function(ddata) {
+ if (ddata['status']) {
+ addeditortext(ddata['photolink']);
+ } else {
+ window.console.log("{{$modalerrorlink}}" + ':' + ddata['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ });
+ $('#embedPhotoModalBodyAlbumDialog').html('');
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('hide');
+ });
+ } 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');
+ };
+
+ //
+ // initialize
+ function DragDropUploadInit() {
+
+ var filedrag = $("#profile-jot-text");
+
+ // is XHR2 available?
+ var xhr = new XMLHttpRequest();
+ if (xhr.upload) {
+
+ // file drop
+ filedrag.on("dragover", DragDropUploadFileHover);
+ filedrag.on("dragleave", DragDropUploadFileHover);
+ filedrag.on("drop", DragDropUploadFileSelectHandler);
+
+ }
+
+ window.filesToUpload = 0;
+ window.fileUploadsCompleted = 0;
+
+
+ }
+
+ // file drag hover
+ function DragDropUploadFileHover(e) {
+ e.stopPropagation();
+ e.preventDefault();
+ e.target.className = (e.type == "dragover" ? "hover" : "");
+ }
+
+ // file selection
+ function DragDropUploadFileSelectHandler(e) {
+
+ // cancel event and hover styling
+ DragDropUploadFileHover(e);
+ if (!editor) $("#profile-jot-text").val("");
+
+
+ // fetch FileList object
+ var files = e.target.files || e.originalEvent.dataTransfer.files;
+ // process all File objects
+ for (var i = 0, f; f = files[i]; i++) {
+ DragDropUploadFile(f, i);
+ }
+
+ }
+
+ // upload files
+ function DragDropUploadFile(file, idx) {
+
+ window.filesToUpload = window.filesToUpload + 1;
+
+ var xhr = new XMLHttpRequest();
+ xhr.withCredentials = true; // Include the SESSION cookie info for authentication
+ (xhr.upload || xhr).addEventListener('progress', function (e) {
+ $('#profile-rotator').spin('tiny');
+ });
+ xhr.addEventListener('load', function (e) {
+ //console.log('xhr upload complete', e);
+ window.fileUploadsCompleted = window.fileUploadsCompleted + 1;
+
+ initEditor(function() {
+ addeditortext(xhr.responseText);
+ });
+
+ $('#jot-media').val($('#jot-media').val() + xhr.responseText);
+ // When all the uploads have completed, refresh the page
+ if (window.filesToUpload > 0 && window.fileUploadsCompleted === window.filesToUpload) {
+ $('#profile-rotator').spin(false);
+ window.fileUploadsCompleted = window.filesToUpload = 0;
+ }
+ });
+ // POST to the wall_upload endpoint
+ xhr.open('post', '{{$baseurl}}/wall_attach/{{$nickname}}', true);
+
+ var data = new FormData();
+ data.append('userfile', file);
+ xhr.send(data);
+ }
+
+</script>
+
+<script>
+$( document ).on( "click", ".wall-item-delete-link,.page-delete-link,.layout-delete-link,.block-delete-link", function(e) {
+ var link = $(this).attr("href"); // "get" the intended link in a var
+
+ if (typeof(eval($.fn.modal)) === 'function'){
+ e.preventDefault();
+ bootbox.confirm("<h4>{{$confirmdelete}}</h4>",function(result) {
+ if (result) {
+ document.location.href = link;
+ }
+ });
+ } else {
+ return confirm("{{$confirmdelete}}");
+ }
+});
+</script>
diff --git a/view/tpl/jot.tpl b/view/tpl/jot.tpl
new file mode 100755
index 000000000..dbbb470c5
--- /dev/null
+++ b/view/tpl/jot.tpl
@@ -0,0 +1,303 @@
+<form id="profile-jot-form" action="{{$action}}" method="post" class="acl-form" data-form_id="profile-jot-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ {{$mimeselect}}
+ {{$layoutselect}}
+ {{if $id_select}}
+ <div class="channel-id-select-div">
+ <span class="channel-id-select-desc">{{$id_seltext}}</span> {{$id_select}}
+ </div>
+ {{/if}}
+ <div class="mb-4" id="profile-jot-wrapper">
+ {{if $parent}}
+ <input type="hidden" name="parent" value="{{$parent}}" />
+ {{/if}}
+ <input type="hidden" name="obj_type" value="{{$ptyp}}" />
+ <input type="hidden" name="profile_uid" value="{{$profile_uid}}" />
+ <input type="hidden" name="return" value="{{$return_path}}" />
+ <input type="hidden" name="location" id="jot-location" value="{{$defloc}}" />
+ <input type="hidden" name="expire" id="jot-expire" value="{{$defexpire}}" />
+ <input type="hidden" name="created" id="jot-created" value="{{$defpublish}}" />
+ <input type="hidden" name="media_str" id="jot-media" value="" />
+ <input type="hidden" name="source" id="jot-source" value="{{$source}}" />
+ <input type="hidden" name="coord" id="jot-coord" value="" />
+ <input type="hidden" name="post_id" value="{{$post_id}}" />
+ <input type="hidden" name="webpage" value="{{$webpage}}" />
+ <input type="hidden" name="preview" id="jot-preview" value="0" />
+ <input type="hidden" id="jot-consensus" name="consensus" value="{{if $consensus}}{{$consensus}}{{else}}0{{/if}}" />
+ <input type="hidden" id="jot-nocomment" name="nocomment" value="{{if $nocomment}}{{$nocomment}}{{else}}0{{/if}}" />
+
+ {{if $webpage}}
+ <div id="jot-pagetitle-wrap" class="jothidden">
+ <input name="pagetitle" id="jot-pagetitle" type="text" placeholder="{{$placeholdpagetitle}}" value="{{$pagetitle}}">
+ </div>
+ {{/if}}
+ <div id="jot-title-wrap" class="jothidden">
+ <input name="title" id="jot-title" type="text" placeholder="{{$placeholdertitle}}" tabindex="1" value="{{$title}}">
+ </div>
+ {{if $catsenabled}}
+ <div id="jot-category-wrap" class="jothidden">
+ <input name="category" id="jot-category" type="text" placeholder="{{$placeholdercategory}}" value="{{$category}}" data-role="cat-tagsinput">
+ </div>
+ {{/if}}
+ <div id="jot-text-wrap">
+ <textarea class="profile-jot-text" id="profile-jot-text" name="body" tabindex="2" placeholder="{{$share}}" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" >{{$content}}</textarea>
+ </div>
+ {{if $attachment}}
+ <div id="jot-attachment-wrap">
+ <input class="jot-attachment" name="attachment" id="jot-attachment" type="text" value="{{$attachment}}" readonly="readonly" onclick="this.select();">
+ </div>
+ {{/if}}
+ <div id="profile-jot-submit-wrapper" class="clearfix p-2 jothidden">
+ <div id="profile-jot-submit-left" class="btn-toolbar float-left">
+ {{if $bbcode}}
+ <div class="btn-group mr-2">
+ <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>
+ <button id="main-editor-italic" class="btn btn-outline-secondary btn-sm" title="{{$italic}}" onclick="inserteditortag('i', 'profile-jot-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', 'profile-jot-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', 'profile-jot-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', 'profile-jot-text'); return false;">
+ <i class="fa fa-terminal jot-icons"></i>
+ </button>
+ </div>
+ {{/if}}
+ {{if $visitor}}
+ <div class="btn-group mr-2 d-none d-lg-flex">
+ {{if $writefiles}}
+ <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>
+ </button>
+ {{/if}}
+ {{if $weblink}}
+ <button id="profile-link-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$weblink}}" ondragenter="linkdropper(event);" ondragover="linkdropper(event);" ondrop="linkdrop(event);" onclick="jotGetLink(); return false;">
+ <i id="profile-link" class="fa fa-link jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $embedPhotos}}
+ <button id="embed-photo-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$embedPhotos}}" onclick="initializeEmbedPhotoDialog();return false;">
+ <i id="embed-photo" class="fa fa-file-image-o jot-icons"></i>
+ </button>
+ {{/if}}
+ </div>
+ <div class="btn-group mr-2 d-none d-lg-flex">
+ {{if $setloc}}
+ <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>
+ </button>
+ {{/if}}
+ {{if $clearloc}}
+ <button id="profile-nolocation-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$clearloc}}" onclick="jotClearLocation();return false;" disabled="disabled">
+ <i id="profile-nolocation" class="fa fa-circle-o jot-icons"></i>
+ </button>
+ {{/if}}
+ {{else}}
+ <div class="btn-group d-none d-lg-flex">
+ {{/if}}
+ {{if $feature_expire}}
+ <button id="profile-expire-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$expires}}" onclick="jotGetExpiry();return false;">
+ <i id="profile-expires" class="fa fa-eraser jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $feature_future}}
+ <button id="profile-future-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$future_txt}}" onclick="jotGetPubDate();return false;">
+ <i id="profile-future" class="fa fa-clock-o jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $feature_encrypt}}
+ <button id="profile-encrypt-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$encrypt}}" onclick="red_encrypt('{{$cipher}}','#profile-jot-text',$('#profile-jot-text').val());return false;">
+ <i id="profile-encrypt" class="fa fa-key jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $feature_voting}}
+ <button id="profile-voting-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$voting}}" onclick="toggleVoting();return false;">
+ <i id="profile-voting" class="fa fa-square-o jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $feature_nocomment}}
+ <button id="profile-nocomment-wrapper" class="btn btn-outline-secondary btn-sm" title="{{$nocommenttitle}}" onclick="toggleNoComment();return false;">
+ <i id="profile-nocomment" class="fa fa-comments jot-icons"></i>
+ </button>
+ {{/if}}
+ </div>
+ {{if $writefiles || $weblink || $setloc || $clearloc || $feature_expire || $feature_encrypt || $feature_voting}}
+ <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">
+ {{if $visitor}}
+ {{if $writefiles}}
+ <a class="dropdown-item" id="wall-file-upload-sub" href="#" ><i class="fa fa-paperclip"></i>&nbsp;{{$attach}}</a>
+ {{/if}}
+ {{if $weblink}}
+ <a class="dropdown-item" href="#" onclick="jotGetLink(); return false;"><i class="fa fa-link"></i>&nbsp;{{$weblink}}</a>
+ {{/if}}
+ {{if $embedPhotos}}
+ <a class="dropdown-item" href="#" onclick="initializeEmbedPhotoDialog(); return false;"><i class="fa fa-file-image-o jot-icons"></i>&nbsp;{{$embedPhotos}}</a>
+ {{/if}}
+ {{if $setloc}}
+ <a class="dropdown-item" href="#" onclick="jotGetLocation(); return false;"><i class="fa fa-globe"></i>&nbsp;{{$setloc}}</a>
+ {{/if}}
+ {{if $clearloc}}
+ <a class="dropdown-item" href="#" onclick="jotClearLocation(); return false;"><i class="fa fa-circle-o"></i>&nbsp;{{$clearloc}}</a>
+ {{/if}}
+ {{/if}}
+ {{if $feature_expire}}
+ <a class="dropdown-item" href="#" onclick="jotGetExpiry(); return false;"><i class="fa fa-eraser"></i>&nbsp;{{$expires}}</a>
+ {{/if}}
+ {{if $feature_future}}
+ <a class="dropdown-item" href="#" onclick="jotGetPubDate();return false;"><i class="fa fa-clock-o"></i>&nbsp;{{$future_txt}}</a>
+ {{/if}}
+ {{if $feature_encrypt}}
+ <a class="dropdown-item" href="#" onclick="red_encrypt('{{$cipher}}','#profile-jot-text',$('#profile-jot-text').val());return false;"><i class="fa fa-key"></i>&nbsp;{{$encrypt}}</a>
+ {{/if}}
+ {{if $feature_voting}}
+ <a class="dropdown-item" href="#" onclick="toggleVoting(); return false;"><i id="profile-voting-sub" class="fa fa-square-o"></i>&nbsp;{{$voting}}</a>
+ {{/if}}
+ {{if $feature_nocomment}}
+ <a class="dropdown-item" href="#" onclick="toggleNoComment(); return false;"><i id="profile-nocomment-sub" class="fa fa-comments"></i>&nbsp;{{$nocommenttitlesub}}</a>
+ {{/if}}
+ </div>
+ </div>
+ {{/if}}
+ </div>
+ <div id="profile-rotator-wrapper" class="float-left">
+ <div id="profile-rotator"></div>
+ </div>
+ <div id="profile-jot-submit-right" class="btn-group float-right">
+ {{if $preview}}
+ <button class="btn btn-outline-secondary btn-sm" onclick="preview_post();return false;" title="{{$preview}}">
+ <i class="fa fa-eye jot-icons" ></i>
+ </button>
+ {{/if}}
+ {{if $jotnets}}
+ <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}}">
+ <i class="fa fa-share-alt jot-icons"></i>
+ </button>
+ {{/if}}
+ {{if $showacl}}
+ <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">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}} jot-icons{{if $bang}} jot-lock-warn{{/if}}"></i>
+ </button>
+ {{/if}}
+ <button id="dbtn-submit" class="btn btn-primary btn-sm" type="submit" tabindex="3" name="button-submit">{{$share}}</button>
+ </div>
+ <div class="clear"></div>
+ {{if $jotplugins}}
+ <div id="profile-jot-plugin-wrapper" class="mt-2">
+ {{$jotplugins}}
+ </div>
+ {{/if}}
+ {{if $jotnets}}
+ <div class="modal" id="jotnetsModal" tabindex="-1" role="dialog" aria-labelledby="jotnetsModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="expiryModalLabel">{{$jotnets_label}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </div>
+ <div class="modal-body">
+ {{$jotnets}}
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Close</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+ {{/if}}
+ </div>
+ </div>
+</form>
+
+<div id="jot-preview-content" style="display:none;"></div>
+
+{{$acl}}
+
+{{if $feature_expire}}
+<!-- Modal for item expiry-->
+<div class="modal" id="expiryModal" tabindex="-1" role="dialog" aria-labelledby="expiryModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="expiryModalLabel">{{$expires}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </div>
+ <div class="modal-body form-group" 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>
+ <script>
+ $(function () {
+ var picker = $('#expiration-date').datetimepicker({format:'Y-m-d H:i', minDate: 0 });
+ });
+ </script>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$expiryModalCANCEL}}</button>
+ <button id="expiry-modal-OKButton" type="button" class="btn btn-primary">{{$expiryModalOK}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+{{/if}}
+
+{{if $feature_future}}
+<div class="modal" id="createdModal" tabindex="-1" role="dialog" aria-labelledby="createdModalLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="createdModalLabel">{{$future_txt}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </div>
+ <div class="modal-body form-group" 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>
+ <script>
+ $(function () {
+ var picker = $('#created-date').datetimepicker({format:'Y-m-d H:i', minDate: 0 });
+ });
+ </script>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$expiryModalCANCEL}}</button>
+ <button id="created-modal-OKButton" type="button" class="btn btn-primary">{{$expiryModalOK}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+{{/if}}
+
+{{if $embedPhotos}}
+<div class="modal" id="embedPhotoModal" tabindex="-1" role="dialog" aria-labelledby="embedPhotoLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </div>
+ <div class="modal-body" id="embedPhotoModalBody" >
+ <div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
+ <div id="embedPhotoModalBodyAlbumList"></div>
+ </div>
+ <div id="embedPhotoModalBodyAlbumDialog" class="d-none"></div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$embedPhotosModalCancel}}</button>
+ <button id="embed-photo-OKButton" type="button" class="btn btn-primary">{{$embedPhotosModalOK}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+{{/if}}
+
+{{if $content || $attachment || $expanded}}
+<script>initEditor();</script>
+{{/if}}
diff --git a/view/tpl/jot_geotag.tpl b/view/tpl/jot_geotag.tpl
new file mode 100755
index 000000000..60f128850
--- /dev/null
+++ b/view/tpl/jot_geotag.tpl
@@ -0,0 +1,7 @@
+ if(navigator.geolocation) {
+ navigator.geolocation.getCurrentPosition(function(position) {
+ $('#jot-coord').val(position.coords.latitude + ' ' + position.coords.longitude);
+ $('#profile-nolocation-wrapper').attr('disabled', false);
+ });
+ }
+
diff --git a/view/tpl/js_strings.tpl b/view/tpl/js_strings.tpl
new file mode 100755
index 000000000..4243c2ea5
--- /dev/null
+++ b/view/tpl/js_strings.tpl
@@ -0,0 +1,57 @@
+<script>
+
+ var aStr = {
+
+ 'delitem' : "{{$delitem}}",
+ 'comment' : "{{$comment}}",
+ 'showmore' : "{{$showmore}}",
+ 'showfewer' : "{{$showfewer}}",
+ 'divgrowmore' : "{{$divgrowmore}}",
+ 'divgrowless' : "{{$divgrowless}}",
+ 'pwshort' : "{{$pwshort}}",
+ 'pwnomatch' : "{{$pwnomatch}}",
+ 'everybody' : "{{$everybody}}",
+ 'passphrase' : "{{$passphrase}}",
+ 'passhint' : "{{$passhint}}",
+ 'permschange' : "{{$permschange}}",
+ 'closeAll' : "{{$closeAll}}",
+ 'nothingnew' : "{{$nothingnew}}",
+ 'rating_desc' : "{{$rating_desc}}",
+ 'rating_val' : "{{$rating_val}}",
+ 'rating_text' : "{{$rating_text}}",
+ 'submit' : "{{$submit}}",
+ 'linkurl' : "{{$linkurl}}",
+ 'leavethispage' : "{{$leavethispage}}",
+ 'location' : "{{$location}}",
+
+ 't01' : "{{$t01}}",
+ 't02' : "{{$t02}}",
+ 't03' : "{{$t03}}",
+ 't04' : "{{$t04}}",
+ 't05' : "{{$t05}}",
+ 't06' : "{{$t06}}",
+ 't07' : "{{$t07}}",
+ 't08' : "{{$t08}}",
+ 't09' : "{{$t09}}",
+ 't10' : "{{$t10}}",
+ 't11' : "{{$t11}}",
+ 't12' : "{{$t12}}",
+ 't13' : "{{$t13}}",
+ 't14' : "{{$t14}}",
+ 't15' : "{{$t15}}",
+ 't16' : "{{$t16}}",
+ 't17' : "{{$t17}}",
+
+ 'monthNames' : [ "{{$January}}","{{$February}}","{{$March}}","{{$April}}","{{$May}}","{{$June}}","{{$July}}","{{$August}}","{{$September}}","{{$October}}","{{$November}}","{{$December}}" ],
+ 'monthNamesShort' : [ "{{$Jan}}","{{$Feb}}","{{$Mar}}","{{$Apr}}","{{$MayShort}}","{{$Jun}}","{{$Jul}}","{{$Aug}}","{{$Sep}}","{{$Oct}}","{{$Nov}}","{{$Dec}}" ],
+ 'dayNames' : ["{{$Sunday}}","{{$Monday}}","{{$Tuesday}}","{{$Wednesday}}","{{$Thursday}}","{{$Friday}}","{{$Saturday}}"],
+ 'dayNamesShort' : ["{{$Sun}}","{{$Mon}}","{{$Tue}}","{{$Wed}}","{{$Thu}}","{{$Fri}}","{{$Sat}}"],
+ 'today' : "{{$today}}",
+ 'month' : "{{$month}}",
+ 'week' : "{{$week}}",
+ 'day' : "{{$day}}",
+ 'allday' : "{{$allday}}"
+ };
+
+</script>
+
diff --git a/view/tpl/lang_selector.tpl b/view/tpl/lang_selector.tpl
new file mode 100755
index 000000000..1324442f3
--- /dev/null
+++ b/view/tpl/lang_selector.tpl
@@ -0,0 +1,13 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$title}}</h1>
+<br />
+<div id="language-selector" >
+ <form action="#" method="post" >
+ <select name="system_language" onchange="this.form.submit();" >
+ {{foreach $langs.0 as $v=>$l}}
+ <option value="{{$v}}" {{if $v==$langs.1}}selected="selected"{{/if}}>{{$l}}</option>
+ {{/foreach}}
+ </select>
+ </form>
+</div>
+</div>
diff --git a/view/tpl/layoutlist.tpl b/view/tpl/layoutlist.tpl
new file mode 100644
index 000000000..1bbe14893
--- /dev/null
+++ b/view/tpl/layoutlist.tpl
@@ -0,0 +1,71 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $editor}}
+ <div class="pull-right">
+ <button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('layout-editor');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
+ <a href="{{$help.url}}" target="_blank" class="btn btn-sm btn-warning" title="{{$help.title}}"><i class="fa fa-info"></i>&nbsp;{{$help.text}}</a>
+ </div>
+ {{/if}}
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{if $editor}}
+ <div id="layout-editor" class="section-content-tools-wrapper">
+ {{$editor}}
+ </div>
+ {{/if}}
+
+ {{if $pages}}
+ <div id="pagelist-content-wrapper" class="section-content-wrapper-np">
+ <table id="layout-list-table">
+ <tr>
+ <th width="1%">{{$name}}</th>
+ <th width="94%">{{$descr}}</th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%" class="d-none d-md-table-cell">{{$created}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$edited}}</th>
+ </tr>
+ {{foreach $pages as $key => $items}}
+ {{foreach $items as $item}}
+ <tr id="layout-list-item-{{$item.url}}">
+ <td>
+ {{if $view}}
+ <a href="page/{{$channel}}/{{$item.title}}" title="{{$view}}">{{$item.title}}</a>
+ {{else}}
+ {{$item.title}}
+ {{/if}}
+ </td>
+ <td>
+ {{$item.descr}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="fa fa-pencil"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $item.bb_element}}
+ <a href="rpost?attachment={{$item.bb_element}}" title="{{$share}}"><i class="fa fa-share-square-o"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="#" title="{{$delete}}" onclick="dropItem('item/drop/{{$item.url}}', '#layout-list-item-{{$item.url}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ {{/if}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.created}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.edited}}
+ </td>
+ </tr>
+ {{/foreach}}
+ {{/foreach}}
+ </table>
+ </div>
+ <div class="clear"></div>
+ {{/if}}
+</div>
diff --git a/view/tpl/like_noshare.tpl b/view/tpl/like_noshare.tpl
new file mode 100755
index 000000000..e83b885fe
--- /dev/null
+++ b/view/tpl/like_noshare.tpl
@@ -0,0 +1,5 @@
+<div class="wall-item-like-buttons" id="wall-item-like-buttons-{{$id}}">
+ <i class="fa fa-thumbs-o-up item-tool btn btn-outline-secondary" title="{{$likethis}}" onclick="dolike({{$id}},'like'); return false"></i>
+ <i class="fa fa-thumbs-o-down item-tool btn btn-outline-secondary" title="{{$nolike}}" onclick="dolike({{$id}},'dislike'); return false"></i>
+ <div id="like-rotator-{{$id}}" class="like-rotator"></div>
+</div>
diff --git a/view/tpl/locmanage.tpl b/view/tpl/locmanage.tpl
new file mode 100644
index 000000000..a8c75b6a8
--- /dev/null
+++ b/view/tpl/locmanage.tpl
@@ -0,0 +1,41 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <script>
+ function primehub(id) {
+ $.post(baseurl + '/locs','primary='+id,function(data) { window.location.href=window.location.href; });
+ }
+ function drophub(id) {
+ $.post(baseurl + '/locs','drop='+id,function(data) { window.location.href=window.location.href; });
+ }
+ </script>
+ <button class="btn btn-success btn-sm pull-right" onclick="window.location.href='/locs/f=&sync=1'; return false;"><i class="fa fa-refresh"></i>&nbsp;{{$sync}}</button>
+ <h2>{{$header}}</h2>
+ </div>
+ <div class="section-content-wrapper-np">
+ <div class="section-content-warning-wrapper">
+ {{$sync_text}}
+ </div>
+ <div class="section-content-info-wrapper">
+ {{$drop_text}}<br>
+ {{$last_resort}}
+ </div>
+ <table id="locs-index">
+ <tr>
+ <th>{{$addr}}</th>
+ <th class="d-none d-md-table-cell">{{$loc}}</th>
+ <th>{{$mkprm}}</th>
+ <th>{{$drop}}</th>
+ </tr>
+ {{foreach $hubs as $hub}}
+ {{if ! $hub.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>
+ </tr>
+ {{/if}}
+ {{/foreach}}
+ </table>
+ </div>
+</div>
diff --git a/view/tpl/login.tpl b/view/tpl/login.tpl
new file mode 100755
index 000000000..3d3faa41c
--- /dev/null
+++ b/view/tpl/login.tpl
@@ -0,0 +1,21 @@
+<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>
+ {{foreach $hiddens as $k=>$v}}
+ <input type="hidden" name="{{$k}}" value="{{$v}}" />
+ {{/foreach}}
+</form>
+{{if $login_page}}
+<script type="text/javascript"> $(document).ready(function() { $("#id_{{$lname.0}}").focus();} );</script>
+{{/if}}
diff --git a/view/tpl/logout.tpl b/view/tpl/logout.tpl
new file mode 100755
index 000000000..7548ed196
--- /dev/null
+++ b/view/tpl/logout.tpl
@@ -0,0 +1,6 @@
+<form action="{{$dest_url}}" method="post" >
+<div class="logout-wrapper">
+<input type="hidden" name="auth-params" value="logout" />
+<input type="submit" name="submit" id="logout-button" value="{{$logout}}" />
+</div>
+</form>
diff --git a/view/tpl/lostpass.tpl b/view/tpl/lostpass.tpl
new file mode 100755
index 000000000..8ecfd215b
--- /dev/null
+++ b/view/tpl/lostpass.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper-styled">
+<h3>{{$title}}</h3>
+
+<p id="lostpass-desc">
+{{$desc}}
+</p>
+
+<form action="lostpass" method="post" >
+<div id="login-name-wrapper">
+ <label for="login-name" id="label-login-name">{{$name}}</label>
+ <input type="text" maxlength="60" name="login-name" id="login-name" value="" />
+ <input type="submit" name="submit" id="lostpass-submit-button" value="{{$submit}}" />
+</div>
+<div id="login-extra-end"></div>
+<div id="login-submit-end"></div>
+</form>
+</div>
diff --git a/view/tpl/mail_conv.tpl b/view/tpl/mail_conv.tpl
new file mode 100755
index 000000000..759517b7f
--- /dev/null
+++ b/view/tpl/mail_conv.tpl
@@ -0,0 +1,38 @@
+<div id="mail-{{$mail.id}}" class="mb-2 clearfix mail-conv-outside-wrapper">
+ <div class="mb-2 clearfix wall-item-head">
+ <div class="wall-item-info" >
+ <a href="{{$mail.from_url}}"><img class="wall-item-photo" src="{{$mail.from_photo}}" alt="{{$mail.from_name}}" /></a>
+ </div>
+ <div class="mail-conv-detail">
+ {{if $mail.is_recalled}}<strong>{{$mail.is_recalled}}</strong>{{/if}}
+ <div class="wall-item-name"><a class="wall-item-name-link" href="{{$mail.from_url}}">{{$mail.from_name}}</a></div>
+ <div class="autotime wall-item-ago" title="{{$mail.date}}">{{$mail.date}}</div>
+ </div>
+ </div>
+ <div class="clearfix mail-conv-content">
+ <div class="clearfix mail-conv-body">
+ {{$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-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}}">
+ <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}}
+ <a class="dropdown-item" href="mail/{{$mail.mailbox}}/recall/{{$mail.id}}" title="{{$mail.recall}}" id="mail-conv-recall-icon-{{$mail.id}}"><i class="fa fa-fw fa-undo"></i>&nbsp;{{$mail.recall}}</a>
+ {{/if}}
+ <a class="dropdown-item" href="#" onclick="dropItem('mail/{{$mail.mailbox}}/drop/{{$mail.id}}', '#mail-{{$mail.id}}'); return false;" title="{{$mail.delete}}" id="mail-conv-delete-icon-{{$mail.id}}"><i class="fa fa-fw fa-trash-o"></i>&nbsp;{{$mail.delete}}</a>
+ {{if $mail.can_recall}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="dreport/mail/{{$mail.mid}}" title="{{$mail.dreport}}" id="mail-conv-dreport-icon-{{$mail.id}}">{{$mail.dreport}}</a>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/mail_display.tpl b/view/tpl/mail_display.tpl
new file mode 100755
index 000000000..e8549a49b
--- /dev/null
+++ b/view/tpl/mail_display.tpl
@@ -0,0 +1,24 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <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'}}
+ <a class="btn btn-sm btn-danger" href="mail/{{$mailbox}}/dropconv/{{$thread_id}}" onclick="return confirmDelete();"><i class="fa fa-trash-o"></i> {{$delete}}</a>
+ {{/if}}
+ </div>
+ <h2>{{$prvmsg_header}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-wrapper">
+ {{foreach $mails as $mail}}
+ {{include file="mail_conv.tpl"}}
+ {{/foreach}}
+
+ {{if $canreply}}
+ {{include file="prv_message.tpl"}}
+ {{else}}
+ {{$unknown_text}}
+ {{/if}}
+ </div>
+</div>
diff --git a/view/tpl/mail_head.tpl b/view/tpl/mail_head.tpl
new file mode 100755
index 000000000..aac592a5f
--- /dev/null
+++ b/view/tpl/mail_head.tpl
@@ -0,0 +1,8 @@
+<div class="widget">
+ <h3>{{$header}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $messages as $message}}
+ {{include file="mail_list.tpl"}}
+ {{/foreach}}
+ </ul>
+</div>
diff --git a/view/tpl/mail_list.tpl b/view/tpl/mail_list.tpl
new file mode 100755
index 000000000..827c7628f
--- /dev/null
+++ b/view/tpl/mail_list.tpl
@@ -0,0 +1,7 @@
+<li class="nav-item">
+ <a href="mail/{{$message.mailbox}}/{{$message.id}}" class="nav-link{{if $message.selected}} active{{/if}}">
+ <span class="{{if $message.seen}}seen{{else}}unseen{{/if}}">{{$message.subject}}</span><br>
+ <span class="conv-participants">{{$message.from_name}} > {{$message.to_name}}</span><br>
+ <span class="wall-item-ago autotime" title="{{$message.date}}">{{$message.date}}</span>
+ </a>
+</li>
diff --git a/view/tpl/main_slider.tpl b/view/tpl/main_slider.tpl
new file mode 100755
index 000000000..a4e2e1925
--- /dev/null
+++ b/view/tpl/main_slider.tpl
@@ -0,0 +1,38 @@
+<div id="main-slider" class="slider" ><input id="main-range" type="text" name="cminmax" value="{{$val}}" /></div>
+<script>
+$(document).ready(function() {
+ var old_cmin = 0;
+ var old_cmax = 99;
+
+ $("#main-range").jRange({ isRange: true, from: 0, to: 99, step: 1, scale: [{{$labels}}], width:'100%', showLabels: false, onstatechange: function(v) {
+ var carr = v.split(",");
+ if(carr[0] != bParam_cmin) {
+ old_cmin = bParam_cmin;
+ bParam_cmin = carr[0];
+ }
+ if(carr[1] != bParam_cmax) {
+ old_cmax = bParam_cmax;
+ bParam_cmax = carr[1];
+ }
+ networkRefresh();
+ } });
+
+ var slideTimer = null;
+ function networkRefresh() {
+ $("#profile-jot-text-loading").show();
+
+ if((document.readyState !== "complete") || (slideTimer !== null))
+ return;
+ if((bParam_cmin == old_cmin) && (bParam_cmax == old_cmax))
+ return;
+ setTimeout(function() { $("#profile-jot-text-loading").spin('small'); }, 1000 );
+ slideTimer = setTimeout(networkTimerRefresh,2000);
+ }
+
+ function networkTimerRefresh() {
+ slideTimer = null;
+ page_load = true;
+ liveUpdate();
+ }
+});
+</script>
diff --git a/view/tpl/match.tpl b/view/tpl/match.tpl
new file mode 100755
index 000000000..a5ebb043c
--- /dev/null
+++ b/view/tpl/match.tpl
@@ -0,0 +1,16 @@
+<div class="profile-match-wrapper">
+ <div class="profile-match-photo">
+ <a href="{{$url}}">
+ <img src="{{$photo}}" alt="{{$name}}" title="{{$name}}[{{$tags}}]" />
+ </a>
+ </div>
+ <div class="profile-match-break"></div>
+ <div class="profile-match-name">
+ <a href="{{$url}}" title="{{$name}}[{{$tags}}]">{{$name}}</a>
+ </div>
+ <div class="profile-match-end"></div>
+ {{if $connlnk}}
+ <div class="profile-match-connect"><a href="{{$connlnk}}" title="{{$conntxt}}"><i class="fa fa-plus connect-icon"></i> {{$conntxt}}</a></div>
+ {{/if}}
+
+</div>
diff --git a/view/tpl/menuedit.tpl b/view/tpl/menuedit.tpl
new file mode 100644
index 000000000..84b16dc0b
--- /dev/null
+++ b/view/tpl/menuedit.tpl
@@ -0,0 +1,33 @@
+{{if $header}}
+<div class="generic-content-wrapper">
+<div class="section-title-wrapper">
+ {{if $menu_edit_link}}
+ <div class="pull-right">
+ <a href="{{$menu_edit_link}}" title="{{$hintedit}}" class="btn btn-sm btn-success"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$editcontents}}</a>
+ </div>
+ {{/if}}
+ <h2>{{$header}}</h2>
+ <div class="clear"></div>
+</div>
+{{/if}}
+<div id="menu-creator" class="section-content-tools-wrapper" style="display: {{$display}};">
+ <form id="menuedit" action="menu{{if $menu_id}}/{{$menu_id}}{{/if}}{{if $sys}}?f=&sys=1{{/if}}" method="post" >
+ {{if $menu_id}}
+ <input type="hidden" name="menu_id" value="{{$menu_id}}" />
+ {{/if}}
+ {{if $menu_system}}
+ <input type="hidden" name="menu_system" value="{{$menu_system}}" />
+ {{/if}}
+ {{include file="field_input.tpl" field=$menu_name}}
+ {{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" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}&nbsp;<i class="fa fa-caret-right"></i></button>
+ </div>
+ <div class="clear"></div>
+ </form>
+</div>
+{{if $header}}
+</div>
+{{/if}}
diff --git a/view/tpl/menulist.tpl b/view/tpl/menulist.tpl
new file mode 100644
index 000000000..e23035062
--- /dev/null
+++ b/view/tpl/menulist.tpl
@@ -0,0 +1,40 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('menu-creator');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$hintnew}}</button>
+ </div>
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+
+ {{$create}}
+
+ {{if $menus }}
+ <div id="menulist-content-wrapper" class="section-content-wrapper-np">
+ <table id="menu-list-table">
+ <tr>
+ <th width="1%"></th>
+ <th width="1%">{{$nametitle}}</th>
+ <th width="93%">{{$desctitle}}</th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%" class="d-none d-md-table-cell">{{$created}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$edited}}</th>
+ </tr>
+ {{foreach $menus as $m }}
+ <tr id="menu-list-item-{{$m.menu_id}}">
+ <td>{{if $m.bookmark}}<i class="fa fa-bookmark menu-list-tool" title="{{$bmark}}" ></i>{{/if}}</td>
+ <td><a href="mitem/{{$m.menu_id}}{{if $sys}}?f=&sys=1{{/if}}" title="{{$hintcontent}}">{{$m.menu_name}}</a></td>
+ <td>{{$m.menu_desc}}</td>
+ <td class="menu-list-tool"><a href="menu/{{$m.menu_id}}{{if $sys}}?f=&sys=1{{/if}}" title="{{$hintedit}}"><i class="fa fa-pencil"></i></a></td>
+ <td class="menu-list-tool"><a href="rpost?attachment={{$m.element}}" title="{{$share}}"><i class="fa fa-share-square-o"></i></a></td>
+ <td class="menu-list-tool"><a href="#" title="{{$hintdrop}}" onclick="dropItem('menu/{{$m.menu_id}}/drop{{if $sys}}?f=&sys=1{{/if}}', '#menu-list-item-{{$m.menu_id}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a></td>
+ <td class="d-none d-md-table-cell">{{$m.menu_created}}</td>
+ <td class="d-none d-md-table-cell">{{$m.menu_edited}}</td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+ {{/if}}
+</div>
diff --git a/view/tpl/message_side.tpl b/view/tpl/message_side.tpl
new file mode 100755
index 000000000..2ac61bf76
--- /dev/null
+++ b/view/tpl/message_side.tpl
@@ -0,0 +1,9 @@
+<div class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills flex-column">
+ <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/micropro_img.tpl b/view/tpl/micropro_img.tpl
new file mode 100755
index 000000000..a7c5973f3
--- /dev/null
+++ b/view/tpl/micropro_img.tpl
@@ -0,0 +1 @@
+<div class="contact-block-div{{if $class}} {{$class}}{{/if}}"><a class="contact-block-link{{if $class}} {{$class}}{{/if}}{{if $click}} fakelink{{/if}}" href="{{if $click}}#{{else}}{{$url}}{{/if}}" {{if $click}}onclick="{{$click}}"{{/if}}><img class="contact-block-img{{if $class}} {{$class}}{{/if}}" src="{{$photo}}" title="{{$title}}" alt="" /></a></div>
diff --git a/view/tpl/micropro_txt.tpl b/view/tpl/micropro_txt.tpl
new file mode 100755
index 000000000..295e7940d
--- /dev/null
+++ b/view/tpl/micropro_txt.tpl
@@ -0,0 +1 @@
+<div class="contact-block-textdiv{{if $class}} {{$class}}{{/if}}"><a class="contact-block-link{{if $class}} {{$class}}{{/if}}{{if $click}} fakelink{{/if}}" href="{{if $click}}#{{else}}{{$url}}{{/if}}" {{if $click}}onclick="{{$click}}"{{/if}} title="{{$title}}">{{$name}}</a></div>
diff --git a/view/tpl/mitemedit.tpl b/view/tpl/mitemedit.tpl
new file mode 100644
index 000000000..9f696fc23
--- /dev/null
+++ b/view/tpl/mitemedit.tpl
@@ -0,0 +1,42 @@
+{{if $header}}
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$header}}</h2>
+ </div>
+{{/if}}
+ <div id="menu-element-creator" class="section-content-tools-wrapper" style="display: {{$display}};">
+ <form id="mitemedit" action="mitem/{{$menu_id}}{{if $mitem_id}}/{{$mitem_id}}{{/if}}{{if $sys}}?f=&sys=1{{/if}}" method="post" class="acl-form" data-form_id="mitemedit" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ <input type="hidden" name="menu_id" value="{{$menu_id}}" />
+ {{if $mitem_id}}
+ <input type="hidden" name="mitem_id" value="{{$mitem_id}}" />
+ {{/if}}
+ {{include file="field_input.tpl" field=$mitem_desc}}
+ {{include file="field_input.tpl" field=$mitem_link}}
+ {{if $menu_names}}
+ <datalist id="menu-names">
+ {{foreach $menu_names as $menu_name}}
+ <option value="{{$menu_name}}">
+ {{/foreach}}
+ </datalist>
+ {{/if}}
+ {{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="btn-group">
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
+ </button>
+ {{if $submit_more}}
+ <button class="btn btn-primary btn-sm" type="submit" name="submit-more" value="{{$submit_more}}">{{$submit_more}}&nbsp;<i class="fa fa-caret-right"></i></button>
+ {{/if}}
+ <button class="btn btn-primary btn-sm" type="submit" name="submit" value="{{$submit}}">{{$submit}}</button>
+ </div>
+ </div>
+ <div class="clear"></div>
+ </form>
+ {{$aclselect}}
+ </div>
+{{if $header}}
+</div>
+{{/if}}
diff --git a/view/tpl/mitemlist.tpl b/view/tpl/mitemlist.tpl
new file mode 100644
index 000000000..b28cdfc7e
--- /dev/null
+++ b/view/tpl/mitemlist.tpl
@@ -0,0 +1,34 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <button id="webpage-create-btn" class="btn btn-sm btn-success" onclick="openClose('menu-element-creator');"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$hintnew}}</button>
+ </div>
+ <h2>{{$title}} {{if $menudesc}}{{$menudesc}}{{else}}{{$menuname}}{{/if}}</h2>
+ <div class="clear"></div>
+ </div>
+
+ {{$create}}
+
+ {{if $mlist }}
+ <div id="mitemlist-content-wrapper" class="section-content-wrapper-np">
+ <table id="mitem-list-table">
+ <tr>
+ <th width="1%">{{$nametitle}}</th>
+ <th width="96%">{{$targettitle}}</th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ </tr>
+ {{foreach $mlist as $m }}
+ <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"><a href="mitem/{{$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/{{$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>
+ {{/foreach}}
+ </table>
+ </div>
+ {{/if}}
+</div>
diff --git a/view/tpl/mood_content.tpl b/view/tpl/mood_content.tpl
new file mode 100755
index 000000000..315ee4c8a
--- /dev/null
+++ b/view/tpl/mood_content.tpl
@@ -0,0 +1,33 @@
+
+<div id="mood-content" class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+
+ <div id="mood-desc">{{$desc}}</div>
+
+ <br />
+ <br />
+
+
+ <form action="mood" method="get">
+ <br />
+ <br />
+
+ <input id="mood-parent" type="hidden" value="{{$parent}}" name="parent" />
+
+ <div class="form-group field custom">
+ <select name="verb" id="mood-verb-select" class="form-control" >
+ {{foreach $verbs as $v}}
+ <option value="{{$v.0}}">{{$v.1}}</option>
+ {{/foreach}}
+ </select>
+ </div>
+ <br />
+ <br />
+
+ <input type="submit" name="submit" value="{{$submit}}" />
+ </form>
+ </div>
+</div>
diff --git a/view/tpl/msg-header.tpl b/view/tpl/msg-header.tpl
new file mode 100755
index 000000000..013e1cfdc
--- /dev/null
+++ b/view/tpl/msg-header.tpl
@@ -0,0 +1,81 @@
+<script type="text/javascript" src="view/js/ajaxupload.js" ></script>
+<script language="javascript" type="text/javascript">
+
+ $("#prvmail-text").editor_autocomplete(baseurl+"/acl");
+
+
+ $(document).ready(function() {
+
+ var file_uploader = new window.AjaxUpload(
+ 'prvmail-attach-wrapper',
+ { action: 'wall_attach/{{$nickname}}',
+ name: 'userfile',
+ onSubmit: function(file,ext) { $('#prvmail-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addmailtext(response);
+ $('#prvmail-rotator').spin(false);
+ }
+ }
+ );
+
+ var file_uploader_sub = new window.AjaxUpload(
+ 'prvmail-attach-sub',
+ { action: 'wall_attach/{{$nickname}}',
+ name: 'userfile',
+ onSubmit: function(file,ext) { $('#prvmail-rotator').spin('tiny'); },
+ onComplete: function(file,response) {
+ addmailtext(response);
+ $('#prvmail-rotator').spin(false);
+ }
+ }
+ );
+
+
+ });
+
+ function prvmailJotGetLink() {
+ reply = prompt("{{$linkurl}}");
+ if(reply && reply.length) {
+ $('#prvmail-rotator').spin('tiny');
+ $.get('linkinfo?f=&url=' + reply, function(data) {
+ addmailtext(data);
+ $('#prvmail-rotator').spin(false);
+ });
+ }
+ }
+
+ function prvmailGetExpiry() {
+ reply = prompt("{{$expireswhen}}", $('#inp-prvmail-expires').val());
+ if(reply && reply.length) {
+ $('#inp-prvmail-expires').val(reply);
+ }
+ }
+
+ function linkdropper(event) {
+ var linkFound = event.dataTransfer.types.contains("text/uri-list");
+ if(linkFound)
+ event.preventDefault();
+ }
+
+ function linkdrop(event) {
+ var reply = event.dataTransfer.getData("text/uri-list");
+ event.target.textContent = reply;
+ event.preventDefault();
+ if(reply && reply.length) {
+ $('#prvmail-rotator').spin('tiny');
+ $.get('linkinfo?f=&url=' + reply, function(data) {
+ addmailtext(data);
+ $('#prvmail-rotator').spin(false);
+ });
+ }
+ }
+
+ 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
new file mode 100755
index 000000000..ccefa4a49
--- /dev/null
+++ b/view/tpl/myapps.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $authed}}
+ {{if $create}}
+ <a href="appman" class="pull-right btn btn-success btn-sm"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</a>
+ {{else}}
+ <a href="apps/edit{{if $cat}}/?f=&cat={{$cat}}{{/if}}" class="pull-right btn btn-primary btn-sm">{{$manage}}</a>
+ {{/if}}
+ {{/if}}
+ <h2>{{$title}}{{if $cat}} - {{$cat}}{{/if}}</h2>
+ </div>
+ <div class="clearfix section-content-wrapper">
+ {{foreach $apps as $ap}}
+ {{$ap}}
+ {{/foreach}}
+ </div>
+</div>
diff --git a/view/tpl/nav.tpl b/view/tpl/nav.tpl
new file mode 100755
index 000000000..c5b378b4f
--- /dev/null
+++ b/view/tpl/nav.tpl
@@ -0,0 +1,222 @@
+{{if $nav.login && !$userinfo}}
+<div class="d-md-none p-1">
+ <a class="btn btn-primary btn-sm text-white" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}_collapse" data-toggle="modal" data-target="#nav-login">
+ {{$nav.loginmenu.1.1}}
+ </a>
+ {{if $nav.register}}
+ <a class="btn btn-warning btn-sm text-white" href="{{$nav.register.0}}" title="{{$nav.register.3}}" id="{{$nav.register.4}}" >
+ {{$nav.register.1}}
+ </a>
+ {{/if}}
+</div>
+{{/if}}
+{{if $userinfo}}
+<div class="dropdown usermenu">
+ <div class="fakelink" data-toggle="dropdown">
+ <img id="avatar" src="{{$userinfo.icon}}" alt="{{$userinfo.name}}">
+ <i class="fa fa-caret-down"></i>
+ </div>
+ {{if $localuser}}
+ <div class="dropdown-menu">
+ {{foreach $nav.usermenu as $usermenu}}
+ <a class="dropdown-item" href="{{$usermenu.0}}" title="{{$usermenu.3}}" role="menuitem" id="{{$usermenu.4}}">{{$usermenu.1}}</a>
+ {{/foreach}}
+ {{if $nav.manage}}
+ <a class="dropdown-item" 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">{{$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" 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" 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>
+ {{else}}
+ {{if $nav.rusermenu}}
+ <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}}
+ {{/if}}
+</div>
+{{/if}}
+<div class="navbar-toggler-right">
+ {{if $nav.help.6}}
+ <button id="context-help-btn" class="navbar-toggler border-0" type="button" onclick="contextualHelp(); return false;">
+ <i class="fa fa-question-circle"></i>
+ </button>
+ {{/if}}
+ <button id="expand-aside" type="button" class="navbar-toggler border-0" data-toggle="offcanvas" data-target="#region_1">
+ <i class="fa fa-arrow-circle-right" id="expand-aside-icon"></i>
+ </button>
+ {{if $localuser}}
+ <button id="notifications-btn" type="button" class="navbar-toggler border-0 text-white" data-toggle="collapse" data-target="#navbar-collapse-1">
+ <i class="fa fa-exclamation-circle"></i>
+ </button>
+ {{/if}}
+ <button class="navbar-toggler" 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.network}}
+ <li class="nav-item dropdown net-button" style="display: none;">
+ <a class="nav-link" href="#" title="{{$nav.network.3}}" id="{{$nav.network.4}}" data-toggle="dropdown" rel="#nav-network-menu">
+ <i class="fa fa-fw fa-th"></i>
+ <span class="badge badge-pill badge-default net-update"></span>
+ </a>
+ <div id="nav-network-menu" class="dropdown-menu" rel="network">
+ <a class="dropdown-item" id="nav-network-see-all" href="{{$nav.network.all.0}}">{{$nav.network.all.1}}</a>
+ <a class="dropdown-item" id="nav-network-mark-all"href="#" onclick="markRead('network'); return false;">{{$nav.network.mark.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.home}}
+ <li class="nav-item dropdown home-button" style="display: none;">
+ <a class="nav-link" href="#" title="{{$nav.home.3}}" id="{{$nav.home.4}}" data-toggle="dropdown" rel="#nav-home-menu">
+ <i class="fa fa-fw fa-home"></i>
+ <span class="badge badge-pill badge-danger home-update"></span>
+ </a>
+ <div id="nav-home-menu" class="dropdown-menu" rel="home">
+ <a class="dropdown-item" id="nav-home-see-all" href="{{$nav.home.all.0}}">{{$nav.home.all.1}}</a>
+ <a class="dropdown-item" id="nav-home-mark-all" href="#" onclick="markRead('home'); return false;">{{$nav.home.mark.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.messages}}
+ <li class="nav-item dropdown mail-button" style="display: none;">
+ <a class="nav-link" href="#" title="{{$nav.messages.3}}" id="{{$nav.messages.4}}" data-toggle="dropdown" rel="#nav-messages-menu">
+ <i class="fa fa-fw fa-envelope"></i>
+ <span class="badge badge-pill badge-danger mail-update"></span>
+ </a>
+ <div id="nav-messages-menu" class="dropdown-menu" rel="messages">
+ <a class="dropdown-item" id="nav-messages-see-all" href="{{$nav.messages.all.0}}">{{$nav.messages.all.1}}</a>
+ <a class="dropdown-item" id="nav-messages-mark-all" href="#" onclick="markRead('messages'); return false;">{{$nav.messages.mark.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.all_events}}
+ <li class="nav-item dropdown all_events-button" style="display: none;">
+ <a class="nav-link" href="#" title="{{$nav.all_events.3}}" id="{{$nav.all_events.4}}" data-toggle="dropdown" rel="#nav-all_events-menu">
+ <i class="fa fa-fw fa-calendar"></i>
+ <span class="badge badge-pill badge-default all_events-update"></span>
+ </a>
+ <div id="nav-all_events-menu" class="dropdown-menu" rel="all_events">
+ <a class="dropdown-item" id="nav-all_events-see-all" href="{{$nav.all_events.all.0}}">{{$nav.all_events.all.1}}</a>
+ <a class="dropdown-item" id="nav-all_events-mark-all" href="#" onclick="markRead('all_events'); return false;">{{$nav.all_events.mark.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.intros}}
+ <li class="nav-item dropdown intro-button" style="display: none;">
+ <a class="nav-link" href="{{$nav.intros.0}}" title="{{$nav.intros.3}}" id="{{$nav.intros.4}}" data-toggle="dropdown" rel="#nav-intros-menu">
+ <i class="fa fa-fw fa-users"></i>
+ <span class="badge badge-pill badge-danger intro-update"></span>
+ </a>
+ <div id="nav-intros-menu" class="dropdown-menu" rel="intros">
+ <a class="dropdown-item" id="nav-intros-see-all" href="{{$nav.intros.all.0}}">{{$nav.intros.all.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.notifications}}
+ <li class="nav-item dropdown notify-button" style="display: none;">
+ <a class="nav-link" href="{{$nav.notifications.0}}" title="{{$nav.notifications.1}}" id="{{$nav.notifications.4}}" data-toggle="dropdown" rel="#nav-notify-menu">
+ <i class="fa fa-fw fa-exclamation"></i>
+ <span class="badge badge-pill badge-danger notify-update"></span>
+ </a>
+ <div id="nav-notify-menu" class="dropdown-menu" rel="notify">
+ <a class="dropdown-item" id="nav-notify-see-all" href="{{$nav.notifications.all.0}}">{{$nav.notifications.all.1}}</a>
+ <a class="dropdown-item" id="nav-notify-mark-all" href="#" onclick="markRead('notify'); return false;">{{$nav.notifications.mark.1}}</a>
+ {{$emptynotifications}}
+ </div>
+ </li>
+ {{/if}}
+ {{if $nav.login && !$userinfo}}
+ <li class="nav-item">
+ <a class="nav-link" href="#" title="{{$nav.loginmenu.1.3}}" id="{{$nav.loginmenu.1.4}}" data-toggle="modal" data-target="#nav-login">{{$nav.loginmenu.1.1}}</a>
+ </li>
+ {{/if}}
+ {{if $nav.register}}
+ <li class="nav-item {{$nav.register.2}} d-none d-md-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-md-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 d-none d-md-flex">{{$banner}}</div>
+
+ <ul id="nav-right" class="navbar-nav ml-auto d-none d-md-flex">
+ <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="&#xf002; {{$help}}" name="search" title="{{$nav.search.3}}" onclick="this.submit();" onblur="closeMenu('nav-search'); openMenu('nav-search-btn');"/>
+ </form>
+ <div id="nav-search-spinner"></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}}
+ <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 class="dropdown-menu dropdown-menu-right">
+ {{foreach $navapps as $navapp}}
+ {{$navapp}}
+ {{/foreach}}
+ {{if $localuser}}
+ <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>
+ {{/if}}
+ </div>
+ </li>
+ </ul>
+</div>
+<div class="collapse d-md-none" id="navbar-collapse-2">
+ <div class="navbar-nav mr-auto">
+ {{foreach $navapps as $navapp}}
+ {{$navapp|replace:'dropdown-item':'nav-link'}}
+ {{/foreach}}
+ {{if $localuser}}
+ <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>
+ {{/if}}
+ </div>
+</div>
+{{if $nav.help.6}}
+<div id="contextual-help-content" class="contextual-help-content">
+ {{$nav.help.5}}
+ <div class="float-right">
+ <a class="btn btn-primary btn-sm" target="hubzilla-help" href="{{$nav.help.0}}" title="{{$nav.help.3}}"><i class="fa fa-question"></i>&nbsp;{{$fulldocs}}</a>
+ <a class="contextual-help-tool" href="#" onclick="contextualHelp(); return false;"><i class="fa fa-times"></i></a>
+ </div>
+</div>
+{{/if}}
diff --git a/view/tpl/nav_login.tpl b/view/tpl/nav_login.tpl
new file mode 100644
index 000000000..b361b1a14
--- /dev/null
+++ b/view/tpl/nav_login.tpl
@@ -0,0 +1,18 @@
+{{if $nav.login && !$userinfo}}
+<div id="nav-login" class="modal" tabindex="-1" role="dialog">
+ <div class="modal-dialog" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title">{{$nav.loginmenu.1.1}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ </div>
+ <div class="modal-body">
+ <div class="form-group">
+ {{$nav.login}}
+ {{$nav.remote_login}}
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+{{/if}}
diff --git a/view/tpl/new_channel.tpl b/view/tpl/new_channel.tpl
new file mode 100755
index 000000000..cc1983ac4
--- /dev/null
+++ b/view/tpl/new_channel.tpl
@@ -0,0 +1,34 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+ <div class="section-content-info-wrapper">
+ {{$desc}}
+ </div>
+ {{if $channel_usage_message}}
+ <div class="section-content-warning-wrapper">
+ {{$channel_usage_message}}
+ </div>
+ {{/if}}
+ <form action="new_channel" method="post" id="newchannel-form">
+ {{if $default_role}}
+ <input type="hidden" name="permissions_role" value="{{$default_role}}" />
+ {{else}}
+ {{include file="field_select_grouped.tpl" field=$role}}
+ {{/if}}
+
+ {{include file="field_input.tpl" field=$name}}
+ <div id="name-spinner"></div>
+
+ {{include file="field_input.tpl" field=$nickname}}
+ <div id="nick-spinner"></div>
+
+ <button class="btn btn-primary" type="submit" name="submit" id="newchannel-submit-button" value="{{$submit}}">{{$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>
+ </div>
+</div>
diff --git a/view/tpl/notes.tpl b/view/tpl/notes.tpl
new file mode 100644
index 000000000..c6d5d8a73
--- /dev/null
+++ b/view/tpl/notes.tpl
@@ -0,0 +1,35 @@
+<div class="widget">
+ <h3>{{$banner}}</h3>
+ <textarea name="note_text" id="note-text">{{$text}}</textarea>
+ <script>
+ var noteSaveTimer = null;
+ var noteText = $('#note-text');
+
+ $(document).ready(function(e){
+ noteText.on('change keyup keydown paste cut', function () {
+ noteText.height(0).height(noteText[0].scrollHeight);
+ $(document.body).trigger("sticky_kit:recalc");
+ }).change();
+ });
+
+ $(document).on('focusout',"#note-text",function(e){
+ if(noteSaveTimer)
+ clearTimeout(noteSaveTimer);
+ notePostFinal();
+ noteSaveTimer = null;
+ });
+
+ $(document).on('focusin',"#note-text",function(e){
+ noteSaveTimer = setTimeout(noteSaveChanges,10000);
+ });
+
+ function notePostFinal() {
+ $.post('notes/sync', { 'note_text' : $('#note-text').val() });
+ }
+
+ function noteSaveChanges() {
+ $.post('notes', { 'note_text' : $('#note-text').val() });
+ noteSaveTimer = setTimeout(noteSaveChanges,10000);
+ }
+ </script>
+</div>
diff --git a/view/tpl/notifications.tpl b/view/tpl/notifications.tpl
new file mode 100755
index 000000000..0b24da7c3
--- /dev/null
+++ b/view/tpl/notifications.tpl
@@ -0,0 +1,11 @@
+<div class="generic-content-wrapper-styled">
+
+<h1>{{$notif_header}}</h1>
+
+{{if $notifications_available}}
+<a href="#" onclick="markRead('notify'); setTimeout(function() { window.location.href=window.location.href; },1500); return false;">{{$notif_link_mark_seen}}</a>
+{{/if}}
+<div class="notif-network-wrapper">
+ {{$notif_content}}
+</div>
+</div>
diff --git a/view/tpl/notify.tpl b/view/tpl/notify.tpl
new file mode 100755
index 000000000..d3c79be82
--- /dev/null
+++ b/view/tpl/notify.tpl
@@ -0,0 +1,3 @@
+<div class="notif-item">
+ <a href="{{$item_link}}"><img src="{{$item_image}}" class="notif-image">{{$item_text}} <span class="notif-when">{{$item_when}}</span></a>
+</div>
diff --git a/view/tpl/nwiki_page_history.tpl b/view/tpl/nwiki_page_history.tpl
new file mode 100644
index 000000000..b1c6c9284
--- /dev/null
+++ b/view/tpl/nwiki_page_history.tpl
@@ -0,0 +1,59 @@
+<style>
+ .diff {
+ width:100%;
+ word-break: break-all;
+ }
+
+ .diff td{
+ padding:0 0.667em;
+ vertical-align:top;
+ white-space:pre;
+ white-space:pre-wrap;
+ font-family:Consolas,'Courier New',Courier,monospace;
+ font-size:1.0em;
+ line-height:1.333;
+ }
+
+ .diff span{
+ display:block;
+ min-height:1.333em;
+ margin-top:-1px;
+ padding:0 3px;
+ }
+
+ * html .diff span{
+ height:1.333em;
+ }
+
+ .diff span:first-child{
+ margin-top:0;
+ }
+
+ .diffDeleted span{
+ border:1px solid rgb(255,192,192);
+ background:rgb(255,224,224);
+ }
+
+ .diffInserted span{
+ border:1px solid rgb(192,255,192);
+ background:rgb(224,255,224);
+ }
+</style>
+<table class="" style="width: 100%;">
+ {{foreach $pageHistory as $commit}}
+ <tr class="wikis-index-row"><td>
+ <table id="rev-{{$commit.revision}}" onclick="$('#details-{{$commit.revision}}').show()" style="width: 100%;">
+ <tr><td width="10%">Date</td><td width="70%">{{$commit.date}}</td>
+ <td rowspan="3" width="20%" align="right">
+ {{if $permsWrite}}
+ <button id="revert-{{$commit.revision}}" class="btn btn-danger btn-sm" onclick="wiki_revert_page('{{$commit.revision}}')">Revert</button>
+ <br><br>
+ {{/if}}
+ <button id="compare-{{$commit.revision}}" class="btn btn-warning btn-sm" onclick="wiki_compare_page('{{$commit.revision}}')">Compare</button>
+ </td></tr>
+ <tr><td>{{$name_lbl}}</td><td>{{$commit.name}}</td></tr>
+ <tr><td>{{$msg_label}}</td><td>{{$commit.title}}</td></tr>
+ </table>
+ </td></tr>
+ {{/foreach}}
+</table>
diff --git a/view/tpl/oauth_authorize.tpl b/view/tpl/oauth_authorize.tpl
new file mode 100755
index 000000000..2b7afa80e
--- /dev/null
+++ b/view/tpl/oauth_authorize.tpl
@@ -0,0 +1,10 @@
+<h1>{{$title}}</h1>
+
+<div class='oauthapp'>
+ <img src='{{$app.icon}}'>
+ <h4>{{$app.name}}</h4>
+</div>
+<h3>{{$authorize}}</h3>
+<form method="POST">
+<div class="settings-submit-wrapper"><input class="settings-submit" type="submit" name="oauth_yes" value="{{$yes}}" /></div>
+</form>
diff --git a/view/tpl/oauth_authorize_done.tpl b/view/tpl/oauth_authorize_done.tpl
new file mode 100755
index 000000000..2e91e0125
--- /dev/null
+++ b/view/tpl/oauth_authorize_done.tpl
@@ -0,0 +1,4 @@
+<h1>{{$title}}</h1>
+
+<p>{{$info}}</p>
+<code>{{$code}}</code>
diff --git a/view/tpl/oembed_video.tpl b/view/tpl/oembed_video.tpl
new file mode 100755
index 000000000..b0cfed2e5
--- /dev/null
+++ b/view/tpl/oembed_video.tpl
@@ -0,0 +1,4 @@
+<a href="{{$embedurl}}" onclick="this.innerHTML=Base64.decode('{{$escapedhtml}}'); return false;" style="float:left; margin: 1em; position: relative;">
+ <img width="{{$tw}}" height="{{$th}}" src="{{$turl}}" />
+ <div style="position: absolute; top: 0px; left: 0px; width: {{$twpx}}; height: {{$thpx}}; background: url({{$baseurl}}/images/icons/48/play.png) no-repeat center center;"></div>
+</a>
diff --git a/view/tpl/oexchange_xrd.tpl b/view/tpl/oexchange_xrd.tpl
new file mode 100755
index 000000000..e865e07d9
--- /dev/null
+++ b/view/tpl/oexchange_xrd.tpl
@@ -0,0 +1,33 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
+
+ <Subject>{{$base}}</Subject>
+
+ <Property
+ type="http://www.oexchange.org/spec/0.8/prop/vendor">Zotlabs</Property>
+ <Property
+ type="http://www.oexchange.org/spec/0.8/prop/title">Hubzilla</Property>
+ <Property
+ type="http://www.oexchange.org/spec/0.8/prop/name">Hubzilla</Property>
+ <Property
+ type="http://www.oexchange.org/spec/0.8/prop/prompt">Send to Hubzilla</Property>
+
+ <Link
+ rel="icon"
+ href="{{$base}}/images/hz-16.png"
+ type="image/png"
+ />
+
+ <Link
+ rel="icon32"
+ href="{{$base}}/images/hz-32.png"
+ type="image/png"
+ />
+
+ <Link
+ rel= "http://www.oexchange.org/spec/0.8/rel/offer"
+ href="{{$base}}/oexchange"
+ type="text/html"
+ />
+</XRD>
+
diff --git a/view/tpl/page_display.tpl b/view/tpl/page_display.tpl
new file mode 100755
index 000000000..a320920c7
--- /dev/null
+++ b/view/tpl/page_display.tpl
@@ -0,0 +1,14 @@
+<div class="page">
+ <div class="generic-content-wrapper" id="page-content-wrapper" >
+ {{if $title}}
+ <div class="section-title-wrapper">
+ <h2 class="page-title">{{$title}}</h2>
+ </div>
+ {{/if}}
+ <div class="section-content-wrapper">
+ <div class="page-author"><a class="page-author-link" href="{{$auth_url}}">{{$author}}</a></div>
+ <div class="page-date">{{$date}}</div>
+ <div class="page-body">{{$body}}</div>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/page_display_empty.tpl b/view/tpl/page_display_empty.tpl
new file mode 100644
index 000000000..9f000dee8
--- /dev/null
+++ b/view/tpl/page_display_empty.tpl
@@ -0,0 +1 @@
+{{$body}} \ No newline at end of file
diff --git a/view/tpl/pdledit.tpl b/view/tpl/pdledit.tpl
new file mode 100644
index 000000000..cef93d324
--- /dev/null
+++ b/view/tpl/pdledit.tpl
@@ -0,0 +1,24 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$header}}</h1>
+
+<h2>{{$mname}} {{$module}}</h2>
+
+<br />
+<a href="help/comanche" target="hubzilla-help">{{$help}}</a>
+<br />
+<br />
+
+
+
+<form action="pdledit" method="post" >
+<input type="hidden" name="module" value="{{$module}}" />
+<textarea rows="24" cols="80" name="content">{{$content}}</textarea>
+
+<br />
+<input type="submit" name="submit" value="{{$submit}}" />
+
+</form>
+<script>
+ $('textarea').bbco_autocomplete('comanche');
+</script>
+</div>
diff --git a/view/tpl/peoplefind.tpl b/view/tpl/peoplefind.tpl
new file mode 100755
index 000000000..2ecfbaff9
--- /dev/null
+++ b/view/tpl/peoplefind.tpl
@@ -0,0 +1,17 @@
+<div id="peoplefind-sidebar" class="widget">
+ <h3>{{$findpeople}}</h3>
+ <form action="directory" method="post" />
+ <div class="input-group form-group">
+ <input class="form-control form-control-sm" type="text" name="search" title="{{$hint}}{{if $advanced_search}}{{$advanced_hint}}{{/if}}" placeholder="{{$desc}}" />
+ <div class="input-group-btn">
+ <button class="btn btn-outline-secondary" type="submit" name="submit"><i class="fa fa-fw fa-search"></i></button>
+ </div>
+ </div>
+ </form>
+ <ul class="nav nav-pills flex-column">
+ {{if $similar}}<li class="nav-item"><a class="nav-link" href="match" >{{$similar}}</a></li>{{/if}}
+ {{if $loggedin}}<li class="nav-item"><a class="nav-link" href="directory?suggest=1" >{{$suggest}}</a></li>{{/if}}
+ <li class="nav-item"><a class="nav-link" href="randprof" >{{$random}}</a></li>
+ {{if $loggedin}}{{if $inv}}<li class="nav-item"><a class="nav-link" href="invite" >{{$inv}}</a></li>{{/if}}{{/if}}
+ </ul>
+</div>
diff --git a/view/tpl/photo_album.tpl b/view/tpl/photo_album.tpl
new file mode 100755
index 000000000..8bacb1575
--- /dev/null
+++ b/view/tpl/photo_album.tpl
@@ -0,0 +1,32 @@
+<div class="{{if !$no_fullscreen_btn}}generic-content-wrapper{{/if}}">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ {{if $order}}
+ <a class="btn btn-outline-secondary btn-sm" href="{{$order.1}}" title="{{$order.0}}"><i class="fa fa-sort"></i></a>
+ {{/if}}
+ <div class="btn-group btn-group">
+ {{if $album_edit.1}}
+ <i class="fa fa-pencil btn btn-outline-secondary btn-sm" title="{{$album_edit.0}}" onclick="openClose('photo-album-edit-wrapper'); closeMenu('photo-upload-form');"></i>
+ {{/if}}
+ {{if $can_post}}
+ <button class="btn btn-sm btn-success btn-sm" title="{{$usage}}" onclick="openClose('photo-upload-form'); closeMenu('photo-album-edit-wrapper');"><i class="fa fa-arrow-circle-o-up"></i>&nbsp;{{$upload.0}}</button>
+ {{/if}}
+ </div>
+ </div>
+ <h2>{{$album}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{$upload_form}}
+ {{$album_edit.1}}
+ <div class="section-content-wrapper-np">
+ <div id="photo-album-contents-{{$album_id}}">
+ {{foreach $photos as $photo}}
+ {{include file="photo_top.tpl"}}
+ {{/foreach}}
+ <div id="page-end"></div>
+ </div>
+ </div>
+</div>
+<div class="photos-end"></div>
+<script>$(document).ready(function() { loadingPage = false; justifyPhotos('photo-album-contents-{{$album_id}}'); });</script>
+<div id="page-spinner"></div>
diff --git a/view/tpl/photo_albums.tpl b/view/tpl/photo_albums.tpl
new file mode 100755
index 000000000..a238e61bc
--- /dev/null
+++ b/view/tpl/photo_albums.tpl
@@ -0,0 +1,13 @@
+<div id="side-bar-photos-albums" class="widget">
+ <h3>{{$title}}</h3>
+ <ul class="nav nav-pills flex-column">
+ <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/photos/{{$nick}}" title="{{$title}}" >{{$recent}}</a></li>
+ {{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-default float-right">{{$al.total}}</span>{{$al.shorttext}}</a></li>
+ {{/if}}
+ {{/foreach}}
+ {{/if}}
+ </ul>
+</div>
diff --git a/view/tpl/photo_drop.tpl b/view/tpl/photo_drop.tpl
new file mode 100755
index 000000000..664e5338c
--- /dev/null
+++ b/view/tpl/photo_drop.tpl
@@ -0,0 +1,3 @@
+<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-{{$id}}" >
+ <a class="btn btn-outline-secondary btn-sm" href="#" onclick="dropItem('item/drop/{{$id}}', '#wall-item-outside-wrapper-{{$id}}'); return false;" title="{{$delete}}" ><i class="fa fa-trash-o"></i></a>
+</div>
diff --git a/view/tpl/photo_item.tpl b/view/tpl/photo_item.tpl
new file mode 100755
index 000000000..ec643c4a9
--- /dev/null
+++ b/view/tpl/photo_item.tpl
@@ -0,0 +1,34 @@
+<div class="wall-item-outside-wrapper{{if $indent}} {{$indent}}{{/if}}" id="wall-item-outside-wrapper-{{$id}}" >
+ <div class="wall-item-content-wrapper{{if $indent}} {{$indent}}{{/if}}" id="wall-item-content-wrapper-{{$id}}" style="clear:both;">
+ <div class="wall-item-head">
+ <div class="wall-item-info" id="wall-item-info-{{$id}}" >
+ <div class="wall-item-photo-wrapper" id="wall-item-photo-wrapper-{{$id}}" >
+ <a href="{{$profile_url}}" title="View {{$name}}'s profile" class="wall-item-photo-link" id="wall-item-photo-link-{{$id}}">
+ <img src="{{$thumb}}" class="wall-item-photo" id="wall-item-photo-{{$id}}" style="height: 80px; width: 80px;" alt="{{$name}}" /></a>
+ </div>
+ </div>
+ <div class="wall-item-wrapper" id="wall-item-wrapper-{{$id}}" >
+ <div class="wall-item-author">
+ <a href="{{$profile_url}}" title="View {{$name}}'s profile" class="wall-item-name-link"><span class="wall-item-name" id="wall-item-name-{{$id}}" >{{$name}}</span></a>
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-{{$id}}">{{$ago}}</div>
+ </div>
+ </div>
+ <div class="wall-item-content" id="wall-item-content-{{$id}}" >
+ <div class="wall-item-title" id="wall-item-title-{{$id}}">{{$title}}</div>
+ <div class="wall-item-body" id="wall-item-body-{{$id}}" >{{$body}}</div>
+
+ </div>
+ {{if $drop}}
+ <div class="wall-item-tools" id="wall-item-tools-{{$id}}" >
+ <div class="wall-item-tools-right pull-right">
+ {{$drop}}
+ </div>
+ <div class="clear"></div>
+ </div>
+ {{/if}}
+ <div class="clear"></div>
+ {{$comment}}
+ </div>
+</div>
+
diff --git a/view/tpl/photo_top.tpl b/view/tpl/photo_top.tpl
new file mode 100755
index 000000000..a86aa7f80
--- /dev/null
+++ b/view/tpl/photo_top.tpl
@@ -0,0 +1,4 @@
+<a href="{{$photo.link}}" id="photo-top-photo-link-{{$photo.id}}" title="{{$photo.title}}">
+ <img src="{{$photo.src}}" alt="{{if $photo.album.name}}{{$photo.album.name}}{{elseif $photo.desc}}{{$photo.desc}}{{elseif $photo.alt}}{{$photo.alt}}{{else}}{{$photo.unknown}}{{/if}}" title="{{$photo.title}}" id="photo-top-photo-{{$photo.id}}" />
+</a>
+
diff --git a/view/tpl/photo_view.tpl b/view/tpl/photo_view.tpl
new file mode 100755
index 000000000..2431329ec
--- /dev/null
+++ b/view/tpl/photo_view.tpl
@@ -0,0 +1,172 @@
+<div id="live-photos"></div>
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ {{if $tools || $map || $edit}}
+ <div class="btn-group">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
+ </button>
+ <div class="dropdown-menu dropdown-menu-right flex-column">
+ {{if $tools}}
+ <a class="dropdown-item" href="{{$tools.profile.0}}"><i class="fa fa-user"></i>&nbsp;{{$tools.profile.1}}</a>
+ <a class="dropdown-item" href="{{$tools.cover.0}}"><i class="fa fa-picture-o"></i>&nbsp;{{$tools.cover.1}}</a>
+ {{/if}}
+ {{if $map}}
+ <a class="dropdown-item" href="#" onclick="var pos = $('#photo-map').css('position'); if(pos === 'absolute') { $('#photo-map').css( { position: 'relative', left: 'auto', top: 'auto' }); } else { $('#photo-map').css( { position: 'absolute', left: '-9999px', top: '-9999px' }); } return false; " ><i class="fa fa-globe"></i>&nbsp;{{$map_text}}</a>
+ {{/if}}
+ {{if $edit}}
+ <a class="dropdown-item acl-form-trigger" href="#" title="" onclick="openClose('photo-edit'); return false;" data-form_id="photo_edit_form"><i class="fa fa-pencil"></i>&nbsp;{{$edit.edit}}</a>
+ {{/if}}
+ </div>
+ </div>
+ {{/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>
+ </div>
+ {{/if}}
+ {{if $prevlink || $nextlink}}
+ <div class="btn-group">
+ {{if $prevlink}}
+ <a href="{{$prevlink.0}}" class="btn btn-outline-secondary btn-sm" title="{{$prevlink.1}}"><i class="fa fa-backward"></i></a>
+ {{/if}}
+ {{if $nextlink}}
+ <a href="{{$nextlink.0}}" class="btn btn-outline-secondary btn-sm" title="{{$nextlink.1}}"><i class="fa fa-forward"></i></a>
+ {{/if}}
+ </div>
+ {{/if}}
+ </div>
+ <h2>{{if $desc}}{{$desc}}{{elseif $filename}}{{$filename}}{{else}}{{$unknown}}{{/if}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div id="photo-map">
+ {{$map}}
+ </div>
+ <div id="photo-edit" class="section-content-tools-wrapper">
+ <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">
+ <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}}
+ <datalist id="dl-albums">
+ {{foreach $edit.albums as $al}}
+ {{if $al.text}}
+ <option value="{{$al.text}}">
+ {{/if}}
+ {{/foreach}}
+ </datalist>
+ {{/if}}
+ </div>
+ *}}
+ <div class="form-group">
+ <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">
+ <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">
+ {{include file="field_checkbox.tpl" field=$edit.adult}}
+ </div>
+ {{/if}}
+
+ <div class="form-group pull-left">
+ <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">
+ {{if $edit.aclselect}}
+ <button id="dbtn-acl" class="btn btn-outline-secondary btn-sm" data-toggle="modal" data-target="#aclModal" onclick="return false;">
+ <i id="jot-perms-icon" class="fa fa-{{$edit.lockstate}}"></i>
+ </button>
+ {{/if}}
+ <button id="dbtn-submit" class="btn btn-primary btn-sm" type="submit" name="submit" >{{$edit.submit}}</button>
+ </div>
+ </form>
+ {{$edit.aclselect}}
+ <div id="photo-edit-end" class="clear"></div>
+ </div>
+ <div id="photo-view-wrapper">
+ <div id="photo-photo"><a href="{{$photo.href}}" title="{{$photo.title}}" onclick="$.colorbox({href: '{{$photo.href}}'}); return false;"><img style="width: 100%;" src="{{$photo.src}}"></a></div>
+ <div id="photo-photo-end" class="clear"></div>
+ {{if $tags}}
+ <div class="photo-item-tools-left" id="in-this-photo">
+ <span id="in-this-photo-text">{{$tag_hdr}}</span>
+ {{foreach $tags as $t}}
+ {{$t.0}}{{if $edit}}<span id="tag-remove">&nbsp;<a href="{{$t.1}}" onclick="return confirmDelete();"><i class="fa fa-times"></i></a>&nbsp;</span>{{/if}}
+ {{/foreach}}
+ </div>
+ {{/if}}
+ <div class="photo-item-tools">
+ {{if $responses.count }}
+ <div class="photo-item-tools-left pull-left">
+ <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>
+ {{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}}
+ <ul class="dropdown-menu" role="menu" aria-labelledby="wall-item-{{$verb}}-{{$id}}">{{foreach $response.list as $liker}}<li role="presentation">{{$liker}}</li>{{/foreach}}</ul>
+ {{/if}}
+ {{if $response.list_part}}
+ <div class="modal" id="{{$verb}}Modal-{{$id}}">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ <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>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+ </div><!-- /.modal -->
+ {{/if}}
+ </div>
+ {{/if}}
+ {{/foreach}}
+ </div>
+ </div>
+ {{/if}}
+ {{if $likebuttons}}
+ <div class="photo-item-tools-right btn-group pull-right">
+ <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>
+ <button type="button" class="btn btn-outline-secondary btn-sm" onclick="dolike({{$likebuttons.id}},'dislike'); return false">
+ <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>
+ {{/if}}
+ <div class="clear"></div>
+ </div>
+ </div>
+ {{$comments}}
+ {{if $commentbox}}
+ <div class="wall-item-comment-wrapper{{if $comments}} wall-item-comment-wrapper-wc{{/if}}" >
+ {{$commentbox}}
+ </div>
+ {{/if}}
+ <div class="clear"></div>
+</div>
+{{$paginate}}
+
diff --git a/view/tpl/photos_recent.tpl b/view/tpl/photos_recent.tpl
new file mode 100755
index 000000000..8fe631ca6
--- /dev/null
+++ b/view/tpl/photos_recent.tpl
@@ -0,0 +1,23 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ {{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-arrow-circle-o-up"></i>&nbsp;{{$upload.0}}</button>
+ {{/if}}
+ </div>
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{$upload_form}}
+ <div class="section-content-wrapper-np">
+ <div id="photo-album-contents-{{$album_id}}">
+ {{foreach $photos as $photo}}
+ {{include file="photo_top.tpl"}}
+ {{/foreach}}
+ <div id="page-end"></div>
+ </div>
+ </div>
+</div>
+<div class="photos-end"></div>
+<script>$(document).ready(function() { loadingPage = false; justifyPhotos('photo-album-contents-{{$album_id}}'); });</script>
+<div id="page-spinner"></div>
diff --git a/view/tpl/photos_upload.tpl b/view/tpl/photos_upload.tpl
new file mode 100755
index 000000000..d52bad5a2
--- /dev/null
+++ b/view/tpl/photos_upload.tpl
@@ -0,0 +1,61 @@
+<div id="photo-upload-form">
+ <div class="section-content-tools-wrapper">
+ <form action="photos/{{$nickname}}" 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">
+ <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">
+ {{foreach $albums as $al}}
+ {{if $al.text}}
+ <option value="{{$al.text}}" />
+ {{/if}}
+ {{/foreach}}
+ </datalist>
+ </div>
+ {{if $default}}
+ <div class="form-group">
+ <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>
+ <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;">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
+ </button>
+ {{/if}}
+ <button id="dbtn-submit" class="btn btn-primary btn-sm" type="submit" name="submit" >{{$submit}}</button>
+ </div>
+
+ </div>
+ {{/if}}
+ <div class="clear"></div>
+
+ {{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>
+ <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;">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
+ </button>
+ {{/if}}
+ <div class="pull-right">
+ {{$uploader}}
+ </div>
+ </div>
+ {{/if}}
+ </form>
+ </div>
+ {{$aclselect}}
+ <div id="photos-upload-end" class="clear"></div>
+</div>
diff --git a/view/tpl/photosajax.tpl b/view/tpl/photosajax.tpl
new file mode 100755
index 000000000..45191db85
--- /dev/null
+++ b/view/tpl/photosajax.tpl
@@ -0,0 +1,4 @@
+{{foreach $photos as $photo}}
+{{include file="photo_top.tpl"}}
+{{/foreach}}
+<script>justifyPhotosAjax('photo-album-contents-{{$album_id}}')</script>
diff --git a/view/tpl/poco_entry_xml.tpl b/view/tpl/poco_entry_xml.tpl
new file mode 100755
index 000000000..30b6268dc
--- /dev/null
+++ b/view/tpl/poco_entry_xml.tpl
@@ -0,0 +1,8 @@
+<entry>
+{{if $entry.id}}<id>{{$entry.id}}</id>{{/if}}
+{{if $entry.displayName}}<displayName>{{$entry.displayName}}</displayName>{{/if}}
+{{if $entry.preferredUsername}}<preferredUsername>{{$entry.preferredUsername}}</preferredUsername>{{/if}}
+{{if $entry.rating}}<rating>{{$entry.rating}}</rating>{{/if}}
+{{if $entry.urls}}{{foreach $entry.urls as $url}}<urls><value>{{$url.value}}</value><type>{{$url.type}}</type></urls>{{/foreach}}{{/if}}
+{{if $entry.photos}}{{foreach $entry.photos as $photo}}<photos><value>{{$photo.value}}</value><type>{{$photo.type}}</type></photos>{{/foreach}}{{/if}}
+</entry>
diff --git a/view/tpl/poco_xml.tpl b/view/tpl/poco_xml.tpl
new file mode 100755
index 000000000..0e38a692c
--- /dev/null
+++ b/view/tpl/poco_xml.tpl
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<response>
+{{if $response.sorted}}<sorted>{{$response.sorted}}</sorted>{{/if}}
+{{if $response.filtered}}<filtered>{{$response.filtered}}</filtered>{{/if}}
+{{if $response.updatedSince}}<updatedSince>{{$response.updatedSince}}</updatedSince>{{/if}}
+<startIndex>{{$response.startIndex}}</startIndex>
+<itemsPerPage>{{$response.itemsPerPage}}</itemsPerPage>
+<totalResults>{{$response.totalResults}}</totalResults>
+
+
+{{if $response.totalResults}}
+{{foreach $response.entry as $entry}}
+{{include file="poco_entry_xml.tpl"}}
+{{/foreach}}
+{{else}}
+<entry></entry>
+{{/if}}
+</response>
diff --git a/view/tpl/poke_content.tpl b/view/tpl/poke_content.tpl
new file mode 100755
index 000000000..f368cb024
--- /dev/null
+++ b/view/tpl/poke_content.tpl
@@ -0,0 +1,48 @@
+
+<div id="poke-content" class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+
+ <div id="poke-desc">{{$desc}}</div>
+
+<br />
+<br />
+
+
+<form action="poke" method="get">
+
+
+<div class="form-group 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>
+
+ <input id="poke-recip-complete" type="hidden" value="{{$id}}" name="cid" />
+ <input id="poke-parent" type="hidden" value="{{$parent}}" name="parent" />
+
+
+{{if $poke_basic}}
+<input type="hidden" name="verb" value="poke" />
+{{else}}
+<div class="form-group 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}}
+ <option value="{{$v.0}}">{{$v.1}}</option>
+ {{/foreach}}
+ </select>
+</div>
+{{/if}}
+
+{{if ! $parent}}
+{{include file="field_checkbox.tpl" field=$private}}
+{{/if}}
+
+<input type="submit" name="submit" value="{{$submit}}" />
+</form>
+
+
+ </div>
+</div>
diff --git a/view/tpl/posted_date_widget.tpl b/view/tpl/posted_date_widget.tpl
new file mode 100755
index 000000000..fb43c744b
--- /dev/null
+++ b/view/tpl/posted_date_widget.tpl
@@ -0,0 +1,46 @@
+<script>
+
+function toggle_posted_date_button() {
+ if($('#posted-date-dropdown').is(':visible')) {
+ $('#posted-date-icon').removeClass('fa-caret-up');
+ $('#posted-date-icon').addClass('fa-cog');
+ $('#posted-date-dropdown').hide();
+ }
+ else {
+ $('#posted-date-icon').addClass('fa-caret-up');
+ $('#posted-date-icon').removeClass('fa-cog');
+ $('#posted-date-dropdown').show();
+ }
+}
+</script>
+
+
+<div id="datebrowse-sidebar" class="widget">
+ <h3>{{$title}}</h3>
+ <script>function dateSubmit(dateurl) { window.location.href = dateurl; } </script>
+ <ul id="posted-date-selector" class="nav nav-pills flex-column">
+ {{foreach $dates as $y => $arr}}
+ {{if $y == $cutoff_year}}
+ </ul>
+ <div id="posted-date-dropdown" style="display: none;">
+ <ul id="posted-date-selector-drop" class="nav nav-pills flex-column">
+ {{/if}}
+ <li class="nav-item" id="posted-date-selector-year-{{$y}}">
+ <a class="nav-link" href="#" onclick="openClose('posted-date-selector-{{$y}}'); return false;">{{$y}}</a>
+ </li>
+ <div id="posted-date-selector-{{$y}}" style="display: none;">
+ <ul class="posted-date-selector-months nav nav-pills flex-column">
+ {{foreach $arr as $d}}
+ <li class="nav-item">
+ <a class="nav-link" href="#" onclick="dateSubmit('{{$url}}?f=&dend={{$d.1}}{{if $showend}}&dbegin={{$d.2}}{{/if}}'); return false;">{{$d.0}}</a>
+ </li>
+ {{/foreach}}
+ </ul>
+ </div>
+ {{/foreach}}
+ {{if $cutoff}}
+ </div>
+ <button class="btn btn-outline-secondary btn-sm" onclick="toggle_posted_date_button(); return false;"><i id="posted-date-icon" class="fa fa-cog"></i></button>
+ {{/if}}
+ </ul>
+</div>
diff --git a/view/tpl/prep.tpl b/view/tpl/prep.tpl
new file mode 100644
index 000000000..debba13a8
--- /dev/null
+++ b/view/tpl/prep.tpl
@@ -0,0 +1,31 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$header}}</h1>
+
+{{if $site}}
+<h3>{{$website}} {{$site}}</h3>
+{{/if}}
+
+
+{{if $raters}}
+{{foreach $raters as $r}}
+
+<div class="directory-item lframe" id="directory-item-{{$r.xchan_hash}}" >
+
+<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$r.xchan_hash}}" >
+<div class="contact-photo" id="directory-photo-{{$r.xchan_hash}}" >
+<a href="{{$r.xchan_url}}" class="directory-profile-link" id="directory-profile-link-{{$r.xchan_hash}}" ><img class="directory-photo-img" src="{{$r.xchan_photo_m}}" alt="{{$r.xchan_addr}}" title="{{$r.xchan_addr}}" /></a>
+</div>
+</div>
+<div class="prep-details contact-info">
+<a href="{{$r.xchan_url}}" class="directory-profile-link" id="directory-profile-link-{{$r.xchan_hash}}" ><div class="contact-name">{{$r.xchan_name}}</div></a>
+<div class="rating-value">{{$rating_lbl}} <span class="prep-rating-value">{{$r.xlink_rating}}</span></div>
+{{if $r.xlink_rating_text}}
+<div class="rating-text">{{$rating_text_label}} {{$r.xlink_rating_text}}
+</div>
+{{/if}}
+</div>
+<div class="clear"></div>
+</div>
+{{/foreach}}
+{{/if}}
+</div>
diff --git a/view/tpl/profdef_edit.tpl b/view/tpl/profdef_edit.tpl
new file mode 100644
index 000000000..bfe85314d
--- /dev/null
+++ b/view/tpl/profdef_edit.tpl
@@ -0,0 +1,16 @@
+<h3>{{$header}}</h3>
+
+<form action="admin/profs" method="post" >
+
+{{if $id}}
+<input type="hidden" name="id" value="{{$id}}" />
+{{/if}}
+
+{{include file="field_input.tpl" field=$field_name}}
+{{include file="field_input.tpl" field=$field_type}}
+{{include file="field_input.tpl" field=$field_desc}}
+{{include file="field_input.tpl" field=$field_help}}
+
+<input name="submit" type="submit" value="{{$submit}}" />
+
+</form>
diff --git a/view/tpl/profed_head.tpl b/view/tpl/profed_head.tpl
new file mode 100755
index 000000000..ce774052a
--- /dev/null
+++ b/view/tpl/profed_head.tpl
@@ -0,0 +1,2 @@
+<script language="javascript" type="text/javascript"></script>
+
diff --git a/view/tpl/profile_advanced.tpl b/view/tpl/profile_advanced.tpl
new file mode 100755
index 000000000..c56062459
--- /dev/null
+++ b/view/tpl/profile_advanced.tpl
@@ -0,0 +1,341 @@
+<div id="profile-content-wrapper" class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <div class="float-right">
+ {{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>
+ {{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="dropdown-menu-img-xs" src="{{$liker.photo}}" alt="{{$liker.name}}" /> {{$liker.name}}</a></li>{{/foreach}}</ul>
+ {{/if}}
+ </div>
+ {{/if}}
+ {{if $profile.canlike}}
+ <div class="btn-group">
+ <button type="button" class="btn btn-success btn-sm" onclick="doprofilelike('profile/' + '{{$profile.profile_guid}}','like'); return false;" title="{{$profile.likethis}}" >
+ <i class="fa fa-thumbs-o-up" title="{{$profile.likethis}}"></i>
+ </button>
+ </div>
+ {{/if}}
+ {{if $editmenu.multi}}
+ <div class="btn-group">
+ <a class="btn btn-primary btn-sm dropdown-toggle" data-toggle="dropdown" href="#" ><i class="fa fa-pencil"></i>&nbsp;{{$editmenu.edit.3}}</a>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{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>
+ {{/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}}
+ </div>
+ </div>
+ {{elseif $editmenu}}
+ <div class="btn-group">
+ <a class="btn btn-primary btn-sm" href="{{$editmenu.edit.0}}" ><i class="fa fa-pencil"></i>&nbsp;{{$editmenu.edit.3}}</a>
+ </div>
+ {{/if}}
+ {{if $exportlink}}
+ <div class="btn-group">
+ <a class="btn btn-outline-secondary btn-sm" href="{{$exportlink}}" ><i class="fa fa-vcard"></i>&nbsp;{{$export}}</a>
+ </div>
+ {{/if}}
+ </div>
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-wrapper">
+
+ {{foreach $fields as $f}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{if $f == 'name'}}
+ <dl id="aprofile-fullname" class="aprofile">
+ <dt>{{$profile.fullname.0}}</dt>
+ <dd>{{$profile.fullname.1}}</dd>
+ </dl>
+ {{/if}}
+
+ {{if $f == 'fullname'}}
+ <dl id="aprofile-fullname" class="aprofile">
+ <dt>{{$profile.fullname.0}}</dt>
+ <dd>{{$profile.fullname.1}}</dd>
+ </dl>
+ {{/if}}
+
+ {{if $f == 'gender'}}
+ {{if $profile.gender}}
+ <dl id="aprofile-gender" class="aprofile">
+ <dt>{{$profile.gender.0}}</dt>
+ <dd>{{$profile.gender.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'birthday'}}
+ {{if $profile.birthday}}
+ <dl id="aprofile-birthday" class="aprofile">
+ <dt>{{$profile.birthday.0}}</dt>
+ <dd>{{$profile.birthday.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'age'}}
+ {{if $profile.age}}
+ <dl id="aprofile-age" class="aprofile">
+ <dt>{{$profile.age.0}}</dt>
+ <dd>{{$profile.age.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'marital'}}
+ {{if $profile.marital}}
+ <dl id="aprofile-marital" class="aprofile">
+ <dt><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$profile.marital.0}}</dt>
+ <dd>{{$profile.marital.1}}{{if in_array('partner',$fields)}}{{if $profile.marital.partner}} ({{$profile.marital.partner}}){{/if}}{{/if}}{{if in_array('howlong',$fields)}}{{if $profile.howlong}} {{$profile.howlong}}{{/if}}{{/if}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'sexual'}}
+ {{if $profile.sexual}}
+ <dl id="aprofile-sexual" class="aprofile">
+ <dt>{{$profile.sexual.0}}</dt>
+ <dd>{{$profile.sexual.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'keywords'}}
+ {{if $profile.keywords}}
+ <dl id="aprofile-tags" class="aprofile">
+ <dt>{{$profile.keywords.0}}</dt>
+ <dd>{{$profile.keywords.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'homepage'}}
+ {{if $profile.homepage}}
+ <dl id="aprofile-homepage" class="aprofile">
+ <dt>{{$profile.homepage.0}}</dt>
+ <dd>{{$profile.homepage.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'hometown'}}
+ {{if $profile.hometown}}
+ <dl id="aprofile-hometown" class="aprofile">
+ <dt>{{$profile.hometown.0}}</dt>
+ <dd>{{$profile.hometown.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'politic'}}
+ {{if $profile.politic}}
+ <dl id="aprofile-politic" class="aprofile">
+ <dt>{{$profile.politic.0}}</dt>
+ <dd>{{$profile.politic.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'religion'}}
+ {{if $profile.religion}}
+ <dl id="aprofile-religion" class="aprofile">
+ <dt>{{$profile.religion.0}}</dt>
+ <dd>{{$profile.religion.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'about'}}
+ {{if $profile.about}}
+ <dl id="aprofile-about" class="aprofile">
+ <dt>{{$profile.about.0}}</dt>
+ <dd>{{$profile.about.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'interest'}}
+ {{if $profile.interest}}
+ <dl id="aprofile-interest" class="aprofile">
+ <dt>{{$profile.interest.0}}</dt>
+ <dd>{{$profile.interest.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'likes'}}
+ {{if $profile.likes}}
+ <dl id="aprofile-likes" class="aprofile">
+ <dt>{{$profile.likes.0}}</dt>
+ <dd>{{$profile.likes.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'dislikes'}}
+ {{if $profile.dislikes}}
+ <dl id="aprofile-dislikes" class="aprofile">
+ <dt>{{$profile.dislikes.0}}</dt>
+ <dd>{{$profile.dislikes.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'contact'}}
+ {{if $profile.contact}}
+ <dl id="aprofile-contact" class="aprofile">
+ <dt>{{$profile.contact.0}}</dt>
+ <dd>{{$profile.contact.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'channels'}}
+ {{if $profile.channels}}
+ <dl id="aprofile-channels" class="aprofile">
+ <dt>{{$profile.channels.0}}</dt>
+ <dd>{{$profile.channels.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'music'}}
+ {{if $profile.music}}
+ <dl id="aprofile-music" class="aprofile">
+ <dt>{{$profile.music.0}}</dt>
+ <dd>{{$profile.music.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'book'}}
+ {{if $profile.book}}
+ <dl id="aprofile-book" class="aprofile">
+ <dt>{{$profile.book.0}}</dt>
+ <dd>{{$profile.book.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'tv'}}
+ {{if $profile.tv}}
+ <dl id="aprofile-tv" class="aprofile">
+ <dt>{{$profile.tv.0}}</dt>
+ <dd>{{$profile.tv.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'film'}}
+ {{if $profile.film}}
+ <dl id="aprofile-film" class="aprofile">
+ <dt>{{$profile.film.0}}</dt>
+ <dd>{{$profile.film.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'romance'}}
+ {{if $profile.romance}}
+ <dl id="aprofile-romance" class="aprofile">
+ <dt>{{$profile.romance.0}}</dt>
+ <dd>{{$profile.romance.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+
+ {{if $f == 'employment'}}
+ {{if $profile.employment}}
+ <dl id="aprofile-work" class="aprofile">
+ <dt>{{$profile.employment.0}}</dt>
+ <dd>{{$profile.employment.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{if $f == 'education'}}
+ {{if $profile.education}}
+ <dl id="aprofile-education" class="aprofile">
+ <dt>{{$profile.education.0}}</dt>
+ <dd>{{$profile.education.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+
+ {{foreach $profile.extra_fields as $fld}}
+ {{if $f == $fld}}
+ {{if $profile.$fld}}
+ <dl id="aprofile-{{$fld}}" class="aprofile">
+ <dt>{{$profile.$fld.0}}</dt>
+ <dd>{{$profile.$fld.1}}</dd>
+ </dl>
+ {{/if}}
+ {{/if}}
+ {{/foreach}}
+ {{/foreach}}
+
+
+ {{if $things}}
+ {{foreach $things as $key => $items}}
+ <b>{{$profile.fullname.1}} {{$key}}</b>
+ <ul class="profile-thing-list">
+ {{foreach $items as $item}}
+ <li>{{if $item.img}}<a href="{{$item.url}}" ><img src="{{$item.img}}" class="profile-thing-img" width="100" height="100" alt="{{$item.term}}" /></a>{{/if}}
+ <a href="{{$item.editurl}}" >{{$item.term}}</a>
+ {{if $profile.canlike}}<br />
+ <button type="button" class="btn btn-outline-secondary btn-sm" onclick="doprofilelike('thing/' + '{{$item.term_hash}}','like'); return false;" title="{{$likethis}}" >
+ <i class="fa fa-thumbs-o-up" title="{{$likethis}}"></i>
+ </button>
+ {{/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>
+ {{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}}
+ </div>
+ {{/if}}
+ </li>
+ {{/foreach}}
+ </ul>
+ <div class="clear"></div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+</div>
diff --git a/view/tpl/profile_edit.tpl b/view/tpl/profile_edit.tpl
new file mode 100755
index 000000000..05137479f
--- /dev/null
+++ b/view/tpl/profile_edit.tpl
@@ -0,0 +1,401 @@
+<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">
+ <i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
+ </button>
+ <div class="dropdown-menu">
+ <a class="dropdown-item" href="profile_photo" id="profile-photo_upload-link" title="{{$profpic}}"><i class="fa fa-fw fa-user"></i>&nbsp;{{$profpic}}</a>
+ {{if $is_default}}
+ <a class="dropdown-item" href="cover_photo" id="cover-photo_upload-link" title="{{$coverpic}}"><i class="fa fa-fw fa-picture-o"></i>&nbsp;{{$coverpic}}</a>
+ {{/if}}
+ {{if ! $is_default}}
+ <a class="dropdown-item" href="profperm/{{$profile_id}}" id="profile-edit-visibility-link" title="{{$editvis}}"><i class="fa fa-fw fa-pencil"></i>&nbsp;{{$editvis}}</a>
+ {{/if}}
+ <a class="dropdown-item" href="thing" id="profile-edit-thing-link" title="{{$addthing}}"><i class="fa fa-fw fa-plus-circle"></i>&nbsp;{{$addthing}}</a>
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="profile/{{$profile_id}}/view" id="profile-edit-view-link" title="{{$viewprof}}">{{$viewprof}}</a>
+ {{if $profile_clone_link}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="{{$profile_clone_link}}" id="profile-edit-clone-link" title="{{$cr_prof}}">{{$cl_prof}}</a>
+ {{/if}}
+ {{if $exportable}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="profiles/export/{{$profile_id}}">{{$lbl_export}}</a>
+ <a class="dropdown-item" href="#" onClick="openClose('profile-upload-form'); return false;">{{$lbl_import}}</a>
+ {{/if}}
+ {{if ! $is_default}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="{{$profile_drop_link}}" id="profile-edit-drop-link" title="{{$del_prof}}" onclick="return confirmDelete();"><i class="fa fa-trash-o"></i>&nbsp;{{$del_prof}}</a>
+ {{/if}}
+ </div>
+ </div>
+ <h2>{{$banner}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-tools-wrapper" id="profile-upload-form">
+ <label id="profile-upload-choose-label" for="profile-upload-choose" >{{$lbl_import}}</label>
+ <input id="profile-upload-choose" type="file" name="userfile">
+ </div>
+
+ <form id="profile-edit-form" name="form1" action="profiles/{{$profile_id}}" enctype="multipart/form-data" method="post" >
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ {{if $is_default}}
+ <div class="section-content-info-wrapper">{{$default}}</div>
+ {{/if}}
+
+ <div class="panel-group" id="profile-edit-wrapper" role="tablist" aria-multiselectable="true">
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="personal">
+ <h3>
+ <a data-toggle="collapse" data-parent="#profile-edit-wrapper" href="#personal-collapse" aria-expanded="true" aria-controls="personal-collapse">
+ {{$personal}}
+ </a>
+ </h3>
+ </div>
+ <div id="personal-collapse" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="personal">
+ <div class="section-content-tools-wrapper">
+ {{include file="field_input.tpl" field=$profile_name}}
+
+ {{include file="field_input.tpl" field=$name}}
+
+ {{if $fields.pdesc}}
+ {{include file="field_input.tpl" field=$pdesc}}
+ {{/if}}
+
+ {{if $fields.gender}}
+ <div id="profile-edit-gender-wrapper" class="form-group field select" >
+ <label id="profile-edit-gender-label" for="gender-select" >{{$lbl_gender}}</label>
+ {{if $advanced}}
+ {{$gender}}
+ {{else}}
+ {{$gender_min}}
+ {{/if}}
+ </div>
+ <div class="clear"></div>
+ {{/if}}
+
+ {{if $fields.dob}}
+ {{$dob}}
+ {{/if}}
+
+ {{include file="field_checkbox.tpl" field=$hide_friends}}
+
+ <div class="form-group" >
+ <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ </div>
+
+ {{if $fields.comms }}
+
+ <div id="template-form-vcard-tel" class="form-group form-vcard-tel">
+ <select name="tel_type[]">
+ <option value="CELL">{{$mobile}}</option>
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="" placeholder="{{$tel_label}}">
+ <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">
+ <select name="email_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="" placeholder="{{$email_label}}">
+ <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">
+ <select name="impp_type[]">
+ <option value="HOME">{{$home}}</option>
+ <option value="WORK">{{$work}}</option>
+ <option value="OTHER">{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="" placeholder="{{$impp_label}}">
+ <i data-remove="vcard-impp" data-id="" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+
+ <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>
+ <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>
+ <li class="add-vcard-impp"><a href="#" data-add="vcard-impp" data-id="{{$vcard.id}}" class="add-field" onclick="return false;">{{$impp_label}}</a></li>
+ </ul>
+ </div>
+ <div id="vcard-header-{{$vcard.id}}" class="vcard-header" data-id="{{$vcard.id}}" data-action="open">
+ <i class="vcard-fn-preview fa fa-address-card-o"></i>
+ <span id="vcard-preview-{{$vcard.id}}" class="vcard-preview">
+ {{if $vcard.fn}}<span class="vcard-fn-preview">{{$vcard.fn}}</span>{{/if}}
+ {{if $vcard.emails.0.address}}<span class="vcard-email-preview hidden-xs"><a href="mailto:{{$vcard.emails.0.address}}">{{$vcard.emails.0.address}}</a></span>{{/if}}
+ {{if $vcard.tels.0}}<span class="vcard-tel-preview hidden-xs">{{$vcard.tels.0.nr}}{{if $is_mobile}} <a class="btn btn-outline-secondary btn-sm" href="tel:{{$vcard.tels.0.nr}}"><i class="fa fa-phone connphone"></i></a>{{/if}}</span>{{/if}}
+ </span>
+ <input id="vcard-fn-{{$vcard.id}}" class="vcard-fn" type="text" name="fn" value="{{$vcard.fn}}" size="{{$vcard.fn|count_characters:true}}" placeholder="{{$name_label}}">
+ </div>
+ </div>
+ <div id="vcard-info-{{$vcard.id}}" class="vcard-info section-content-wrapper">
+
+ <div class="vcard-tel form-group">
+ <div class="form-vcard-tel-wrapper">
+ {{if $vcard.tels}}
+ {{foreach $vcard.tels as $tel}}
+ <div class="form-group 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>
+ <option value="HOME"{{if $tel.type.0 == 'HOME'}} selected="selected"{{/if}}>{{$home}}</option>
+ <option value="WORK"{{if $tel.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $tel.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="tel[]" value="{{$tel.nr}}" size="{{$tel.nr|count_characters:true}}" placeholder="{{$tel_label}}">
+ <i data-remove="vcard-tel" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+
+ <div class="vcard-email form-group">
+ <div class="form-vcard-email-wrapper">
+ {{if $vcard.emails}}
+ {{foreach $vcard.emails as $email}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $email.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $email.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="email[]" value="{{$email.address}}" size="{{$email.address|count_characters:true}}" placeholder="{{$email_label}}">
+ <i data-remove="vcard-email" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="vcard-impp form-group">
+ <div class="form-vcard-impp-wrapper">
+ {{if $vcard.impps}}
+ {{foreach $vcard.impps as $impp}}
+ <div class="form-group 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>
+ <option value="WORK"{{if $impp.type.0 == 'WORK'}} selected="selected"{{/if}}>{{$work}}</option>
+ <option value="OTHER"{{if $impp.type.0 == 'OTHER'}} selected="selected"{{/if}}>{{$other}}</option>
+ </select>
+ <input type="text" name="impp[]" value="{{$impp.address}}" size="{{$impp.address|count_characters:true}}" placeholder="{{$impp_label}}">
+ <i data-remove="vcard-impp" data-id="{{$vcard.id}}" class="fa fa-trash-o remove-field drop-icons fakelink"></i>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="done" value="{{$submit}}" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ {{/if}}
+
+
+ {{if $fields.address || $fields.locality || $fields.postal_code || $fields.region || $fields.country_name || $fields.hometown}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="location">
+ <h3>
+ <a data-toggle="collapse" data-parent="#profile-edit-wrapper" href="#location-collapse" aria-expanded="true" aria-controls="location-collapse">
+ {{$location}}
+ </a>
+ </h3>
+ </div>
+ <div id="location-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="location">
+ <div class="section-content-tools-wrapper">
+ {{if $fields.address}}
+ {{include file="field_input.tpl" field=$address}}
+ {{/if}}
+
+ {{if $fields.locality}}
+ {{include file="field_input.tpl" field=$locality}}
+ {{/if}}
+
+ {{if $fields.postal_code}}
+ {{include file="field_input.tpl" field=$postal_code}}
+ {{/if}}
+
+ {{if $fields.region}}
+ {{include file="field_input.tpl" field=$region}}
+ {{/if}}
+
+ {{if $fields.country_name}}
+ {{include file="field_input.tpl" field=$country_name}}
+ {{/if}}
+
+ {{if $fields.hometown}}
+ {{include file="field_input.tpl" field=$hometown}}
+ {{/if}}
+
+ <div class="form-group" >
+ <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ </div>
+
+ {{/if}}
+
+ {{if $fields.marital || $fields.sexual}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="relation">
+ <h3>
+ <a data-toggle="collapse" data-parent="#profile-edit-wrapper" href="#relation-collapse" aria-expanded="true" aria-controls="relation-collapse">
+ {{$relation}}
+ </a>
+ </h3>
+ </div>
+ <div id="relation-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="relation">
+ <div class="section-content-tools-wrapper">
+ {{if $fields.marital }}
+ <div id="profile-edit-marital-wrapper" class="form-group field" >
+ <label id="profile-edit-marital-label" for="profile-edit-marital" ><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$lbl_marital}}</label>
+ {{if $advanced}}
+ {{$marital}}
+ {{else}}
+ {{$marital_min}}
+ {{/if}}
+ </div>
+ <div class="clear"></div>
+
+ {{if $fields.partner}}
+ {{include file="field_input.tpl" field=$with}}
+ {{/if}}
+
+ {{if $fields.howlong}}
+ {{include file="field_input.tpl" field=$howlong}}
+ {{/if}}
+ {{/if}}
+
+ {{if $fields.sexual}}
+ <div id="profile-edit-sexual-wrapper" class="form-group field" >
+ <label id="profile-edit-sexual-label" for="sexual-select" >{{$lbl_sexual}}</label>
+ {{$sexual}}
+ </div>
+ <div class="clear"></div>
+ {{/if}}
+
+ <div class="form-group" >
+ <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ {{if $fields.keywords || $fields.politic || $fields.religion || $fields.about || $fields.contact || $fields.homepage || $fields.interest || $fields.likes || $fields.dislikes || $fields.channels || $fields.music || $fields.book || $fields.tv || $fields.film || $fields.romance || $fields.employment || $fields.education || $extra_fields}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="miscellaneous">
+ <h3>
+ <a data-toggle="collapse" data-parent="#profile-edit-wrapper" href="#miscellaneous-collapse" aria-expanded="true" aria-controls="miscellaneous-collapse">
+ {{$miscellaneous}}
+ </a>
+ </h3>
+ </div>
+ <div id="miscellaneous-collapse" class="panel-collapse collapse" role="tabpanel" aria-labelledby="miscellaneous">
+ <div class="section-content-tools-wrapper">
+ {{if $fields.homepage}}
+ {{include file="field_input.tpl" field=$homepage}}
+ {{/if}}
+
+ {{if $fields.keywords}}
+ {{include file="field_input.tpl" field=$keywords}}
+ {{/if}}
+
+ {{if $fields.politic}}
+ {{include file="field_input.tpl" field=$politic}}
+ {{/if}}
+
+ {{if $fields.religion}}
+ {{include file="field_input.tpl" field=$religion}}
+ {{/if}}
+
+ {{if $fields.about}}
+ {{include file="field_textarea.tpl" field=$about}}
+ {{/if}}
+
+ {{if $fields.contact}}
+ {{include file="field_textarea.tpl" field=$contact}}
+ {{/if}}
+
+ {{if $fields.interest}}
+ {{include file="field_textarea.tpl" field=$interest}}
+ {{/if}}
+
+ {{if $fields.likes}}
+ {{include file="field_textarea.tpl" field=$likes}}
+ {{/if}}
+
+ {{if $fields.dislikes}}
+ {{include file="field_textarea.tpl" field=$dislikes}}
+ {{/if}}
+
+ {{if $fields.channels}}
+ {{include file="field_textarea.tpl" field=$channels}}
+ {{/if}}
+
+ {{if $fields.music}}
+ {{include file="field_textarea.tpl" field=$music}}
+ {{/if}}
+
+ {{if $fields.book}}
+ {{include file="field_textarea.tpl" field=$book}}
+ {{/if}}
+
+ {{if $fields.tv}}
+ {{include file="field_textarea.tpl" field=$tv}}
+ {{/if}}
+
+ {{if $fields.film}}
+ {{include file="field_textarea.tpl" field=$film}}
+ {{/if}}
+
+ {{if $fields.romance}}
+ {{include file="field_textarea.tpl" field=$romance}}
+ {{/if}}
+
+ {{if $fields.employment}}
+ {{include file="field_textarea.tpl" field=$employ}}
+ {{/if}}
+
+ {{if $fields.education}}
+ {{include file="field_textarea.tpl" field=$education}}
+ {{/if}}
+
+ {{if $extra_fields}}
+ {{foreach $extra_fields as $field }}
+ {{include file="field_input.tpl" field=$field}}
+ {{/foreach}}
+ {{/if}}
+ <div class="form-group" >
+ <button type="submit" name="submit" class="btn btn-primary" value="{{$submit}}">{{$submit}}</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ </div>
+ </form>
+</div>
+
diff --git a/view/tpl/profile_entry.tpl b/view/tpl/profile_entry.tpl
new file mode 100755
index 000000000..9ae870738
--- /dev/null
+++ b/view/tpl/profile_entry.tpl
@@ -0,0 +1,11 @@
+<div class="profile-listing-row">
+ <div class="profile-listing-cell" >
+ <a href="profiles/{{$id}}"><img class="profile-listing-photo" id="profile-listing-photo-{{$id}}" src="{{$photo}}" alt="{{$alt}}" /></a>
+ </div>
+ <div class="profile-listing-cell" id="profile-listing-name-{{$id}}">
+ <a href="profiles/{{$id}}" class="profile-listing-edit-link" >{{$profile_name}}</a>
+ </div>
+ <div class="profile-listing-cell">
+ {{$visible}}
+ </div>
+</div>
diff --git a/view/tpl/profile_listing_header.tpl b/view/tpl/profile_listing_header.tpl
new file mode 100755
index 000000000..42abf2735
--- /dev/null
+++ b/view/tpl/profile_listing_header.tpl
@@ -0,0 +1,12 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <a class="btn btn-success btn-sm pull-right" href="{{$cr_new_link}}" id="profile-listing-new-link" title="{{$cr_new}}" ><i class="fa fa-plus-circle"></i>&nbsp;{{$cr_new}}</a>
+ <h2>{{$header}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+ <div class="profile-listing-table">
+ {{$profiles}}
+ </div>
+ </div>
+
+</div>
diff --git a/view/tpl/profile_photo.tpl b/view/tpl/profile_photo.tpl
new file mode 100755
index 000000000..ca107bfcc
--- /dev/null
+++ b/view/tpl/profile_photo.tpl
@@ -0,0 +1,48 @@
+<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 $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.is_default}}selected="selected"{{/if}}>{{$p.name}}</option>
+ {{/foreach}}
+ </select>
+ <div class="clear"></div>
+ <br />
+ <br />
+ {{/if}}
+
+ <div id="profile-photo-submit-wrapper">
+ <input type="submit" name="submit" id="profile-photo-submit" value="{{$submit}}">
+ </div>
+ </div>
+
+ </form>
+ <br />
+ <br />
+ <div id="profile-photo-link-select-wrapper">
+ {{$select}}
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/profile_tabs.tpl b/view/tpl/profile_tabs.tpl
new file mode 100644
index 000000000..49b74bb8f
--- /dev/null
+++ b/view/tpl/profile_tabs.tpl
@@ -0,0 +1,5 @@
+<div class="dropdown-header"><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}}
+<div class="dropdown-divider"></div>
diff --git a/view/tpl/profile_vcard.tpl b/view/tpl/profile_vcard.tpl
new file mode 100755
index 000000000..c17a7878c
--- /dev/null
+++ b/view/tpl/profile_vcard.tpl
@@ -0,0 +1,62 @@
+<div class="vcard h-card">
+ {{if ! $zcard}}
+ <div id="profile-photo-wrapper"><img class="photo u-photo" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.fullname}}"></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">
+ <a class="profile-edit-side-link dropdown-toggle" data-toggle="dropdown" href="#" ><i class="fa fa-pencil" title="{{$editmenu.edit.1}}"></i></a>
+ <ul class="dropdown-menu" role="menu">
+ {{foreach $editmenu.menu.entries as $e}}
+ <li>
+ <a href="profiles/{{$e.id}}"><img class="dropdown-menu-img-xs" src='{{$e.photo}}'>{{$e.profile_name}}</a>
+ </li>
+ {{/foreach}}
+ <li><a href="profile_photo" >{{$editmenu.menu.chg_photo}}</a></li>
+ {{if $editmenu.menu.cr_new}}<li><a href="profiles/new" id="profile-listing-new-link">{{$editmenu.menu.cr_new}}</a></li>{{/if}}
+ </ul>
+ </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>
+ </dl>
+ {{/if}}
+
+ {{if $gender}}<dl class="mf"><dt class="gender-label">{{$gender}}</dt> <dd class="p-gender">{{$profile.gender}}</dd></dl>{{/if}}
+
+ {{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$marital}}</dt><dd class="marital-text">{{$profile.marital}}</dd></dl>{{/if}}
+
+ {{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url u-url">{{$profile.homepage}}</dd></dl>{{/if}}
+
+
+</div>
+<div id="clear"></div>
+
+{{$rating}}
+
+{{$chanmenu}}
+
+{{$contact_block}}
+
+
diff --git a/view/tpl/profile_vcard_short.tpl b/view/tpl/profile_vcard_short.tpl
new file mode 100755
index 000000000..5d87d52c6
--- /dev/null
+++ b/view/tpl/profile_vcard_short.tpl
@@ -0,0 +1,38 @@
+{{$contact_block}}
+
+ {{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}}
+
+
+{{$rating}}
+
+ {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}}
+
+ {{if $location}}
+ <dl class="location"><dt class="location-label">{{$location}}</dt>
+ <dd class="adr">
+ {{if $profile.address}}<div class="street-address">{{$profile.address}}</div>{{/if}}
+ <span class="city-state-zip">
+ <span class="locality">{{$profile.locality}}</span>{{if $profile.locality}}, {{/if}}
+ <span class="region">{{$profile.region}}</span>
+ <span class="postal-code">{{$profile.postal_code}}</span>
+ </span>
+ {{if $profile.country_name}}<span class="country-name">{{$profile.country_name}}</span>{{/if}}
+ </dd>
+ </dl>
+ {{/if}}
+
+ {{if $gender}}<dl class="mf"><dt class="gender-label">{{$gender}}</dt> <dd class="x-gender">{{$profile.gender}}</dd></dl>{{/if}}
+
+
+ {{if $marital}}<dl class="marital"><dt class="marital-label"><span class="heart"><i class="fa fa-heart"></i>&nbsp;</span>{{$marital}}</dt><dd class="marital-text">{{$profile.marital}}</dd></dl>{{/if}}
+
+ {{if $homepage}}<dl class="homepage"><dt class="homepage-label">{{$homepage}}</dt><dd class="homepage-url">{{$profile.homepage}}</dd></dl>{{/if}}
+
+<div id="clear"></div>
+
+{{$chanmenu}}
+
+
+
diff --git a/view/tpl/prv_message.tpl b/view/tpl/prv_message.tpl
new file mode 100755
index 000000000..925447ff2
--- /dev/null
+++ b/view/tpl/prv_message.tpl
@@ -0,0 +1,104 @@
+{{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" >
+ <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" />
+ {{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">
+ <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 float-left">
+ <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 mr-2">
+ {{if $feature_expire}}
+ <button id="prvmail-expire-wrapper" class="btn btn-outline-secondary btn-sm" onclick="prvmailGetExpiry();return false;" >
+ <i id="prvmail-expires" class="fa fa-eraser jot-icons" title="{{$expires}}" ></i>
+ </button>
+ {{/if}}
+ {{if $feature_encrypt}}
+ <button id="prvmail-encrypt-wrapper" class="btn btn-outline-secondary btn-sm" onclick="red_encrypt('{{$cipher}}','#prvmail-text',$('#prvmail-text').val());return false;">
+ <i id="prvmail-encrypt" class="fa fa-key jot-icons" title="{{$encrypt}}" ></i>
+ </button>
+ {{/if}}
+ </div>
+ {{/if}}
+ <div class="btn-group d-lg-none">
+ <button type="button" id="more-tools" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
+ <i id="more-tools-icon" class="fa fa-cog jot-icons"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right" role="menu">
+ <a class="dropdown-item" href="#" id="prvmail-attach-sub"><i class="fa fa-paperclip"></i>&nbsp;{{$attach}}</a>
+ <a class="dropdown-item" href="#" onclick="prvmailJotGetLink(); return false;" ><i class="fa fa-link"></i>&nbsp;{{$insert}}</a>
+ {{if $feature_expire || $feature_encrypt}}
+ <div class="dropdown-divider"></div>
+ <a class="dropdown-item" href="#" onclick="prvmailGetExpiry(); return false;"><i id="prvmail-expires" class="fa fa-eraser"></i>&nbsp;{{$expires}}</a>
+ <a class="dropdown-item" href="#" onclick="red_encrypt('{{$cipher}}','#prvmail-text',$('#prvmail-text').val()); return false;"><i class="fa fa-key"></i>&nbsp;{{$encrypt}}</a>
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ <div id="prvmail-rotator-wrapper" class="float-left">
+ <div id="prvmail-rotator"></div>
+ </div>
+ <div class="clear"></div>
+ </div>
+ <div id="mail-preview-content" style="display: none;"></div>
+ </form>
+ </div>
+{{if $new}}
+ </div>
+</div>
+{{/if}}
diff --git a/view/tpl/pwdreset.tpl b/view/tpl/pwdreset.tpl
new file mode 100755
index 000000000..dc17ed57a
--- /dev/null
+++ b/view/tpl/pwdreset.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper-styled">
+<h3>{{$lbl1}}</h3>
+
+<p>
+{{$lbl2}}
+</p>
+<p>
+{{$lbl3}}
+</p>
+<p>{{$newpass}}</p>
+<p>
+{{$lbl4}} {{$lbl5}}
+</p>
+<p>
+{{$lbl6}}
+</p>
+</div>
diff --git a/view/tpl/rating_form.tpl b/view/tpl/rating_form.tpl
new file mode 100644
index 000000000..4bd826484
--- /dev/null
+++ b/view/tpl/rating_form.tpl
@@ -0,0 +1,25 @@
+<div class="generic-content-wrapper-styled">
+<h3>{{$header}}</h3>
+
+<div class="rating-target-name">{{if $site}}{{$website}} {{$site}}{{else}}{{$tgt_name}}{{/if}}</div>
+
+<h3>{{$lbl_rating}}</h3>
+
+<form action="rate" method="post">
+
+{{$rating}}
+
+<input type="hidden" name="execute" value="1" />
+<input type="hidden" name="target" value="{{$target}}" />
+
+<input id="contact-rating-mirror" type="hidden" name="rating" value="{{$rating_val}}" />
+<br />
+<h3 class="abook-rating-text-desc">{{$lbl_rating_txt}}</h3>
+<textarea name="rating_text" id="rating-text" >{{$rating_txt}}</textarea>
+
+<div class="clear"></div>
+
+<input class="contact-edit-submit" type="submit" name="done" value="{{$submit}}" />
+
+</form>
+</div>
diff --git a/view/tpl/rating_slider.tpl b/view/tpl/rating_slider.tpl
new file mode 100644
index 000000000..4c36504e6
--- /dev/null
+++ b/view/tpl/rating_slider.tpl
@@ -0,0 +1,19 @@
+<div id="rating-slider" class="slider form-group"><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
+ // the slider container is hidden (display: none) during rendering.
+ // So let's unhide it to render and hide again afterwards.
+ if(!$("#rating-tool-collapse").hasClass("in")) {
+ $("#rating-tool-collapse").addClass("in");
+ makeRatingSlider();
+ $("#rating-tool-collapse").removeClass("in");
+ }
+ else {
+ makeRatingSlider();
+ }
+});
+function makeRatingSlider() {
+ $("#rating-range").jRange({ from: -10, to: 10, step: 1, width:'98%', showLabels: false, showScale: true, scale : [ '-10','-8','-6','-4','-2','0','2','4','6','8','10' ], onstatechange: function(v) { $("#contact-rating-mirror").val(v); } });
+}
+</script>
diff --git a/view/tpl/rbmark.tpl b/view/tpl/rbmark.tpl
new file mode 100644
index 000000000..bead1de2f
--- /dev/null
+++ b/view/tpl/rbmark.tpl
@@ -0,0 +1,16 @@
+<h3>{{$header}}</h3>
+
+
+<form action="rbmark" method="post" >
+
+<input type="hidden" name="private" value="{{$private}}" />
+<input type="hidden" name="ischat" value="{{$ischat}}" />
+
+{{include file="field_input.tpl" field=$url}}
+{{include file="field_input.tpl" field=$title}}
+{{include file="field_select.tpl" field=$menus}}
+{{include file="field_input.tpl" field=$menu_name}}
+
+<input type="submit" name="submit" value="{{$submit}}" />
+
+</form>
diff --git a/view/tpl/register.tpl b/view/tpl/register.tpl
new file mode 100755
index 000000000..c84934626
--- /dev/null
+++ b/view/tpl/register.tpl
@@ -0,0 +1,61 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper">
+ <form action="register" method="post" id="register-form">
+ {{if $reg_is}}
+ <div class="section-content-warning-wrapper">
+ <div id="register-desc" class="descriptive-paragraph">{{$reg_is}}</div>
+ <div id="register-sites" class="descriptive-paragraph">{{$other_sites}}</div>
+ </div>
+ {{/if}}
+
+ {{if $registertext}}
+ <div id="register-text" class="descriptive-paragraph">{{$registertext}}</div>
+ {{/if}}
+
+ {{if $invitations}}
+ <div class="section-content-info-wrapper">
+ <div id="register-invite-desc" class="descriptive-paragraph">{{$invite_desc}}</div>
+ </div>
+ {{include file="field_input.tpl" field=$invite_code}}
+ {{/if}}
+
+ {{include file="field_input.tpl" field=$email}}
+
+ {{include file="field_password.tpl" field=$pass1}}
+
+ {{include file="field_password.tpl" field=$pass2}}
+
+ {{if $auto_create}}
+ {{if $default_role}}
+ <input type="hidden" name="permissions_role" value="{{$default_role}}" />
+ {{else}}
+ <div class="section-content-info-wrapper">
+ {{$help_role}}
+ </div>
+ {{include file="field_select_grouped.tpl" field=$role}}
+ {{/if}}
+
+ {{include file="field_input.tpl" field=$name}}
+ <div id="name-spinner"></div>
+
+ {{include file="field_input.tpl" field=$nickname}}
+ <div id="nick-spinner"></div>
+ {{/if}}
+
+ {{if $enable_tos}}
+ {{include file="field_checkbox.tpl" field=$tos}}
+ {{else}}
+ <input type="hidden" name="tos" value="1" />
+ {{/if}}
+
+ <button class="btn btn-primary" type="submit" name="submit" id="newchannel-submit-button" value="{{$submit}}">{{$submit}}</button>
+ <div id="register-submit-end" class="register-field-end"></div>
+ </form>
+ <br />
+ <div class="descriptive-text">{{$verify_note}}</div>
+
+ </div>
+</div>
diff --git a/view/tpl/remote_friends_common.tpl b/view/tpl/remote_friends_common.tpl
new file mode 100755
index 000000000..d6d2fd211
--- /dev/null
+++ b/view/tpl/remote_friends_common.tpl
@@ -0,0 +1,21 @@
+<div id="remote-friends-in-common" class="bigwidget">
+ <div id="rfic-desc">{{$desc}} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{if $linkmore}}<a href="{{$base}}/common/{{$uid}}">{{$more}}</a>{{/if}}</div>
+ {{if $items}}
+ {{foreach $items as $item}}
+ <div class="profile-match-wrapper">
+ <div class="profile-match-photo">
+ <a href="{{$base}}/chanview?f=&url={{$item.xchan_url}}">
+ <img src="{{$item.xchan_photo_m}}" width="80" height="80" alt="{{$item.xchan_name}}" title="{{$item.xchan_name}}" />
+ </a>
+ </div>
+ <div class="profile-match-break"></div>
+ <div class="profile-match-name">
+ <a href="{{$base}}/chanview?f=&url={{$item.xchan_url}}" title="{{$item.xchan_name}}">{{$item.xchan_name}}</a>
+ </div>
+ <div class="profile-match-end"></div>
+ </div>
+ {{/foreach}}
+ {{/if}}
+ <div id="rfic-end" class="clear"></div>
+</div>
+
diff --git a/view/tpl/remote_login.tpl b/view/tpl/remote_login.tpl
new file mode 100644
index 000000000..e6d387265
--- /dev/null
+++ b/view/tpl/remote_login.tpl
@@ -0,0 +1 @@
+<a href="rmagic" class="btn btn-block btn-success rmagic-button">{{$title}}</a>
diff --git a/view/tpl/removeaccount.tpl b/view/tpl/removeaccount.tpl
new file mode 100644
index 000000000..ce6c8ac22
--- /dev/null
+++ b/view/tpl/removeaccount.tpl
@@ -0,0 +1,20 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-danger-wrapper" id="remove-account-desc">
+ <strong>{{$desc.0}}</strong>{{$desc.1}}<strong>{{$desc.2}}</strong>
+ </div>
+ <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">
+ <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>
+ {{include file="field_checkbox.tpl" field=$global}}
+ <button type="submit" name="submit" class="btn btn-danger">{{$submit}}</button>
+ </form>
+ </div>
+</div>
+
diff --git a/view/tpl/removeme.tpl b/view/tpl/removeme.tpl
new file mode 100755
index 000000000..40b9546d2
--- /dev/null
+++ b/view/tpl/removeme.tpl
@@ -0,0 +1,20 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-danger-wrapper" id="remove-account-desc">
+ <strong>{{$desc.0}}</strong>{{$desc.1}}<strong>{{$desc.2}}</strong>
+ </div>
+ <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">
+ <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>
+ {{include file="field_checkbox.tpl" field=$global}}
+ <button type="submit" name="submit" class="btn btn-danger">{{$submit}}</button>
+ </form>
+ </div>
+</div>
+
diff --git a/view/tpl/rmagic.tpl b/view/tpl/rmagic.tpl
new file mode 100755
index 000000000..9d84e4a36
--- /dev/null
+++ b/view/tpl/rmagic.tpl
@@ -0,0 +1,9 @@
+<div class="generic-content-wrapper-styled">
+ <h3>{{$title}}</h3>
+ <form action="rmagic" method="post" >
+ <div class="form-group">
+ {{include file="field_input.tpl" field=$address}}
+ <input class="btn btn-primary" type="submit" name="submit" id="rmagic-submit-button" value="{{$submit}}" />
+ </div>
+ </form>
+</div>
diff --git a/view/tpl/safesearch.tpl b/view/tpl/safesearch.tpl
new file mode 100644
index 000000000..58ce22741
--- /dev/null
+++ b/view/tpl/safesearch.tpl
@@ -0,0 +1,6 @@
+<div id="directory_safemode" class="widget">
+<h3>{{$safemode}}</h3>
+<ul class="nav nav-pills nav-stacked">
+ <li><a href="toggle_safesearch">{{$toggle}}</a></li>
+</ul>
+</div>
diff --git a/view/tpl/saved_searches.tpl b/view/tpl/saved_searches.tpl
new file mode 100644
index 000000000..ff2d044ef
--- /dev/null
+++ b/view/tpl/saved_searches.tpl
@@ -0,0 +1,12 @@
+<div class="widget saved-search-widget clearfix">
+ <h3 id="search">{{$title}}</h3>
+ {{$searchbox}}
+ <ul id="saved-search-list" class="nav nav-pills flex-column">
+ {{foreach $saved as $search}}
+ <li class="nav-item nav-item-hack" id="search-term-{{$search.id}}">
+ <a class="nav-link widget-nav-pills-icons" title="{{$search.delete}}" onclick="return confirmDelete();" id="drop-saved-search-term-{{$search.id}}" href="{{$search.dellink}}"><i id="dropfa-floppy-od-search-term-{{$search.id}}" class="fa fa-trash-o drop-icons" ></i></a>
+ <a id="saved-search-term-{{$search.id}}" class="nav-link{{if $search.selected}} active{{/if}}" href="{{$search.srchlink}}">{{$search.displayterm}}</a>
+ </li>
+ {{/foreach}}
+ </ul>
+</div>
diff --git a/view/tpl/search_item.tpl b/view/tpl/search_item.tpl
new file mode 100755
index 000000000..66618a216
--- /dev/null
+++ b/view/tpl/search_item.tpl
@@ -0,0 +1,114 @@
+<div id="thread-wrapper-{{$item.id}}" class="thread-wrapper{{if $item.toplevel}} {{$item.toplevel}} mb-4 clearfix generic-content-wrapper{{/if}}">
+ <a name="{{$item.id}}" ></a>
+ <div class="clearfix wall-item-outside-wrapper {{$item.indent}}{{$item.previewing}}{{if $item.owner_url}} wallwall{{/if}}" id="wall-item-outside-wrapper-{{$item.id}}" >
+ <div class="wall-item-content-wrapper {{$item.indent}}" id="wall-item-content-wrapper-{{$item.id}}">
+ {{if $item.photo}}
+ <div class="wall-photo-item" id="wall-photo-item-{{$item.id}}">
+ {{$item.photo}}
+ </div>
+ {{/if}}
+ {{if $item.event}}
+ <div class="wall-event-item" id="wall-event-item-{{$item.id}}">
+ {{$item.event}}
+ </div>
+ {{/if}}
+ {{if $item.title && !$item.event}}
+ <div class="p-2{{if $item.is_new}} bg-primary text-white{{/if}} wall-item-title h3{{if !$item.photo}} rounded-top{{/if}}" id="wall-item-title-{{$item.id}}">
+ {{if $item.title_tosource}}{{if $item.plink}}<a href="{{$item.plink.href}}" title="{{$item.title}} ({{$item.plink.title}})">{{/if}}{{/if}}{{$item.title}}{{if $item.title_tosource}}{{if $item.plink}}</a>{{/if}}{{/if}}
+ </div>
+ {{if ! $item.is_new}}
+ <hr class="m-0">
+ {{/if}}
+ {{/if}}
+ <div class="p-2 clearfix wall-item-head{{if $item.is_new && !$item.title && !$item.event && !$item.is_comment}} wall-item-head-new rounded-top{{/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}}">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-photo-link" id="wall-item-photo-link-{{$item.id}}"><img src="{{$item.thumb}}" class="wall-item-photo{{$item.sparkle}}" id="wall-item-photo-{{$item.id}}" alt="{{$item.name}}" /></a>
+ </div>
+ </div>
+ {{if $item.lock}}
+ <div class="wall-item-lock dropdown">
+ <i class="fa fa-lock lockview" data-toggle="dropdown" title="{{$item.lock}}" onclick="lockview('item',{{$item.id}});" ></i><ul id="panel-{{$item.id}}" class="lockview-panel dropdown-menu"></ul>&nbsp;
+ </div>
+ {{/if}}
+ <div class="wall-item-author">
+ <a href="{{$item.profile_url}}" title="{{$item.linktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.sparkle}}" id="wall-item-name-{{$item.id}}" >{{$item.name}}</span></a>{{if $item.owner_url}}&nbsp;{{$item.via}}&nbsp;<a href="{{$item.owner_url}}" title="{{$item.olinktitle}}" class="wall-item-name-link"><span class="wall-item-name{{$item.osparkle}}" id="wall-item-ownername-{{$item.id}}">{{$item.owner_name}}</span></a>{{/if}}
+ </div>
+ <div class="wall-item-ago" id="wall-item-ago-{{$item.id}}">
+ {{if $item.verified}}<i class="fa fa-check item-verified" title="{{$item.verified}}"></i>&nbsp;{{elseif $item.forged}}<i class="fa fa-exclamation item-forged" title="{{$item.forged}}"></i>&nbsp;{{/if}}{{if $item.location}}<span class="wall-item-location" id="wall-item-location-{{$item.id}}">{{$item.location}},&nbsp;</span>{{/if}}<span class="autotime" title="{{$item.isotime}}">{{$item.localtime}}{{if $item.editedtime}}&nbsp;{{$item.editedtime}}{{/if}}{{if $item.expiretime}}&nbsp;{{$item.expiretime}}{{/if}}</span>{{if $item.editedtime}}&nbsp;<i class="fa fa-pencil"></i>{{/if}}&nbsp;{{if $item.app}}<span class="item.app">{{$item.str_app}}</span>{{/if}}
+ </div>
+ </div>
+ {{if $item.body}}
+ <div class="p-2 clrearfix {{if $item.is_photo}} wall-photo-item{{else}} wall-item-content{{/if}}" id="wall-item-content-{{$item.id}}">
+ <div class="wall-item-body" id="wall-item-body-{{$item.id}}" >
+ {{$item.body}}
+ </div>
+ </div>
+ {{/if}}
+ {{if $item.has_tags}}
+ <div class="p-2 wall-item-tools clearfix">
+ <div class="body-tags">
+ <span class="tag">{{$item.mentions}} {{$item.tags}} {{$item.categories}} {{$item.folders}}</span>
+ </div>
+ {{**
+ {{if $item.mentions}}
+ <div class="body-tags" id="item-mentions">
+ <span class="tag">{{$item.mentions}}</span>
+ </div>
+ {{/if}}
+ {{if $item.tags}}
+ <div class="body-tags" id="item-tags">
+ <span class="tag">{{$item.tags}}</span>
+ </div>
+ {{/if}}
+ {{if $item.categories}}
+ <div class="body-tags" id="item-categories">
+ <span class="tag">{{$item.categories}}</span>
+ </div>
+ {{/if}}
+ {{if $item.folders}}
+ <div class="body-tags" id="item-folders">
+ <span class="tag">{{$item.folders}}</span>
+ </div>
+ {{/if}}
+ **}}
+ </div>
+ {{/if}}
+ <div class="p-2 clearfix wall-item-tools">
+ <div class="wall-item-tools-right btn-group pull-right">
+ <button type="button" class="btn btn-outline-secondary btn-sm dropdown-toggle" data-toggle="dropdown">
+ <i class="fa fa-cog"></i>
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{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-{{$mitem.icon}}"></i> {{$mitem.title}}</a></li>
+ {{/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-trash-o"></i> {{$item.drop.delete}}</a></li>
+ {{/if}}
+ {{if $item.thread_author_menu}}
+ <div class="dropdown-divider"></div>
+ {{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></li>
+ {{/foreach}}
+ {{/if}}
+ </div>
+ </div>
+ {{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>
+ <div class="dropdown-menu">{{$item.attachments}}</div>
+ </div>
+ {{/if}}
+ </div>
+ </div>
+ {{if $item.conv}}
+ <div class="p-2 wall-item-conv" id="wall-item-conv-{{$item.id}}" >
+ <a href='{{$item.conv.href}}' id='context-{{$item.id}}' title='{{$item.conv.title}}'>{{$item.conv.title}}</a>
+ </div>
+ {{/if}}
+ </div>
+</div>
+
diff --git a/view/tpl/searchbox.tpl b/view/tpl/searchbox.tpl
new file mode 100644
index 000000000..8f7ac5162
--- /dev/null
+++ b/view/tpl/searchbox.tpl
@@ -0,0 +1,12 @@
+<form action="{{$action_url}}" method="get" >
+ <input type="hidden" name="f" value="" />
+ <div id="{{$id}}" class="input-group">
+ <input class="form-control form-control-sm" type="text" name="search" id="search-text" value="{{$s}}" onclick="this.submit();" />
+ <div class="input-group-btn">
+ <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>
+ </div>
+</form>
diff --git a/view/tpl/section_title.tpl b/view/tpl/section_title.tpl
new file mode 100644
index 000000000..338e57042
--- /dev/null
+++ b/view/tpl/section_title.tpl
@@ -0,0 +1,5 @@
+<div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+</div>
+
diff --git a/view/tpl/select_timezone.tpl b/view/tpl/select_timezone.tpl
new file mode 100644
index 000000000..2820a54f4
--- /dev/null
+++ b/view/tpl/select_timezone.tpl
@@ -0,0 +1,11 @@
+{{* TODO: Make id configurabel *}}
+<select id='timezone_select' name='timezone'>
+{{foreach $continents as $continent => $cities}}
+<optgroup label="{{$continent}}">
+{{foreach $cities as $city => $value}}
+<option value='{{$value}}' {{if $value == $selected}}selected='selected'{{/if}}>{{$city}}</option>
+{{/foreach}}
+</optgroup>
+{{/foreach}}
+</select>
+
diff --git a/view/tpl/sellpage_edit.tpl b/view/tpl/sellpage_edit.tpl
new file mode 100644
index 000000000..0a4726fb2
--- /dev/null
+++ b/view/tpl/sellpage_edit.tpl
@@ -0,0 +1,23 @@
+<h1>{{$header}}</h1>
+<form id="sellpage-edit" action="connect/{{$address}}" method="post">
+
+{{include file="field_checkbox.tpl" field=$premium}}
+
+<div class="descriptive-text">{{$desc}}</div>
+
+<div class="sellpage-editbody">
+<p id="sellpage-bodydesc" >
+{{$lbl_about}}
+</p>
+
+<textarea rows="10" cols="72" id="sellpage-textinp" name="text" >{{$text}}</textarea>
+
+</div>
+<div id="sellpage-editbody-end"></div>
+
+
+<div class="descriptive-text">{{$lbl2}}</div>
+<div class="sellpage-final">{{$desc2}}</div>
+
+<input type="submit" name="submit" value="{{$submit}}" />
+</form>
diff --git a/view/tpl/sellpage_submit.tpl b/view/tpl/sellpage_submit.tpl
new file mode 100644
index 000000000..2bd735ea4
--- /dev/null
+++ b/view/tpl/sellpage_submit.tpl
@@ -0,0 +1,3 @@
+<form id="sellpage-submit" action="connect/{{$address}}" method="post">
+<input type="submit" name="submit" value="{{$continue}}" />
+</form> \ No newline at end of file
diff --git a/view/tpl/sellpage_view.tpl b/view/tpl/sellpage_view.tpl
new file mode 100644
index 000000000..20a65ffbe
--- /dev/null
+++ b/view/tpl/sellpage_view.tpl
@@ -0,0 +1,11 @@
+<div class="generic-content-wrapper">
+<h1>{{$header}}</h1>
+
+<div class="descriptive-text">{{$desc}}</div>
+
+<div class="sellpage-body">{{$text}}</div>
+
+<div class="sellpage-final">{{$desc2}}</div>
+
+{{$submit}}
+</div>
diff --git a/view/tpl/settings.tpl b/view/tpl/settings.tpl
new file mode 100755
index 000000000..dd5fecb43
--- /dev/null
+++ b/view/tpl/settings.tpl
@@ -0,0 +1,192 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $server_role != 'basic'}}<a title="{{$removechannel}}" class="btn btn-danger btn-sm pull-right" href="removeme"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>{{/if}}
+ <h2>{{$ptitle}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{$nickname_block}}
+ <form action="settings" id="settings-form" method="post" autocomplete="off" class="acl-form" data-form_id="settings-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}' />
+ <div class="panel-group" id="settings" role="tablist" aria-multiselectable="true">
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="basic-settings">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#basic-settings-collapse">
+ {{$h_basic}}
+ </a>
+ </h3>
+ </div>
+ <div id="basic-settings-collapse" class="collapse show" role="tabpanel" aria-labelledby="basic-settings">
+ <div class="section-content-tools-wrapper">
+ {{include file="field_input.tpl" field=$username}}
+ {{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-parent="#settings" href="#privacy-settings-collapse">
+ {{$h_prv}}
+ </a>
+ </h3>
+ </div>
+ <div id="privacy-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="privacy-settings">
+ <div class="section-content-tools-wrapper">
+ {{if $server_role != 'basic'}}
+ {{include file="field_select_grouped.tpl" field=$role}}
+ {{/if}}
+ <div id="advanced-perm" style="display:{{if $permissions_set && $server_role != 'basic' }}none{{else}}block{{/if}};">
+
+ {{if $server_role != 'basic'}}
+ <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">
+ <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
+ <h4 class="modal-title">{{$lbl_p2macro}}</h4>
+ </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 -->
+ {{/if}}
+ <div id="settings-default-perms" class="form-group" >
+ <button type="button" class="btn btn-outline-secondary" data-toggle="modal" data-target="#aclModal"><i id="jot-perms-icon" class="fa"></i>&nbsp;{{$permissions}}</button>
+ </div>
+ {{$group_select}}
+ {{include file="field_checkbox.tpl" field=$hide_presence}}
+ {{$profile_in_dir}}
+ </div>
+ <div class="settings-common-perms">
+ {{$suggestme}}
+ {{include file="field_checkbox.tpl" field=$blocktags}}
+ {{include file="field_input.tpl" field=$expire}}
+ </div>
+ {{if $permcat_enable}}
+ {{include file="field_select.tpl" field=$defpermcat}}
+ {{/if}}
+
+ {{if $sec_addon}}
+ {{$sec_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="notification-settings">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#notification-settings-collapse">
+ {{$h_not}}
+ </a>
+ </h3>
+ </div>
+ <div id="notification-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="notification-settings">
+ <div class="section-content-tools-wrapper">
+ <div id="settings-notifications">
+ <h3>{{$activity_options}}</h3>
+ <div class="group">
+ {{*not yet implemented *}}
+ {{*include file="field_checkbox.tpl" field=$post_joingroup*}}
+ {{include file="field_checkbox.tpl" field=$post_newfriend}}
+ {{include file="field_checkbox.tpl" field=$post_profilechange}}
+ </div>
+ <h3>{{$lbl_not}}</h3>
+ <div class="group">
+ {{include file="field_intcheckbox.tpl" field=$notify1}}
+ {{include file="field_intcheckbox.tpl" field=$notify2}}
+ {{include file="field_intcheckbox.tpl" field=$notify3}}
+ {{include file="field_intcheckbox.tpl" field=$notify4}}
+ {{*include file="field_intcheckbox.tpl" field=$notify9*}}
+ {{include file="field_intcheckbox.tpl" field=$notify5}}
+ {{include file="field_intcheckbox.tpl" field=$notify6}}
+ {{include file="field_intcheckbox.tpl" field=$notify7}}
+ {{include file="field_intcheckbox.tpl" field=$notify8}}
+ </div>
+ <h3>{{$lbl_vnot}}</h3>
+ <div class="group">
+ {{include file="field_intcheckbox.tpl" field=$vnotify1}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify2}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify3}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify4}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify5}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify6}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify10}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify7}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify8}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify9}}
+ {{include file="field_intcheckbox.tpl" field=$vnotify11}}
+ {{include file="field_intcheckbox.tpl" field=$always_show_in_notices}}
+ {{include file="field_input.tpl" field=$evdays}}
+ </div>
+ </div>
+ {{if $notify_addon}}
+ {{$notify_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="miscellaneous-settings">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#miscellaneous-settings-collapse" aria-expanded="true" aria-controls="miscellaneous-settings-collapse">
+ {{$lbl_misc}}
+ </a>
+ </h3>
+ </div>
+ <div id="miscellaneous-settings-collapse" class="collapse" role="tabpanel" aria-labelledby="miscellaneous-settings">
+ <div class="section-content-tools-wrapper">
+ {{if $menus}}
+ <div class="form-group channel-menu">
+ <label for="channel_menu">{{$menu_desc}}</label>
+ <select name="channel_menu" class="form-control">
+ {{foreach $menus as $menu }}
+ <option value="{{$menu.name}}" {{$menu.selected}} >{{$menu.name}} </option>
+ {{/foreach}}
+ </select>
+ </div>
+ {{/if}}
+ {{include file="field_checkbox.tpl" field=$cal_first_day}}
+
+ {{if $misc_addon}}
+ {{$misc_addon}}
+ {{/if}}
+
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+ {{$aclselect}}
+</div>
diff --git a/view/tpl/settings_account.tpl b/view/tpl/settings_account.tpl
new file mode 100755
index 000000000..b7fdfb9a9
--- /dev/null
+++ b/view/tpl/settings_account.tpl
@@ -0,0 +1,28 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <a title="{{$removeaccount}}" class="btn btn-danger btn-sm pull-right" href="removeaccount"><i class="fa fa-trash-o"></i>&nbsp;{{$removeme}}</a>
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ <form action="settings/account" id="settings-account-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_input.tpl" field=$email}}
+ {{include file="field_password.tpl" field=$origpass}}
+ {{include file="field_password.tpl" field=$password1}}
+ {{include file="field_password.tpl" field=$password2}}
+
+ {{if $z_server_role == 'pro' && ! $techlock}}
+ {{include file="field_select.tpl" field=$techlevel}}
+ {{else}}
+ <input type="hidden" name="techlevel" value="{{$techlevel.2}}" />
+ {{/if}}
+
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ {{$account_settings}}
+ </div>
+ </form>
+</div>
+
diff --git a/view/tpl/settings_addons.tpl b/view/tpl/settings_addons.tpl
new file mode 100755
index 000000000..52f8d9d3f
--- /dev/null
+++ b/view/tpl/settings_addons.tpl
@@ -0,0 +1,11 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <form action="settings/featured" method="post" autocomplete="off">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ <div class="panel-group" id="settings" role="tablist">
+ {{$settings_addons}}
+ </div>
+ </form>
+</div>
diff --git a/view/tpl/settings_connectors.tpl b/view/tpl/settings_connectors.tpl
new file mode 100755
index 000000000..8bea9ca63
--- /dev/null
+++ b/view/tpl/settings_connectors.tpl
@@ -0,0 +1,10 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$title}}</h1>
+
+<form action="settings/connectors" method="post" autocomplete="off">
+<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+{{$settings_connectors}}
+
+</form>
+</div>
diff --git a/view/tpl/settings_display.tpl b/view/tpl/settings_display.tpl
new file mode 100755
index 000000000..d8c1ac7aa
--- /dev/null
+++ b/view/tpl/settings_display.tpl
@@ -0,0 +1,86 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$ptitle}}</h2>
+ </div>
+ <form action="settings/display" id="settings-form" method="post" autocomplete="off" >
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <div class="panel-group" id="settings" role="tablist" aria-multiselectable="true">
+ {{if $theme || $mobile_theme}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="theme-settings-title">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#theme-settings-content" 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">
+ <div class="section-content-tools-wrapper">
+ {{if $theme}}
+ {{include file="field_themeselect.tpl" field=$theme}}
+ {{/if}}
+ {{if $schema}}
+ {{include file="field_select.tpl" field=$schema}}
+ {{/if}}
+ {{if $mobile_theme}}
+ {{include file="field_themeselect.tpl" field=$mobile_theme}}
+ {{/if}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="custom-settings-title">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#custom-settings-content" aria-expanded="true" aria-controls="custom-settings-content">
+ {{$d_ctset}}
+ </a>
+ </h3>
+ </div>
+ <div id="custom-settings-content" class="collapse{{if !$theme && !$mobile_theme}} in{{/if}}" role="tabpanel" aria-labelledby="custom-settings">
+ <div class="section-content-tools-wrapper">
+ {{if $theme_config}}
+ {{$theme_config}}
+ {{/if}}
+ </div>
+ </div>
+ </div>
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="content-settings-title">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#content-settings-content" aria-expanded="true" aria-controls="content-settings-content">
+ {{$d_cset}}
+ </a>
+ </h3>
+ </div>
+ <div id="content-settings-content" class="collapse{{if !$theme && !$mobile_theme && !$theme_config}} in{{/if}}" role="tabpanel" aria-labelledby="content-settings">
+ <div class="section-content-wrapper">
+ {{include file="field_input.tpl" field=$ajaxint}}
+ {{include file="field_input.tpl" field=$itemspage}}
+ {{include file="field_input.tpl" field=$channel_divmore_height}}
+ {{include file="field_input.tpl" field=$network_divmore_height}}
+ {{include file="field_checkbox.tpl" field=$nosmile}}
+ {{include file="field_checkbox.tpl" field=$title_tosource}}
+ {{include file="field_checkbox.tpl" field=$channel_list_mode}}
+ {{include file="field_checkbox.tpl" field=$network_list_mode}}
+ {{include file="field_checkbox.tpl" field=$user_scalable}}
+ {{include file="field_checkbox.tpl" field=$preload_images}}
+ {{include file="field_checkbox.tpl" field=$manual_update}}
+ {{if $expert}}
+ <div class="form-group">
+ <a class="btn btn-outline-secondary "href="pdledit">{{$layout_editor}}</a>
+ </div>
+ {{/if}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </form>
+</div>
diff --git a/view/tpl/settings_features.tpl b/view/tpl/settings_features.tpl
new file mode 100755
index 000000000..dfe049a7a
--- /dev/null
+++ b/view/tpl/settings_features.tpl
@@ -0,0 +1,30 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <form action="settings/features" method="post" autocomplete="off">
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ <div class="panel-group" id="settings" role="tablist" aria-multiselectable="true">
+ {{foreach $features as $g => $f}}
+ <div class="panel">
+ <div class="section-subtitle-wrapper" role="tab" id="{{$g}}-settings-title">
+ <h3>
+ <a data-toggle="collapse" data-parent="#settings" href="#{{$g}}-settings-content" 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">
+ <div class="section-content-tools-wrapper">
+ {{foreach $f.1 as $fcat}}
+ {{include file="field_checkbox.tpl" field=$fcat}}
+ {{/foreach}}
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{/foreach}}
+ </div>
+</div>
diff --git a/view/tpl/settings_nick_set.tpl b/view/tpl/settings_nick_set.tpl
new file mode 100755
index 000000000..76fe7cd8d
--- /dev/null
+++ b/view/tpl/settings_nick_set.tpl
@@ -0,0 +1,8 @@
+<div id="settings-nick-wrapper" class="section-content-info-wrapper">
+<div id="settings-nickname-desc">{{$desc}} <strong>'{{$nickname}}@{{$basepath}}'</strong></div>
+{{if $davpath}}
+<br>
+<div id="settings-dav-desc">{{$davdesc}} <strong>'{{$davpath}}'</strong></div>
+{{/if}}
+</div>
+<div id="settings-nick-end" ></div>
diff --git a/view/tpl/settings_oauth.tpl b/view/tpl/settings_oauth.tpl
new file mode 100755
index 000000000..811cfcec5
--- /dev/null
+++ b/view/tpl/settings_oauth.tpl
@@ -0,0 +1,36 @@
+<div class="generic-content-wrapper">
+<div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+</div>
+
+<div class="section-content-tools-wrapper">
+<form action="settings/oauth" method="post" autocomplete="off">
+<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+ <div id="profile-edit-links">
+ <ul>
+ <li>
+ <a id="profile-edit-view-link" href="{{$baseurl}}/settings/oauth/add">{{$add}}</a>
+ </li>
+ </ul>
+ </div>
+
+ {{foreach $apps as $app}}
+ <div class='oauthapp'>
+ <img src='{{$app.icon}}' class="{{if $app.icon}} {{else}}noicon{{/if}}">
+ {{if $app.clname}}<h4>{{$app.clname}}</h4>{{else}}<h4>{{$noname}}</h4>{{/if}}
+ {{if $app.my}}
+ {{if $app.oauth_token}}
+ <div class="settings-submit-wrapper" ><button class="settings-submit" type="submit" name="remove" value="{{$app.oauth_token}}">{{$remove}}</button></div>
+ {{/if}}
+ {{/if}}
+ {{if $app.my}}
+ <a href="{{$baseurl}}/settings/oauth/edit/{{$app.client_id}}" title="{{$edit}}"><i class="fa fa-pencil btn btn-outline-secondary"></i></a>
+ <a href="{{$baseurl}}/settings/oauth/delete/{{$app.client_id}}?t={{$form_security_token}}" title="{{$delete}}"><i class="fa fa-trash-o btn btn-outline-secondary"></i></a>
+ {{/if}}
+ </div>
+ {{/foreach}}
+
+</form>
+</div>
+</div>
diff --git a/view/tpl/settings_oauth_edit.tpl b/view/tpl/settings_oauth_edit.tpl
new file mode 100755
index 000000000..b94dec48a
--- /dev/null
+++ b/view/tpl/settings_oauth_edit.tpl
@@ -0,0 +1,22 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+<div class="section-content-tools-wrapper">
+<form method="POST">
+<input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+
+{{include file="field_input.tpl" field=$name}}
+{{include file="field_input.tpl" field=$key}}
+{{include file="field_input.tpl" field=$secret}}
+{{include file="field_input.tpl" field=$redirect}}
+{{include file="field_input.tpl" field=$icon}}
+
+<div class="settings-submit-wrapper" >
+<input type="submit" name="submit" class="settings-submit" value="{{$submit}}" />
+<input type="submit" name="cancel" class="settings-submit" value="{{$cancel}}" />
+</div>
+
+</form>
+</div>
+</div>
diff --git a/view/tpl/settings_permcats.tpl b/view/tpl/settings_permcats.tpl
new file mode 100644
index 000000000..f6bb9b036
--- /dev/null
+++ b/view/tpl/settings_permcats.tpl
@@ -0,0 +1,64 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-tools-wrapper">
+ <div class="section-content-info-wrapper">
+ {{$desc}}
+ </div>
+
+ <form action="settings/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}}
+
+ <div class="settings-submit-wrapper form-group">
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </div>
+
+ <div class="panel">
+ <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>
+ <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>
+ </div>
+ </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="settings/permcats/{{$k}}">{{$k}}</a></td>
+ <td width="1%"><i class="fa fa-trash-o drop-icons" onClick="dropItem('/settings/permcats/{{$k}}/drop', '.permcat-row-{{$k}}')"></i></td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+ {{/if}}
+
+ </div>
+ </form>
+
+</div>
diff --git a/view/tpl/settings_tokens.tpl b/view/tpl/settings_tokens.tpl
new file mode 100644
index 000000000..48190c00c
--- /dev/null
+++ b/view/tpl/settings_tokens.tpl
@@ -0,0 +1,72 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ <div class="clear"></div>
+ </div>
+ <div class="section-content-tools-wrapper">
+ <div class="section-content-info-wrapper">
+ {{$desc}}
+ </div>
+
+ <form action="settings/tokens" id="settings-account-form" method="post" autocomplete="off" >
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ {{if $atoken}}<input type="hidden" name="atoken_id" value="{{$atoken.atoken_id}}" />{{/if}}
+ {{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">
+ <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>
+ <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>
+
+ <div class="settings-submit-wrapper" >
+ <button type="submit" name="submit" class="btn btn-primary">{{$submit}}</button>
+ </div>
+ </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="settings/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('/settings/tokens/{{$t.atoken_id}}/drop', '#atoken-index-{{$t.atoken_id}}')"></i></td>
+ </tr>
+ {{/foreach}}
+ </table>
+
+ </div>
+ {{/if}}
+</div>
diff --git a/view/tpl/sharedwithme.tpl b/view/tpl/sharedwithme.tpl
new file mode 100644
index 000000000..68bdd6faa
--- /dev/null
+++ b/view/tpl/sharedwithme.tpl
@@ -0,0 +1,26 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <a href="/sharedwithme/dropall" onclick="return confirmDelete();" class="btn btn-sm btn-outline-secondary pull-right"><i class="fa fa-trash-o"></i>&nbsp;{{$dropall}}</a>
+ <h2>{{$header}}</h2>
+ </div>
+ <div class="section-content-wrapper-np">
+ <table id="cloud-index">
+ <tr>
+ <th width="1%"></th>
+ <th width="92%">{{$name}}</th>
+ <th width="1%"></th>
+ <th width="1%" class="d-none d-md-table-cell">{{$size}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$lastmod}}</th>
+ </tr>
+ {{foreach $items as $item}}
+ <tr id="cloud-index-{{$item.id}}">
+ <td><i class="fa {{$item.objfiletypeclass}}" title="{{$item.objfiletype}}"></i></td>
+ <td><a href="{{$item.objurl}}">{{$item.objfilename}}</a>{{if $item.unseen}}&nbsp;<span class="label label-success">{{$label_new}}</span>{{/if}}</td>
+ <td class="cloud-index-tool"><a href="#" title="{{$drop}}" onclick="dropItem('/sharedwithme/{{$item.id}}/drop', '#cloud-index-{{$item.id}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a></td>
+ <td class="d-none d-md-table-cell">{{$item.objfilesize}}</td>
+ <td class="d-none d-md-table-cell">{{$item.objedited}}</td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+</div>
diff --git a/view/tpl/show_thing.tpl b/view/tpl/show_thing.tpl
new file mode 100644
index 000000000..d738c9fc9
--- /dev/null
+++ b/view/tpl/show_thing.tpl
@@ -0,0 +1,16 @@
+<h2>{{$header}}</h2>
+{{if $thing}}
+<div class="thing-show">
+{{if $thing.obj_imgurl}}<a href="{{$thing.obj_url}}" ><img src="{{$thing.obj_imgurl}}" width="175" height="175" alt="{{$thing.obj_term}}" /></a>{{/if}}
+<a href="{{$thing.obj_url}}" >{{$thing.obj_term}}</a>
+</div>
+{{if $canedit}}
+<div class="thing-edit-links">
+<a href="thing/edit/{{$thing.obj_obj}}" title="{{$edit}}" class="btn btn-outline-secondary" ><i class="fa fa-pencil thing-edit-icon"></i></a>
+<a href="thing/drop/{{$thing.obj_obj}}" onclick="return confirmDelete();" title="{{$delete}}" class="btn btn-outline-secondary" ><i class="fa fa-trash-o drop-icons"></i></a>
+</div>
+<div class="thing-edit-links-end"></div>
+{{/if}}
+
+{{/if}}
+
diff --git a/view/tpl/siteinfo.tpl b/view/tpl/siteinfo.tpl
new file mode 100755
index 000000000..a5b99fd83
--- /dev/null
+++ b/view/tpl/siteinfo.tpl
@@ -0,0 +1,41 @@
+<div class="generic-content-wrapper-styled">
+<h2>{{$title}}</h2>
+
+<h3>{{$sitenametxt}}</h3>
+
+<div>{{$sitename}}</div>
+
+<h3>{{$headline}}</h3>
+
+<div>{{if $site_about}}{{$site_about}}{{else}}--{{/if}}</div>
+
+<h3>{{$admin_headline}}</h3>
+
+<div>{{if $admin_about}}{{$admin_about}}{{else}}--{{/if}}</div>
+
+<br><br>
+<div><a href="help/TermsOfService">{{$terms}}</a></div>
+
+<hr>
+
+<h2>{{$prj_header}}</h2>
+
+<div>{{$prj_name}} ({{$z_server_role}})</div>
+
+{{if $prj_version}}
+<div>{{$prj_version}}</div>
+{{/if}}
+
+
+<h3>{{$prj_linktxt}}</h3>
+
+<div>{{$prj_link}}</div>
+
+<h3>{{$prj_srctxt}}</h3>
+
+<div>{{$prj_src}}</div>
+
+<br><br>
+<div>{{$prj_transport}} ({{$transport_link}})</div>
+
+</div>
diff --git a/view/tpl/sitesearch.tpl b/view/tpl/sitesearch.tpl
new file mode 100644
index 000000000..8dbf8cef5
--- /dev/null
+++ b/view/tpl/sitesearch.tpl
@@ -0,0 +1,5 @@
+<div class="widget saved-search-widget">
+ <h3 id="search">{{$title}}</h3>
+ {{$searchbox}}
+ <div class="clear"></div>
+</div>
diff --git a/view/tpl/sources_edit.tpl b/view/tpl/sources_edit.tpl
new file mode 100644
index 000000000..61f6e8cb0
--- /dev/null
+++ b/view/tpl/sources_edit.tpl
@@ -0,0 +1,24 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$title}}</h1>
+
+<div class="descriptive-text">{{$desc}}</div>
+
+<form action="sources" method="post">
+<input type="hidden" name="source" value="{{$id}}" />
+<input type="hidden" id="id_abook" name="abook" value="{{$abook}}" />
+{{include file="field_input.tpl" field=$name}}
+{{include file="field_input.tpl" field=$tags}}
+{{include file="field_textarea.tpl" field=$words}}
+
+<div class="sources-submit-wrapper" >
+<input type="submit" name="submit" class="sources-submit" value="{{$submit}}" />
+</div>
+</form>
+<br />
+<br />
+<a href="sources/{{$id}}/drop">{{$drop}}</a>
+</div>
+
+
+
+
diff --git a/view/tpl/sources_list.tpl b/view/tpl/sources_list.tpl
new file mode 100644
index 000000000..76be35b1a
--- /dev/null
+++ b/view/tpl/sources_list.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$title}}</h1>
+
+<div class="descriptive-text">{{$desc}}</div>
+
+<div class="sources-links">
+<a href="sources/new">{{$new}}</a>
+</div>
+
+{{if $sources}}
+<ul class="sources-list">
+{{foreach $sources as $source}}
+<li><a href="sources/{{$source.src_id}}">{{$source.xchan_name}}</a></li>
+{{/foreach}}
+</ul>
+{{/if}}
+</div>
diff --git a/view/tpl/sources_new.tpl b/view/tpl/sources_new.tpl
new file mode 100644
index 000000000..bbc22df84
--- /dev/null
+++ b/view/tpl/sources_new.tpl
@@ -0,0 +1,17 @@
+<div class="generic-content-wrapper-styled">
+<h1>{{$title}}</h1>
+
+<div class="descriptive-text">{{$desc}}</div>
+
+<form action="sources" method="post">
+<input type="hidden" id="id_abook" name="abook" value="{{$abook}}" />
+{{include file="field_input.tpl" field=$name}}
+{{include file="field_input.tpl" field=$tags}}
+{{include file="field_textarea.tpl" field=$words}}
+
+<div class="sources-submit-wrapper" >
+<input type="submit" name="submit" class="sources-submit" value="{{$submit}}" />
+</div>
+</form>
+</div>
+
diff --git a/view/tpl/suggest_friends.tpl b/view/tpl/suggest_friends.tpl
new file mode 100755
index 000000000..95f24cd63
--- /dev/null
+++ b/view/tpl/suggest_friends.tpl
@@ -0,0 +1,16 @@
+<div class="profile-match-wrapper">
+ <div class="profile-match-photo">
+ <a href="{{$entry.url}}">
+ <img src="{{$entry.photo}}" alt="{{$entry.name}}" width="80" height="80" title="{{$entry.name}} [{{$entry.profile}}]" />
+ </a>
+ </div>
+ <a href="{{$entry.ignlnk}}" title="{{$entry.ignore}}" class="profile-match-ignore" onclick="return confirmDelete();" ><i class="fa fa-times drop-icons btn btn-outline-secondary"></i></a>
+ <div class="profile-match-break"></div>
+ <div class="profile-match-name">
+ <a href="{{$entry.url}}" title="{{$entry.name}}">{{$entry.name}}</a>
+ </div>
+ <div class="profile-match-end"></div>
+ {{if $entry.connlnk}}
+ <div class="profile-match-connect btn btn-outline-secondary"><a href="{{$entry.connlnk}}" title="{{$entry.conntxt}}"><i class="fa fa-plus connect-icon"></i> {{$entry.conntxt}}</a></div>
+ {{/if}}
+</div>
diff --git a/view/tpl/suggest_page.tpl b/view/tpl/suggest_page.tpl
new file mode 100755
index 000000000..97837c852
--- /dev/null
+++ b/view/tpl/suggest_page.tpl
@@ -0,0 +1,9 @@
+<h3>{{$title}}</h3>
+
+{{if $entries}}
+{{foreach $entries as $child}}
+{{include file="suggest_friends.tpl" entry=$child}}
+{{/foreach}}
+{{/if}}
+
+<div class="clear"></div>
diff --git a/view/tpl/suggest_widget.tpl b/view/tpl/suggest_widget.tpl
new file mode 100644
index 000000000..7b9afa668
--- /dev/null
+++ b/view/tpl/suggest_widget.tpl
@@ -0,0 +1,10 @@
+<div class="widget suggestions-widget">
+<h3>{{$title}}</h3>
+{{if $entries}}
+{{foreach $entries as $child}}
+{{include file="suggest_friends.tpl" entry=$child}}
+{{/foreach}}
+{{/if}}
+<div class="clear"></div>
+<div class="suggest-widget-more"><a href="suggest">{{$more}}</a></div>
+</div>
diff --git a/view/tpl/thing_edit.tpl b/view/tpl/thing_edit.tpl
new file mode 100644
index 000000000..62a7c02c8
--- /dev/null
+++ b/view/tpl/thing_edit.tpl
@@ -0,0 +1,41 @@
+<h2>{{$thing_hdr}}</h2>
+<form id="thing-edit-form" action="thing" method="post" class="acl-form" data-form_id="thing-edit-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+<input type="hidden" name="term_hash" value="{{$thing_hash}}" />
+
+{{if $multiprof }}
+<div class="thing-profile-label">{{$profile_lbl}}</div>
+
+<div class="thing-profile">{{$profile_select}}</div>
+<div class="thing-field-end"></div>
+{{/if}}
+
+<div class="thing-verb-label">{{$verb_lbl}}</div>
+
+<div class="thing-verb">{{$verb_select}}</div>
+<div class="thing-field-end"></div>
+
+
+<label class="thing-label" for="thing-term">{{$thing_lbl}}</label>
+<input type="text" class="thing-input" id="thing-term" name="term" value="{{$thething}}" />
+<div class="thing-field-end"></div>
+<label class="thing-label" for="thing-url">{{$url_lbl}}</label>
+<input type="text" class="thing-input" id="thing-url" name="url" value="{{$theurl}}" />
+<div class="thing-field-end"></div>
+<label class="thing-label" for="thing-img">{{$img_lbl}}</label>
+<input type="text" class="thing-input" id="thing-img" name="img" value="{{$imgurl}}" />
+<div class="thing-field-end"></div>
+
+{{include file="field_checkbox.tpl" field=$activity}}
+
+<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;">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
+ </button>
+{{/if}}
+
+
+<input type="submit" class="thing-submit" name="submit" value="{{$submit}}" />
+</form>
+{{$aclselect}}
diff --git a/view/tpl/thing_input.tpl b/view/tpl/thing_input.tpl
new file mode 100644
index 000000000..90fb093e4
--- /dev/null
+++ b/view/tpl/thing_input.tpl
@@ -0,0 +1,41 @@
+<h2>{{$thing_hdr}}</h2>
+<form id="thing-new-form" action="thing" method="post" class="acl-form" data-form_id="thing-new-form" data-allow_cid='{{$allow_cid}}' data-allow_gid='{{$allow_gid}}' data-deny_cid='{{$deny_cid}}' data-deny_gid='{{$deny_gid}}'>
+
+{{if $multiprof }}
+<div class="thing-profile-label">{{$profile_lbl}}</div>
+
+<div class="thing-profile">{{$profile_select}}</div>
+<div class="thing-field-end"></div>
+{{/if}}
+
+
+<div class="thing-verb-label">{{$verb_lbl}}</div>
+
+<div class="thing-verb">{{$verb_select}}</div>
+<div class="thing-field-end"></div>
+
+
+<label class="thing-label" for="thing-term">{{$thing_lbl}}</label>
+<input type="text" class="thing-input" id="thing-term" name="term" />
+<div class="thing-field-end"></div>
+<label class="thing-label" for="thing-url">{{$url_lbl}}</label>
+<input type="text" class="thing-input" id="thing-url" name="url" />
+<div class="thing-field-end"></div>
+<label class="thing-label" for="thing-img">{{$img_lbl}}</label>
+<input type="text" class="thing-input" id="thing-img" name="img" />
+<div class="thing-field-end"></div>
+
+{{include file="field_checkbox.tpl" field=$activity}}
+
+<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;">
+ <i id="jot-perms-icon" class="fa fa-{{$lockstate}}"></i>
+ </button>
+{{/if}}
+
+
+<input type="submit" class="thing-submit" name="submit" value="{{$submit}}" />
+</form>
+{{$aclselect}}
diff --git a/view/tpl/threaded_conversation.tpl b/view/tpl/threaded_conversation.tpl
new file mode 100755
index 000000000..ea5c3c281
--- /dev/null
+++ b/view/tpl/threaded_conversation.tpl
@@ -0,0 +1,8 @@
+{{if $photo_item}}
+{{$photo_item}}
+{{/if}}
+{{foreach $threads as $thread_item}}
+{{include file="{{$thread_item.template}}" item=$thread_item}}
+{{/foreach}}
+
+<div id="conversation-end"></div>
diff --git a/view/tpl/toggle_mobile_footer.tpl b/view/tpl/toggle_mobile_footer.tpl
new file mode 100755
index 000000000..82c0197ba
--- /dev/null
+++ b/view/tpl/toggle_mobile_footer.tpl
@@ -0,0 +1,2 @@
+<a id="toggle_mobile_link" href="{{$toggle_link}}">{{$toggle_text}}</a>
+
diff --git a/view/tpl/uexport.tpl b/view/tpl/uexport.tpl
new file mode 100644
index 000000000..7eafd97a6
--- /dev/null
+++ b/view/tpl/uexport.tpl
@@ -0,0 +1,19 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <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>
+
+ </div>
+</div>
diff --git a/view/tpl/usermenu.tpl b/view/tpl/usermenu.tpl
new file mode 100644
index 000000000..c51728c34
--- /dev/null
+++ b/view/tpl/usermenu.tpl
@@ -0,0 +1,20 @@
+{{if $wrap}}
+<div id="pmenu-{{$id}}" class="pmenu{{if !$class}} widget{{else}} {{$class}}{{/if}}">
+{{/if}}
+ {{if $menu.menu_desc}}
+ <h3 class="pmenu-title">{{$menu.menu_desc}}{{if $edit}} <a href="mitem/{{$menu.menu_id}}" title="{{$edit}}"><i class="fa fa-pencil fakelink" title="{{$edit}}"></i></a>{{/if}}</h3>
+ {{/if}}
+ {{if $items}}
+ <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}}>{{$mitem.mitem_desc}}{{if $mitem.submenu}}<span class="caret"></span>{{/if}}</a>
+ {{if $mitem.submenu}}{{$mitem.submenu}}{{/if}}
+ </li>
+ {{/foreach }}
+ </ul>
+ {{/if}}
+{{if $wrap}}
+ <div class="pmenu-end"></div>
+</div>
+{{/if}}
diff --git a/view/tpl/viewcontact_template.tpl b/view/tpl/viewcontact_template.tpl
new file mode 100755
index 000000000..2b7144450
--- /dev/null
+++ b/view/tpl/viewcontact_template.tpl
@@ -0,0 +1,13 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+ <div class="section-content-wrapper clearfix">
+ {{foreach $contacts as $contact}}
+ {{include file="contact_template.tpl"}}
+ {{/foreach}}
+ <div id="page-end"></div>
+ </div>
+</div>
+<script>$(document).ready(function() { loadingPage = false;});</script>
+<div id="page-spinner"></div>
diff --git a/view/tpl/viewcontactsajax.tpl b/view/tpl/viewcontactsajax.tpl
new file mode 100644
index 000000000..68be228be
--- /dev/null
+++ b/view/tpl/viewcontactsajax.tpl
@@ -0,0 +1,3 @@
+{{foreach $contacts as $contact}}
+{{include file="contact_template.tpl"}}
+{{/foreach}}
diff --git a/view/tpl/webpage_export_list.tpl b/view/tpl/webpage_export_list.tpl
new file mode 100644
index 000000000..b22b3818a
--- /dev/null
+++ b/view/tpl/webpage_export_list.tpl
@@ -0,0 +1,124 @@
+<div class="generic-content-wrapper">
+ <form action="" method="post" autocomplete="on" >
+ <input type="hidden" name="action" value="{{$action}}">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <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">
+ <button id="toggle-select-all" class="btn btn-sm btn-primary" onclick="checkedAll(window.isChecked); return false;"><i class="fa fa-check"></i>&nbsp;Toggle Select All</button>
+ </div>
+ <div class="clear"></div>
+ <hr>
+ <!--<h4>Pages</h4>-->
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <thead>
+ <tr><th></th><th>Page Link</th><th>Page Title</th><th>Type</th></tr>
+ </thead>
+ {{foreach $pages as $page}}
+ <tr>
+ <td width="30px" style="padding-right: 20px;">
+ <div class='squaredThree'>
+ <input type="checkbox" id="page_{{$page.mid}}" name="page[]" value="{{$page.mid}}">
+ <label for="page_{{$page.mid}}"></label>
+ </div>
+ </td>
+ <td width="30%">
+ <div class="desc">
+ {{$page.pagetitle}}<br>
+ </div>
+ </td>
+ <td width="55%">
+ <div class='desc'>
+ {{$page.title}}<br>
+ </div>
+ </td>
+ <td width="15%">
+ <div class='desc'>
+ {{$page.mimetype}}<br>
+ </div>
+ </td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+ <hr>
+ <div class="clear"></div>
+ <!--<h4>Layouts</h4>-->
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <thead>
+ <tr><th width="20px"></th><th>Layout Name</th><th>Layout Description</th><th>Type</th></tr>
+ </thead>
+ {{foreach $layouts as $layout}}
+ <tr>
+ <td width="30px" style="padding-right: 20px;">
+ <div class='squaredThree'>
+ <input type="checkbox" id="layout_{{$layout.mid}}" name="layout[]" value="{{$layout.mid}}">
+ <label for="layout_{{$layout.mid}}"></label>
+ </div>
+ </td>
+ <td width="30%">
+ <div class="desc">
+ {{$layout.name}}<br>
+ </div>
+ </td>
+ <td width="55%">
+ <div class='desc'>
+ {{$layout.description}}<br>
+ </div>
+ </td>
+ <td width="15%">
+ <div class='desc'>
+ {{$layout.mimetype}}<br>
+ </div>
+ </td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+ <hr>
+ <div class="clear"></div>
+ <!--<h4>Blocks</h4>-->
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <thead>
+ <tr><th width="30px"></th><th>Block Name</th><th>Block Title</th><th>Type</th></tr>
+ </thead>
+ {{foreach $blocks as $block}}
+ <tr>
+ <td width="30px" style="padding-right: 20px;">
+ <div class='squaredThree'>
+ <input type="checkbox" id="block_{{$block.mid}}" name="block[]" value="{{$block.mid}}">
+ <label for="block_{{$block.mid}}"></label>
+ </div>
+ </td>
+ <td width="30%">
+ <div class="desc">
+ {{$block.name}}<br>
+ </div>
+ </td>
+ <td width="55%">
+ <div class='desc'>
+ {{$block.title}}<br>
+ </div>
+ </td>
+ <td width=15%">
+ <div class='desc'>
+ {{$block.mimetype}}<br>
+ </div>
+ </td>
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+
+ </div>
+ </form>
+</div>
+
diff --git a/view/tpl/webpage_import.tpl b/view/tpl/webpage_import.tpl
new file mode 100644
index 000000000..955288c1e
--- /dev/null
+++ b/view/tpl/webpage_import.tpl
@@ -0,0 +1,126 @@
+<div class="generic-content-wrapper">
+ <form action="" method="post" autocomplete="on" >
+ <input type="hidden" name="action" value="importselected">
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ <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">
+ <button id="toggle-select-all" class="btn btn-sm btn-primary" onclick="checkedAll(window.isChecked); return false;"><i class="fa fa-check"></i>&nbsp;Toggle Select All</button>
+ </div>
+ <div class="clear"></div>
+ <h4>Scanned Pages</h4>
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <tr><td>Import?</td><td>Page</td><!--<td>Existing Page</td>--></tr>
+ {{foreach $pages as $page}}
+ <tr>
+ <td>
+ <div class='squaredTwo'>
+ <input type="checkbox" id="page_{{$page.pagelink}}" name="page[]" value="{{$page.pagelink}}">
+ <label for="page_{{$page.pagelink}}"></label>
+ </div>
+ </td>
+ <td>
+ <div class='desc'>
+ Page Link: {{$page.pagelink}}<br>
+ Layout: {{$page.layout}}<br>
+ Title: {{$page.title}}<br>
+ Content File: {{$page.contentfile}}<br>
+ Type: {{$page.type}}<br>
+ </div>
+ </td>
+ <!-- TODO: Retrieve existing element information to avoid accidental overwriting
+ <td>
+ <div class='desc'>
+ Name: {{$page.curpage.pagelink}}<br>
+ Layout: {{$page.curpage.layout}}<br>
+ Title: {{$page.curpage.title}}<br>
+ Last edit: {{$page.curpage.edited}}<br>
+ Type: {{$page.curpage.type}}<br>
+ </div>
+ </td>
+ -->
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+
+
+ <h4>Scanned Layouts</h4>
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <tr><td>Import?</td><td>Layout</td><!--<td>Existing Layout</td>--></tr>
+ {{foreach $layouts as $layout}}
+ <tr>
+ <td>
+ <div class='squaredTwo'>
+ <input type="checkbox" id="layout_{{$layout.name}}" name="layout[]" value="{{$layout.name}}">
+ <label for="layout_{{$layout.name}}"></label>
+ </div>
+ </td>
+ <td>
+ <div class='desc'>
+ Name: {{$layout.name}}<br>
+ Description: {{$layout.description}}<br>
+ Content File: {{$layout.contentfile}}<br>
+ </div>
+ </td>
+ <!-- TODO: Retrieve existing element information to avoid accidental overwriting
+ <td>
+ <div class='desc'>
+ Name: {{$layout.curblock.name}}<br>
+ Title: {{$layout.curblock.description}}<br>
+ Last edit: {{$layout.curblock.edited}}<br>
+ </div>
+ </td>
+ -->
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+
+ <h4>Scanned Blocks</h4>
+ <div>
+ <table class="table-striped table-responsive table-hover" style="width: 100%;">
+ <tr><td>Import?</td><td>Block</td><!--<td>Existing Block</td>--></tr>
+ {{foreach $blocks as $block}}
+ <tr>
+ <td>
+ <div class='squaredTwo'>
+ <input type="checkbox" id="block_{{$block.name}}" name="block[]" value="{{$block.name}}">
+ <label for="block_{{$block.name}}"></label>
+ </div>
+ </td>
+ <td>
+ <div class='desc'>
+ Name: {{$block.name}}<br>
+ Title: {{$block.title}}<br>
+ Content File: {{$block.contentfile}}<br>
+ Type: {{$block.type}}<br>
+ </div>
+ </td>
+ <!-- TODO: Retrieve existing element information to avoid accidental overwriting
+ <td>
+ <div class='desc'>
+ Name: {{$block.curblock.name}}<br>
+ Title: {{$block.curblock.title}}<br>
+ Last edit: {{$block.curblock.edited}}<br>
+ Type: {{$block.curblock.type}}<br>
+ </div>
+ </td>
+ -->
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+
+ </div>
+ <div class="clear"></div>
+ </form>
+</div>
+
diff --git a/view/tpl/webpagelist.tpl b/view/tpl/webpagelist.tpl
new file mode 100644
index 000000000..fcf9de75a
--- /dev/null
+++ b/view/tpl/webpagelist.tpl
@@ -0,0 +1,76 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $editor}}
+ <div class="pull-right">
+ <button id="webpage-create-btn" class="btn btn-sm btn-success acl-form-trigger" onclick="openClose('webpage-editor');" data-form_id="profile-jot-form"><i class="fa fa-pencil-square-o"></i>&nbsp;{{$create}}</button>
+ </div>
+ {{/if}}
+ <h2>{{$listtitle}}</h2>
+ <div class="clear"></div>
+ </div>
+ {{if $editor}}
+ <div id="webpage-editor" class="section-content-tools-wrapper">
+ {{$editor}}
+ </div>
+ {{/if}}
+ {{if $pages}}
+ <div id="pagelist-content-wrapper" class="section-content-wrapper-np">
+ <table id="webpage-list-table">
+ <tr>
+ <th width="1%">{{$pagelink_txt}}</th>
+ <th width="95%">{{$title_txt}}</th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%"></th>
+ <th width="1%" class="d-none d-md-table-cell">{{$created_txt}}</th>
+ <th width="1%" class="d-none d-md-table-cell">{{$edited_txt}}</th>
+ </tr>
+ {{foreach $pages as $key => $items}}
+ {{foreach $items as $item}}
+ <tr id="webpage-list-item-{{$item.url}}">
+ <td>
+ {{if $view}}
+ <a href="page/{{$channel}}/{{$item.pagetitle}}" title="{{$view}}">{{$item.pagetitle}}</a>
+ {{else}}
+ {{$item.pagetitle}}
+ {{/if}}
+ </td>
+ <td>
+ {{$item.title}}
+ </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>
+ <ul id="panel-{{$item.url}}" class="lockview-panel dropdown-menu"></ul>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="{{$baseurl}}/{{$item.url}}" title="{{$edit}}"><i class="fa fa-pencil"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $item.bb_element}}
+ <a href="rpost?attachment={{$item.bb_element}}" title="{{$share}}"><i class="fa fa-share-square-o"></i></a>
+ {{/if}}
+ </td>
+ <td class="webpage-list-tool">
+ {{if $edit}}
+ <a href="#" title="{{$delete}}" onclick="dropItem('item/drop/{{$item.url}}', '#webpage-list-item-{{$item.url}}'); return false;"><i class="fa fa-trash-o drop-icons"></i></a>
+ {{/if}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.created}}
+ </td>
+ <td class="d-none d-md-table-cell">
+ {{$item.edited}}
+ </td>
+ </tr>
+ {{/foreach}}
+ {{/foreach}}
+ </table>
+ </div>
+ {{/if}}
+ <div class="clear"></div>
+</div>
diff --git a/view/tpl/website_portation_tools.tpl b/view/tpl/website_portation_tools.tpl
new file mode 100644
index 000000000..0d131cb17
--- /dev/null
+++ b/view/tpl/website_portation_tools.tpl
@@ -0,0 +1,60 @@
+<div id="website-portation-tools" class="widget">
+ <div class="nav nav-pills flex-column">
+ <a class="nav-link" href="#" onclick="openClose('import-form'); return false;"><i class="fa fa-cloud-upload generic-icons"></i> {{$import_label}}</a>
+ <div id="import-form" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <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">
+ <input class="form-control" type="text" name="path" title="{{$hint}}" placeholder="{{$desc}}" />
+ </div>
+ <div class="form-group">
+ <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">
+ <input class="form-control-file w-100" type="file" name="zip_file" />
+ </div>
+ <div class="form-group">
+ <button class="btn btn-primary btn-sm" type="submit" name="w_upload" value="w_upload">Submit</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+ <div class="nav nav-pills flex-column">
+ <a class="nav-link" href="#" onclick="openClose('export-form'); openClose('export-cloud-form'); return false;"><i class="fa fa-share-square-o generic-icons"></i> {{$export_label}}</a>
+ <div id="export-form" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <form enctype="multipart/form-data" method="post" action="">
+ <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">
+ <input class="form-control" type="text" name="zipfilename" title="{{$filename_hint}}" placeholder="{{$filename_desc}}" value="" />
+ </div>
+ <div class="form-group">
+ <button class="btn btn-primary btn-sm" type="submit" name="w_download" value="w_download">Submit</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ <div id="export-cloud-form" class="sub-menu-wrapper">
+ <div class="sub-menu">
+ <form enctype="multipart/form-data" method="post" action="">
+ <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">
+ <input class="form-control" type="text" name="exportcloudpath" title="{{$cloud_export_hint}}" placeholder="{{$cloud_export_desc}}" />
+ </div>
+ <div class="form-group">
+ <button class="btn btn-primary btn-sm" type="submit" name="exportcloudsubmit" value="{{$cloud_export_select}}">Submit</button>
+ </div>
+ </form>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl
new file mode 100644
index 000000000..564db3324
--- /dev/null
+++ b/view/tpl/wiki.tpl
@@ -0,0 +1,469 @@
+<div class="generic-content-wrapper" {{if $hideEditor}}style="display: none;"{{/if}}>
+ <div class="section-title-wrapper">
+ <div class="pull-right">
+ {{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">
+ <i class="fa fa-cog"></i>&nbsp;{{$tools_label}}
+ </button>
+ <div class="dropdown-menu dropdown-menu-right">
+ {{if $renamePage}}
+ <a class="dropdown-item rename-page" href="#"><i class="fa fa-fw fa-edit"></i>&nbsp;{{$renamePage}}</a>
+ {{/if}}
+ <a id="embed-image" class="dropdown-item" href="#"><i class="fa fa-fw fa-picture-o"></i>&nbsp;Embed Image</a>
+ </div>
+ </div>
+ {{/if}}
+ <button id="fullscreen-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(); adjustFullscreenEditorHeight();"><i class="fa fa-expand"></i></button>
+ <button id="inline-btn" type="button" class="btn btn-outline-secondary btn-sm" onclick="makeFullScreen(false); adjustInlineEditorHeight()"><i class="fa fa-compress"></i></button>
+ </div>
+ <h2>
+ <span id="wiki-header-name">{{$wikiheaderName}}</span>:
+ <span id="wiki-header-page">{{$wikiheaderPage}}</span>
+ </h2>
+ <div class="clear"></div>
+ </div>
+ <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">
+ <button id="rename-page-submit" class="btn btn-primary" type="submit" name="submit">Submit</button>
+ </div>
+ <div>
+ <button class="btn btn-outline-secondary rename-page" type="button">Cancel</button>
+ </div>
+ <div class="clear"></div>
+ </div>
+ </form>
+ </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</a></li>
+ <li class="nav-item"><a class="nav-link" data-toggle="tab" href="#page-history-pane" id="wiki-get-history">History</a></li>
+ </ul>
+ <div class="tab-content" id="wiki-page-tabs">
+ <div id="edit-pane" class="tab-pane">
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ <div id="ace-editor"></div>
+ {{else}}
+ <div id="editor-wrapper">
+ <textarea id="editor">{{$content}}</textarea>
+ </div>
+ {{/if}}
+ {{if $showPageControls}}
+ <div>
+ <div id="id_{{$commitMsg.0}}_wrapper" class="field input">
+ <div class="input-group">
+ <input class="form-control form-control-sm" name="{{$commitMsg.0}}" id="id_{{$commitMsg.0}}" type="text" value="{{$commitMsg.2}}"{{if $commitMsg.5}} {{$commitMsg.5}}{{/if}}>
+ <div class="input-group-btn">
+ <button id="save-page" type="button" class="btn btn-primary disabled">Save</button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {{/if}}
+ </div>
+ <div id="preview-pane" class="tab-pane active">
+ <div id="wiki-preview">
+ {{$renderedContent}}
+ </div>
+ </div>
+ <div id="page-history-pane" class="tab-pane">
+ <div id="page-history-list"></div>
+ </div>
+ </div>
+ </div>
+</div>
+
+{{$wikiModal}}
+
+<div class="modal" id="embedPhotoModal" tabindex="-1" role="dialog" aria-labelledby="embedPhotoLabel" aria-hidden="true">
+ <div class="modal-dialog">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h4 class="modal-title" id="embedPhotoModalLabel">{{$embedPhotosModalTitle}}</h4>
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+ </div>
+ <div class="modal-body" id="embedPhotoModalBody" >
+ <div id="embedPhotoModalBodyAlbumListDialog" class="d-none">
+ <div id="embedPhotoModalBodyAlbumList"></div>
+ </div>
+ <div id="embedPhotoModalBodyAlbumDialog" class="d-none"></div>
+ </div>
+ <div class="modal-footer">
+ <button type="button" class="btn btn-outline-secondary" data-dismiss="modal">{{$embedPhotosModalCancel}}</button>
+ <button id="embed-photo-OKButton" type="button" class="btn btn-primary">{{$embedPhotosModalOK}}</button>
+ </div>
+ </div><!-- /.modal-content -->
+ </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+
+<script>
+ window.wiki_resource_id = '{{$resource_id}}';
+ window.wiki_page_name = '{{$page}}';
+ window.wiki_page_content = '{{$content|escape:'javascript'}}';
+ window.wiki_page_commit = '{{$commit}}';
+
+ $("#generic-modal-ok-{{$wikiModalID}}").removeClass('btn-primary');
+ $("#generic-modal-ok-{{$wikiModalID}}").addClass('btn-danger');
+
+ $('.rename-page').click(function (ev) {
+ $('#rename-page-form-wrapper').toggle();
+ ev.preventDefault();
+ });
+
+ $( "#rename-page-form" ).submit(function( event ) {
+ $.post("wiki/{{$channel}}/rename/page",
+ {
+ 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();
+ window.console.log('data: ' + JSON.stringify(data));
+ window.wiki_page_name = data.name.urlName;
+ $('#wiki-header-page').html(data.name.htmlName);
+ wiki_refresh_page_list();
+ } else {
+ window.console.log('Error renaming page.');
+ }
+ }, 'json');
+ event.preventDefault();
+ });
+
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ var editor = ace.edit("ace-editor");
+ editor.setOptions({
+ theme: "ace/theme/github",
+ mode: "ace/mode/markdown",
+
+ maxLines: Infinity,
+ minLines: 30,
+
+ wrap: true,
+
+ printMargin: false
+ });
+
+ editor.getSession().setValue(window.wiki_page_content);
+ window.editor = editor; // Store the editor in the window object so the anonymous function can use it.
+ {{else}}
+ window.editor = editor = $('#editor');
+ {{/if}}
+
+ {{if !$showPageControls}}
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ editor.setReadOnly(true); // Disable editing if the viewer lacks edit permission
+ {{else}}
+ editor.prop('readonly', true);
+ {{/if}}
+ {{/if}}
+
+ $('#edit-pane-tab').click(function (ev) {
+ setTimeout(function() {
+ window.editor.focus();
+ if($('main').hasClass('fullscreen')) {
+ adjustFullscreenEditorHeight();
+ }
+ else {
+ adjustInlineEditorHeight();
+ }
+ }, 500); // Return the focus to the editor allowing immediate text entry
+ $('#page-tools').show();
+ });
+
+ $('#wiki-get-preview').click(function (ev) {
+ $.post("wiki/{{$channel}}/preview", {
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ content: editor.getValue(),
+ {{else}}
+ content: editor.val(),
+ {{/if}}
+ resource_id: window.wiki_resource_id
+ },
+ function (data) {
+ if (data.success) {
+ $('#wiki-preview').html(data.html);
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ $("#wiki-toc").toc({content: "#wiki-preview", headings: "h1,h2,h3,h4"});
+ {{/if}}
+ $('#page-tools').hide();
+ } else {
+ window.console.log('Error previewing page.');
+ }
+ }, 'json');
+ ev.preventDefault();
+ });
+
+ $('#wiki-get-history').click(function (ev) {
+ $.post("wiki/{{$channel}}/history/page", {name: window.wiki_page_name, resource_id: window.wiki_resource_id}, function (data) {
+ if (data.success) {
+ $('#page-history-list').html(data.historyHTML);
+ $('#page-tools').hide();
+ } else {
+ window.console.log('Error getting page history.');
+ }
+ }, 'json');
+ ev.preventDefault();
+ });
+
+ function wiki_refresh_page_list() {
+ if (window.wiki_resource_id === '') {
+ return false;
+ }
+ $.post("wiki/{{$channel}}/get/page/list/", {resource_id: window.wiki_resource_id}, function (data) {
+ if (data.success) {
+ $('#wiki_page_list_container').html(data.pages);
+ $('#wiki_page_list_container').show();
+ } else {
+ alert('Error fetching page list!');
+ window.console.log('Error fetching page list!');
+ }
+ }, 'json');
+ return false;
+ }
+
+ $('#save-page').click(function (ev) {
+ if (window.wiki_resource_id === '' || window.wiki_page_name === '') {
+ window.console.log('You must have a wiki page open in order to edit pages.');
+ ev.preventDefault();
+ return false;
+ }
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ var currentContent = editor.getValue();
+ {{else}}
+ var currentContent = editor.val();
+ {{/if}}
+
+ if (window.wiki_page_content === currentContent) {
+ $('#save-page').addClass('disabled'); // Disable the save button
+ window.console.log('No edits to save.');
+ ev.preventDefault();
+ return false;
+ }
+ $.post("wiki/{{$channel}}/save/page", {
+ content: currentContent,
+ commitMsg: $('#id_commitMsg').val(),
+ name: window.wiki_page_name,
+ resource_id: window.wiki_resource_id
+ },
+ function (data) {
+ if (data.success) {
+ window.console.log('Page saved successfully.');
+ window.wiki_page_content = currentContent;
+ $('#id_commitMsg').val(''); // Clear the commit message box
+ $('#save-page').addClass('disabled'); // Disable the save button
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ window.editor.getSession().getUndoManager().markClean(); // Reset the undo history for the editor
+ {{/if}}
+
+ 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
+ window.console.log('Error saving page.');
+ }
+ }, 'json');
+ ev.preventDefault();
+ });
+
+ function wiki_revert_page(commitHash) {
+ if (window.wiki_resource_id === '' || window.wiki_page_name === '') {
+ window.console.log('You must have a wiki page open in order to revert pages.');
+ return false;
+ }
+ $.post("wiki/{{$channel}}/revert/page", {commitHash: commitHash, name: window.wiki_page_name, resource_id: window.wiki_resource_id},
+ function (data) {
+ if (data.success) {
+ $('button[id^=revert-]').removeClass('btn-success');
+ $('button[id^=revert-]').addClass('btn-danger');
+ $('button[id^=revert-]').html('Revert');
+ $('#revert-'+commitHash).removeClass('btn-danger');
+ $('#revert-'+commitHash).addClass('btn-success');
+ $('#revert-'+commitHash).html('Page reverted<br>but not saved');
+ window.wiki_page_commit = commitHash;
+ // put contents in editor
+ editor.getSession().setValue(data.content);
+ } else {
+ window.console.log('Error reverting page.');
+ }
+ }, 'json');
+ }
+
+ function wiki_compare_page(compareCommit) {
+ if (window.wiki_resource_id === '' || window.wiki_page_name === '' || window.wiki_page_commit === '') {
+ window.console.log('You must have a wiki page open in order to revert pages.');
+ return false;
+ }
+ $.post("wiki/{{$channel}}/compare/page", {
+ 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) {
+ var modalBody = $('#generic-modal-body-{{$wikiModalID}}');
+ modalBody.html('<div class="descriptive-text">'+data.diff+'</div>');
+ $('.modal-dialog').addClass('modal-lg');
+ $("#generic-modal-ok-{{$wikiModalID}}").off('click');
+ $("#generic-modal-ok-{{$wikiModalID}}").click(function () {
+ wiki_revert_page(compareCommit);
+ $('#generic-modal-{{$wikiModalID}}').modal('hide');
+ });
+ $('#generic-modal-{{$wikiModalID}}').modal();
+ } else {
+ window.console.log('Error comparing page.');
+ }
+ }, 'json');
+ }
+
+ function adjustFullscreenEditorHeight() {
+ $('#editor, #ace-editor').height($(window).height() - $('#id_commitMsg_wrapper').outerHeight(true) - $('.section-title-wrapper').outerHeight(true) - $('#wiki-nav-tabs').outerHeight(true) - 17);
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ editor.setOptions({
+ maxLines: null,
+ minLines: null
+ });
+ editor.resize();
+ {{/if}}
+ }
+
+ function adjustInlineEditorHeight() {
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ editor.setOptions({
+ maxLines: Infinity,
+ minLines: 30
+ });
+ editor.resize();
+ {{else}}
+ editor.height(editor[0].scrollHeight);
+ {{/if}}
+ }
+
+ $('#embed-image').click(function (ev) {
+ initializeEmbedPhotoDialog();
+ ev.preventDefault();
+ });
+
+ var initializeEmbedPhotoDialog = function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ $(this).removeClass('embed-photo-selected-photo');
+ });
+ getPhotoAlbumList();
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal();
+ };
+
+ var choosePhotoFromAlbum = function (album) {
+ $.post("embedphotos/album", {name: album},
+ function(data) {
+ if (data['status']) {
+ $('#embedPhotoModalLabel').html("{{$modalchooseimages}}");
+ $('#embedPhotoModalBodyAlbumDialog').html('\
+ <div><ul class="nav nav-pills flex-column">\n\
+ <li class="nav-item"><a class="nav-link" href="#" onclick="initializeEmbedPhotoDialog();return false;">\n\
+ <i class="fa fa-chevron-left"></i>&nbsp;\n\
+ {{$modaldiffalbum}}\n\
+ </a>\n\
+ </li>\n\
+ </ul><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');
+ }
+ });
+ $('#embedPhotoModalBodyAlbumListDialog').addClass('d-none');
+ $('#embedPhotoModalBodyAlbumDialog').removeClass('d-none');
+ $('#embed-photo-OKButton').click(function () {
+ $('.embed-photo-selected-photo').each(function (index) {
+ var href = $(this).attr('href');
+ $.post("embedphotos/photolink", {href: href},
+ function(ddata) {
+ if (ddata['status']) {
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ var imgURL = ddata['photolink'].replace( /\[.*\]\[.*\](.*)\[.*\]\[.*\]/, '\n![image]($1)' )
+ editor.getSession().insert(editor.getCursorPosition(), imgURL)
+ {{else}}
+ var currentContent = $('#editor').val();
+ $('#editor').val(currentContent + ddata['photolink']);
+ {{/if}}
+ } else {
+ window.console.log("{{$modalerrorlink}}" + ':' + ddata['errormsg']);
+ }
+ return false;
+ },
+ 'json');
+ });
+ $('#embedPhotoModalBodyAlbumDialog').html('');
+ $('#embedPhotoModalBodyAlbumDialog').off('click');
+ $('#embedPhotoModal').modal('hide');
+ });
+ } 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');
+ };
+
+ $(document).ready(function () {
+ wiki_refresh_page_list();
+
+ {{if !$mimeType || $mimeType == 'text/markdown'}}
+ $("#wiki-toc").toc({content: "#wiki-preview", headings: "h1,h2,h3,h4"});
+ window.editor.on("input", function() {
+ if(window.editor.getSession().getUndoManager().isClean()) {
+ $('#save-page').addClass('disabled');
+ } else {
+ $('#save-page').removeClass('disabled');
+ }
+ });
+ {{else}}
+ window.editor.on("input", function() {
+ $('#save-page').removeClass('disabled');
+ });
+ window.editor.bbco_autocomplete('bbcode');
+ {{/if}}
+ });
+
+ $(window).resize(function () {
+ if($('main').hasClass('fullscreen')) {
+ adjustFullscreenEditorHeight();
+ }
+ });
+</script>
diff --git a/view/tpl/wiki_page_history.tpl b/view/tpl/wiki_page_history.tpl
new file mode 100644
index 000000000..9e5ba0f9c
--- /dev/null
+++ b/view/tpl/wiki_page_history.tpl
@@ -0,0 +1,59 @@
+<style>
+ .diff {
+ width:100%;
+ word-break: break-all;
+ }
+
+ .diff td{
+ padding:0 0.667em;
+ vertical-align:top;
+ white-space:pre;
+ white-space:pre-wrap;
+ font-family:Consolas,'Courier New',Courier,monospace;
+ font-size:1.0em;
+ line-height:1.333;
+ }
+
+ .diff span{
+ display:block;
+ min-height:1.333em;
+ margin-top:-1px;
+ padding:0 3px;
+ }
+
+ * html .diff span{
+ height:1.333em;
+ }
+
+ .diff span:first-child{
+ margin-top:0;
+ }
+
+ .diffDeleted span{
+ border:1px solid rgb(255,192,192);
+ background:rgb(255,224,224);
+ }
+
+ .diffInserted span{
+ border:1px solid rgb(192,255,192);
+ background:rgb(224,255,224);
+ }
+</style>
+<table class="table-striped table-responsive table-hover" style="width: 100%;">
+ {{foreach $pageHistory as $commit}}
+ <tr><td>
+ <table id="rev-{{$commit.hash}}" onclick="$('#details-{{$commit.hash}}').show()" width="100%">
+ <tr><td width="10%">Date</td><td width="70%">{{$commit.date}}</td>
+ <td rowspan="3" width="20%" align="right">
+ {{if $permsWrite}}
+ <button id="revert-{{$commit.hash}}" class="btn btn-danger btn-sm" onclick="wiki_revert_page('{{$commit.hash}}')">Revert</button>
+ <br><br>
+ {{/if}}
+ <button id="compare-{{$commit.hash}}" class="btn btn-warning btn-sm" onclick="wiki_compare_page('{{$commit.hash}}')">Compare</button>
+ </td></tr>
+ <tr><td>Name</td><td>{{$commit.name}} &lt;{{$commit.email}}&gt;</td></tr>
+ <tr><td>Message</td><td>{{$commit.title}}</td></tr>
+ </table>
+ </td></tr>
+ {{/foreach}}
+</table>
diff --git a/view/tpl/wiki_page_list.tpl b/view/tpl/wiki_page_list.tpl
new file mode 100644
index 000000000..44fba15cc
--- /dev/null
+++ b/view/tpl/wiki_page_list.tpl
@@ -0,0 +1,76 @@
+{{if $not_refresh}}<div id="wiki_page_list_container" {{if $hide}} style="display: none;" {{/if}}>{{/if}}
+<div id="wiki_page_list" class="widget" >
+ <h3>{{$header}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{if $pages}}
+ {{foreach $pages as $page}}
+ <li class="nav-item nav-item-hack" id="{{$page.link_id}}">
+ {{if $page.resource_id && $candel}}
+ <i class="nav-link widget-nav-pills-icons fa fa-trash-o drop-icons" onclick="wiki_delete_page('{{$page.title}}', '{{$page.url}}', '{{$page.resource_id}}', '{{$page.link_id}}')"></i>
+ {{/if}}
+ <a class="nav-link" href="/wiki/{{$channel}}/{{$wikiname}}/{{$page.url}}">{{$page.title}}</a>
+ </li>
+ {{/foreach}}
+ {{/if}}
+ {{if $canadd}}
+ <li class="nav-item"><a class="nav-link" href="#" onclick="wiki_show_new_page_form(); return false;"><i class="fa fa-plus-circle"></i>&nbsp;{{$addnew}}</a></li>
+ {{/if}}
+ </ul>
+ {{if $canadd}}
+ <div id="new-page-form-wrapper" class="sub-menu" style="display:none;">
+ <form id="new-page-form" action="wiki/{{$channel}}/create/page" method="post" >
+ <input type="hidden" name="resource_id" value="{{$resource_id}}">
+ {{include file="field_input.tpl" field=$pageName}}
+ <button id="new-page-submit" class="btn btn-primary" type="submit" name="submit" >Submit</button>
+ </form>
+ </div>
+ {{/if}}
+</div>
+{{if $not_refresh}}</div>{{/if}}
+
+<script>
+ $('#new-page-submit').click(function (ev) {
+ $.post("wiki/{{$channel}}/create/page", {pageName: $('#id_pageName').val(), resource_id: window.wiki_resource_id},
+ function(data) {
+ if(data.success) {
+ window.location = data.url;
+ } else {
+ window.console.log('Error creating page.');
+ }
+ }, 'json');
+ ev.preventDefault();
+ });
+
+ function wiki_delete_page(wiki_page_name, wiki_page_url, wiki_resource_id, wiki_link_id) {
+ if(!confirm('Are you sure you want to delete the page: ' + wiki_page_name)) {
+ return;
+ }
+ $.post("wiki/{{$channel}}/delete/page", {name: wiki_page_url, resource_id: wiki_resource_id},
+ function (data) {
+ if (data.success) {
+ window.console.log('Page deleted successfully.');
+ if(wiki_page_url == window.wiki_page_name) {
+ var url = window.location.href;
+ if(url.substr(-1) == '/')
+ url = url.substr(0, url.length - 2);
+ url = url.split('/');
+ url.pop();
+ window.location = url.join('/');
+ }
+ else {
+ $('#' + wiki_link_id).remove();
+ }
+ } else {
+ alert('Error deleting page.'); // TODO: Replace alerts with auto-timeout popups
+ window.console.log('Error deleting page.');
+ }
+ }, 'json');
+ return false;
+ }
+
+ function wiki_show_new_page_form() {
+ $('#new-page-form-wrapper').toggle();
+ $('#id_pageName').focus();
+ return false;
+ }
+</script>
diff --git a/view/tpl/wikilist.tpl b/view/tpl/wikilist.tpl
new file mode 100644
index 000000000..760cf41b9
--- /dev/null
+++ b/view/tpl/wikilist.tpl
@@ -0,0 +1,78 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ {{if $owner}}
+ <button type="button" class="btn btn-success btn-sm pull-right acl-form-trigger" onclick="openClose('new-wiki-form-wrapper');" data-form_id="new-wiki-form"><i class="fa fa-plus-circle"></i>&nbsp;{{$create}}</button>
+ {{/if}}
+ <h2>{{$header}}</h2>
+ </div>
+ {{if $owner}}
+ <div id="new-wiki-form-wrapper" class="section-content-tools-wrapper">
+ <form id="new-wiki-form" action="wiki/{{$channel}}/create/wiki" method="post" class="acl-form" data-form_id="new-wiki-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=$wikiName}}
+ {{include file="field_select.tpl" field=$mimeType}}
+ {{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;">
+ <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>
+ </div>
+ </div>
+ </form>
+ {{$acl}}
+ <div class="clear"></div>
+ </div>
+ {{/if}}
+ <div class="section-content-wrapper-np">
+ <table id="wikis-index">
+ <tr>
+ <th width="96%">{{$name}}</th>
+ <th width="1%">{{$type}}</th>
+ <th width="1%" class="wikis-index-tool"></th>
+ <!-- th width="1%" class="wikis-index-tool"></th -->
+ {{if $owner}}
+ <th width="1%"></th>
+ {{/if}}
+ </tr>
+ {{foreach $wikis as $wiki}}
+ <tr class="wikis-index-row">
+ <td><a href="/wiki/{{$channel}}/{{$wiki.urlName}}/Home" title="{{$view}}"{{if $wiki.active}} class="active"{{/if}}>{{$wiki.title}}</a></td>
+ <td>{{$wiki.mimeType}}</td>
+ <td class="wiki-index-tool dropdown">
+ {{if $wiki.lock}}
+ <i class="fa fa-lock lockview" data-toggle="dropdown" onclick="lockview('item',{{$wiki.id}});"></i></button>
+ <ul id="panel-{{$wiki.id}}" class="lockview-panel dropdown-menu dropdown-menu-right"></ul>
+ {{/if}}
+ </td>
+ <!-- td class="wiki-index-tool"><i class="fa fa-download fakelink" onclick="wiki_download_wiki('{{$wiki.resource_id}}'); return false;"></i></td -->
+ {{if $owner}}
+ <td><i class="fa fa-trash-o drop-icons" onclick="wiki_delete_wiki('{{$wiki.title}}', '{{$wiki.resource_id}}'); return false;"></i></td>
+ {{/if}}
+ </tr>
+ {{/foreach}}
+ </table>
+ </div>
+</div>
+<script>
+ {{if $owner}}
+ function wiki_delete_wiki(wikiHtmlName, resource_id) {
+ if(!confirm('Are you sure you want to delete the entire wiki: ' + JSON.stringify(wikiHtmlName))) {
+ return;
+ }
+ $.post("wiki/{{$channel}}/delete/wiki", {resource_id: resource_id}, function (data) {
+ if (data.success) {
+ window.console.log('Wiki deleted');
+ // Refresh list and redirect page as necessary
+ window.location = 'wiki/{{$channel}}';
+ } else {
+ alert('Error deleting wiki!');
+ window.console.log('Error deleting wiki.');
+ }
+ }, 'json');
+ }
+ {{/if}}
+ function wiki_download_wiki(resource_id) {
+ window.location = "wiki/{{$channel}}/download/wiki/" + resource_id;
+ }
+</script>
diff --git a/view/tpl/wikilist_widget.tpl b/view/tpl/wikilist_widget.tpl
new file mode 100644
index 000000000..9853f9850
--- /dev/null
+++ b/view/tpl/wikilist_widget.tpl
@@ -0,0 +1,8 @@
+<div id="wiki_list" class="widget">
+ <h3>{{$header}}</h3>
+ <ul class="nav nav-pills flex-column">
+ {{foreach $wikis as $wiki}}
+ <li class="nav-item"><a class="nav-link" href="/wiki/{{$channel}}/{{$wiki.urlName}}/Home" title="{{$view}}">{{$wiki.title}}</a></li>
+ {{/foreach}}
+ </ul>
+</div>
diff --git a/view/tpl/write_pages.tpl b/view/tpl/write_pages.tpl
new file mode 100644
index 000000000..53146ee30
--- /dev/null
+++ b/view/tpl/write_pages.tpl
@@ -0,0 +1,3 @@
+<div id="write-pages" class="bigwidget">
+<span id="wp-new"><a href="{{$newurl}}">{{$new}}</a></span> <span id="wp-edit"><a href="{{$editurl}}">{{$edit}}</a></span>
+</div>
diff --git a/view/tpl/xchan_vcard.tpl b/view/tpl/xchan_vcard.tpl
new file mode 100755
index 000000000..ac796cd47
--- /dev/null
+++ b/view/tpl/xchan_vcard.tpl
@@ -0,0 +1,10 @@
+<div id="vcard" class="vcard h-card">
+<div id="profile-photo-wrapper"><a href="{{$link}}"><img class="vcard-photo photo u-photo" src="{{$photo}}" alt="{{$name}}" /></a></div>
+{{if $connect}}
+<div class="connect-btn-wrapper"><a href="follow?f=&url={{$follow}}" class="btn btn-block btn-success btn-sm"><i class="fa fa-plus"></i> {{$connect}}</a></div>
+{{/if}}
+<div class="fn p-name">{{$name}}</div>
+</div>
+
+
+
diff --git a/view/tpl/xrd_diaspora.tpl b/view/tpl/xrd_diaspora.tpl
new file mode 100644
index 000000000..aa0d8c740
--- /dev/null
+++ b/view/tpl/xrd_diaspora.tpl
@@ -0,0 +1,3 @@
+ <Link rel="http://joindiaspora.com/seed_location" type="text/html" href="{{$baseurl}}/" />
+ <Link rel="http://joindiaspora.com/guid" type="text/html" href="{{$dspr_guid}}" />
+ <Link rel="diaspora-public-key" type="RSA" href="{{$dspr_key}}" />
diff --git a/view/tpl/xrd_host.tpl b/view/tpl/xrd_host.tpl
new file mode 100755
index 000000000..2a40dcf47
--- /dev/null
+++ b/view/tpl/xrd_host.tpl
@@ -0,0 +1,11 @@
+<?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>
diff --git a/view/tpl/xrd_person.tpl b/view/tpl/xrd_person.tpl
new file mode 100755
index 000000000..93fdcb1df
--- /dev/null
+++ b/view/tpl/xrd_person.tpl
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
+
+ <Subject>{{$accturi}}</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}}" />
+
+ {{$dspr}}
+
+</XRD>
diff --git a/view/tpl/zcard.tpl b/view/tpl/zcard.tpl
new file mode 100644
index 000000000..908f07631
--- /dev/null
+++ b/view/tpl/zcard.tpl
@@ -0,0 +1,144 @@
+<style>
+{{if $size == 'hz_large'}}
+.hz_card {
+/* -moz-transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}});
+ transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}}); */
+ font-family: sans-serif, arial, freesans;
+}
+.hz_cover_photo {
+ max-width: 100%;
+}
+.hz_profile_photo {
+ position: relative;
+ top: -300px;
+ left: 30px;
+ background-color: white;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 10px;
+ width: 320px;
+ height: 320px;
+}
+
+.hz_name {
+ position: relative;
+ top: -100px;
+ left: 400px;
+ color: #fff;
+ font-size: 48px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+.hz_addr {
+ position: relative;
+ top: -110px;
+ left: 400px;
+ color: #fff;
+ font-size: 24px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+{{elseif $size == 'hz_medium'}}
+.hz_card {
+/* -moz-transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}});
+ transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}}); */
+ font-family: sans-serif, arial, freesans;
+ width: 100%;
+ overflow: hidden;
+ height: 390px;
+}
+.hz_cover_photo img {
+ width: {{$maxwidth}}px;
+/* max-width: 100%; */
+}
+.hz_profile_photo {
+ position: relative;
+ top: -165px;
+ left: 30px;
+
+ width: 150px;
+ height: 150px;
+}
+.hz_profile_photo img {
+ background-color: white;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ padding: 5px;
+ width: 150px;
+ height: 150px;
+}
+
+.hz_name {
+ position: relative;
+ top: -100px;
+ left: 210px;
+ color: #fff;
+ font-size: 32px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+.hz_addr {
+ position: relative;
+ top: -100px;
+ left: 210px;
+ color: #fff;
+ font-size: 18px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+
+
+{{else}}
+.hz_card {
+/* -moz-transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}});
+ transform: translate(-{{$translate}}%, -{{$translate}}%) scale({{$scale}}, {{$scale}}); */
+ font-family: sans-serif, arial, freesans;
+}
+.hz_cover_photo {
+ max-width: 100%;
+}
+.hz_profile_photo {
+ position: relative;
+ top: -75px;
+ left: 20px;
+ background-color: white;
+ border: 1px solid #ddd;
+/* border-radius: 5px;
+ -moz-border-radius: 5px; */
+ padding: 3px;
+ width: 80px;
+ height: 80px;
+}
+
+.hz_name {
+ position: relative;
+ top: -40px;
+ left: 120px;
+ color: #fff;
+ font-size: 18px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+.hz_addr {
+ position: relative;
+ top: -40px;
+ left: 120px;
+ color: #fff;
+ font-size: 10px;
+ text-rendering: optimizelegibility;
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);
+}
+{{/if}}
+
+</style>
+
+<div class="hz_card {{$size}}">
+ <div class="hz_cover_photo"><img src="{{$cover.href}}" alt="{{$zcard.chan.xchan_name}}" />
+ <div class="hz_name">{{$zcard.chan.xchan_name}}</div>
+ <div class="hz_addr">{{$zcard.chan.channel_addr}}</div>
+ </div>
+ <div class="hz_profile_photo"><img src="{{$pphoto.href}}" alt="{{$zcard.chan.xchan_name}}" /></div>
+</div>
+
diff --git a/view/tpl/zcard_embed.tpl b/view/tpl/zcard_embed.tpl
new file mode 100644
index 000000000..5c7a925e3
--- /dev/null
+++ b/view/tpl/zcard_embed.tpl
@@ -0,0 +1,8 @@
+<div class="hz_card {{$size}}">
+ <div class="hz_cover_photo" style="max-width: 100;"><a href="{{$zcard.chan.xchan_url}}"><img src="{{$cover.href}}" alt="{{$zcard.chan.xchan_name}}" /></a>
+ <div style="position: relative;top: -40px;left: 120px;color: #fff;font-size: 18px;text-rendering: optimizelegibility;text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);" >{{$zcard.chan.xchan_name}}</div>
+ <div style="position: relative;top: -40px;left: 120px;color: #fff;font-size: 10px;text-rendering: optimizelegibility;text-shadow: 0 0 3px rgba(0, 0, 0, 0.8);" >{{$zcard.chan.channel_addr}}</div>
+ </div>
+ <div style="position:relative;top: -75px;left: 20px;background-color: white;border: 1px solid #ddd;padding: 3px;width: 80px;height: 80px;"><a href="{{$zcard.chan.xchan_url}}"><img src="{{$pphoto.href}}" alt="{{$zcard.chan.xchan_name}}" /></a></div>
+</div>
+