diff options
Diffstat (limited to 'view/tpl')
-rwxr-xr-x | view/tpl/acl_selector.tpl | 32 | ||||
-rwxr-xr-x | view/tpl/admin_accounts.tpl (renamed from view/tpl/admin_users.tpl) | 6 | ||||
-rwxr-xr-x | view/tpl/admin_channels.tpl | 2 | ||||
-rwxr-xr-x | view/tpl/admin_plugins.tpl | 49 | ||||
-rw-r--r-- | view/tpl/app.tpl | 2 | ||||
-rwxr-xr-x | view/tpl/atom_feed.tpl | 2 | ||||
-rw-r--r-- | view/tpl/chat.tpl | 48 | ||||
-rwxr-xr-x | view/tpl/conv_item.tpl | 151 | ||||
-rw-r--r-- | view/tpl/hdr.tpl | 2 | ||||
-rwxr-xr-x | view/tpl/jot-header.tpl | 8 | ||||
-rwxr-xr-x | view/tpl/profile_advanced.tpl | 18 | ||||
-rwxr-xr-x | view/tpl/profile_edit.tpl | 6 | ||||
-rwxr-xr-x | view/tpl/profile_vcard.tpl | 4 | ||||
-rwxr-xr-x | view/tpl/settings_oauth.tpl | 2 | ||||
-rw-r--r-- | view/tpl/wiki.tpl | 277 | ||||
-rw-r--r-- | view/tpl/wiki_page_history.tpl | 12 | ||||
-rw-r--r-- | view/tpl/wiki_page_list.tpl | 10 | ||||
-rw-r--r-- | view/tpl/wikilist.tpl | 20 |
18 files changed, 526 insertions, 125 deletions
diff --git a/view/tpl/acl_selector.tpl b/view/tpl/acl_selector.tpl index 0e9562157..60fae0a29 100755 --- a/view/tpl/acl_selector.tpl +++ b/view/tpl/acl_selector.tpl @@ -12,6 +12,19 @@ {{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" selected>{{$showall}}</option> + <option id="acl-onlyme" value="onlyme">{{$onlyme}}</option> + <option id="acl-showlimited" value="limited">{{$showlimited}}</option> + </select> + + {{if $showallOrigin}} + <div id="acl-info" class="form-group"> + <i class="fa fa-info-circle"></i> {{$showallOrigin}} + </div> + {{/if}} + {{if $jotnets}} <div class="jotnets-wrapper" role="tab" id="jotnets-wrapper"> <a data-toggle="collapse" class="btn btn-block btn-default" href="#jotnets-collapse" aria-expanded="false" aria-controls="jotnets-collapse">{{$jnetModalTitle}} <span class="caret"></span></a> @@ -21,25 +34,8 @@ <div class="clear"></div> </div> {{/if}} + <div id="acl-wrapper"> - <div id="acl-radiowrapper-showall" class="radio"> - <label> - <input id="acl-showall" type="radio" name="optionsRadios" value="option1" checked> - {{if $showallIcon}} - <i class="fa {{$showallIcon}}"></i> - {{/if}} - <span id="acl-showall-caption">{{$showall}}</span> - </label> - {{if $showallOrigin}} - <a id="acl-info-icon" role="button" tabindex="0" class="fa fa-info-circle" data-trigger="focus" data-toggle="popover" data-placement="top" data-content="{{$showallOrigin}}"></a> - {{/if}} - </div> - <div id="acl-radiowrapper-showlimited" class="radio"> - <label> - <input id="acl-showlimited" type="radio" name="optionsRadios" style="readonly" value="option2"> - <span id=acl-showlimited-caption>{{$showlimited}}</span> - </label> - </div> <div id="acl-list"> <div id="acl-search-wrapper"> <input type="text" id="acl-search" placeholder=" {{$search}}"> diff --git a/view/tpl/admin_users.tpl b/view/tpl/admin_accounts.tpl index ae77ef24c..53f5f1aba 100755 --- a/view/tpl/admin_users.tpl +++ b/view/tpl/admin_accounts.tpl @@ -13,7 +13,7 @@ <div class="generic-content-wrapper-styled" id="adminpage"> <h1>{{$title}} - {{$page}}</h1> - <form action="{{$baseurl}}/admin/users" method="post"> + <form action="{{$baseurl}}/admin/accounts" method="post"> <input type="hidden" name="form_security_token" value="{{$form_security_token}}"> <h3>{{$h_pending}}</h3> @@ -52,7 +52,7 @@ <table id="users"> <thead> <tr> - {{foreach $th_users as $th}}<th>{{$th}}</th>{{/foreach}} + {{foreach $th_users as $th}}<th><a href="{{$base}}&key={{$th.1}}&dir={{$odir}}">{{$th.0}}</a></th>{{/foreach}} <th></th> <th></th> </tr> @@ -73,7 +73,7 @@ <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/users/{{if ($u.blocked)}}un{{/if}}block/{{$u.account_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs" 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/users/delete/{{$u.account_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs" title='{{$delete}}' onclick="return confirm_delete('{{$u.name}}')"><i class="fa fa-trash-o admin-icons"></i></a> + <a href="{{$baseurl}}/admin/accounts/{{if ($u.blocked)}}un{{/if}}block/{{$u.account_id}}?t={{$form_security_token}}" class="btn btn-default btn-xs" 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-default btn-xs" title='{{$delete}}' onclick="return confirm_delete('{{$u.name}}')"><i class="fa fa-trash-o admin-icons"></i></a> </td> </tr> {{/foreach}} diff --git a/view/tpl/admin_channels.tpl b/view/tpl/admin_channels.tpl index 6db963304..f15742f78 100755 --- a/view/tpl/admin_channels.tpl +++ b/view/tpl/admin_channels.tpl @@ -21,7 +21,7 @@ <table id='channels'> <thead> <tr> - {{foreach $th_channels as $th}}<th>{{$th}}</th>{{/foreach}} + {{foreach $th_channels as $th}}<th><a href="{{$base}}&key={{$th.1}}&dir={{$odir}}">{{$th.0}}</a></th>{{/foreach}} <th></th> <th></th> </tr> diff --git a/view/tpl/admin_plugins.tpl b/view/tpl/admin_plugins.tpl index f21a3057e..993a4dea2 100755 --- a/view/tpl/admin_plugins.tpl +++ b/view/tpl/admin_plugins.tpl @@ -1,33 +1,48 @@ <div class="generic-content-wrapper"> <div class="section-title-wrapper"> <div class="pull-right"> - <button class="btn btn-success btn-xs" onclick="openClose('form');">{{$addrepo}}</button> + <button class="btn btn-success btn-xs" onclick="openClose('form');">{{$managerepos}}</button> </div> <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> + </td> + <td style="width: 15%;"> + <button class="btn btn-xs btn-primary pull-right" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-download'></i> {{$repoUpdateButton}}</button> + </td> + <td style="width: 15%;"> + <button class="btn btn-xs btn-danger pull-right" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-trash-o'></i> {{$repoRemoveButton}}</button> + </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> + <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-info-wrapper"> - <h3>Installed Plugin Repositories</h3> - {{foreach $addonrepos as $repo}} -<!-- <div class="section-content-tools-wrapper"> --> - <div style="margin-left: 30%; margin-right: 30%;"> - <span class="pull-left">{{$repo.name}}</span> - <!--<button class="btn btn-xs btn-primary pull-right" onclick="switchAddonRepoBranch('{{$repo.name}}'); return false;">{{$repoBranchButton}}</button>--> - <button class="btn btn-xs btn-danger pull-right" style="margin-left: 10px; margin-right: 0px;" onclick="removeAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-trash-o'></i> {{$repoRemoveButton}}</button> - <button class="btn btn-xs btn-primary pull-right" style="margin-left: 10px; margin-right: 10px;" onclick="updateAddonRepo('{{$repo.name}}'); return false;"><i class='fa fa-download'></i> {{$repoUpdateButton}}</button> - </div> -<!-- </div>--> - <div class="clear"></div> - {{/foreach}} - </div> <div class="section-content-wrapper-np"> {{foreach $plugins as $p}} <div class="section-content-tools-wrapper" id="pluginslist"> diff --git a/view/tpl/app.tpl b/view/tpl/app.tpl index 20a1337c7..3e6b71b29 100644 --- a/view/tpl/app.tpl +++ b/view/tpl/app.tpl @@ -14,7 +14,7 @@ <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-default" title="{{$install}}" ><i class="fa fa-arrow-circle-o-down-alt" ></i></button>{{/if}} + {{if $install}}<button type="submit" name="install" value="{{$install}}" class="btn btn-default" 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-default" title="{{$edit}}" ><i class="fa fa-pencil" ></i></button>{{/if}} {{if $delete}}<button type="submit" name="delete" value="{{$delete}}" class="btn btn-default" title="{{$delete}}" ><i class="fa fa-trash-o drop-icons"></i></button>{{/if}} </form> diff --git a/view/tpl/atom_feed.tpl b/view/tpl/atom_feed.tpl index 9e5b5a5be..37eaf954a 100755 --- a/view/tpl/atom_feed.tpl +++ b/view/tpl/atom_feed.tpl @@ -13,7 +13,7 @@ <id>{{$feed_id}}</id> <title>{{$feed_title}}</title> - <generator uri="http://getzot.com" version="{{$version}}">{{$red}}</generator> + <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 $hub}} diff --git a/view/tpl/chat.tpl b/view/tpl/chat.tpl index e92265b5d..341ff7649 100644 --- a/view/tpl/chat.tpl +++ b/view/tpl/chat.tpl @@ -33,6 +33,9 @@ <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=online"><i class="fa fa-circle online"></i> {{$online}}</a></li> <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chatsvc?f=&room_id={{$room_id}}&status=away"><i class="fa fa-circle away"></i> {{$away}}</a></li> <li class="nav-item"><a class="nav-link" href="{{$baseurl}}/chat/{{$nickname}}/{{$room_id}}/leave"><i class="fa fa-circle leave"></i> {{$leave}}</a></li> + <li class="divider"></li> + <li class="nav-item" id="toggle-notifications"><a class="nav-link" href="" onclick="toggleChatNotifications(); return false;"><i id="toggle-notifications-icon" class="fa fa-bell-slash-o"></i> Toggle notifications</a></li> + <li class="nav-item disabled" id="toggle-notifications-audio"><a class="nav-link" href="" onclick="toggleChatNotificationAudio(); return false;"><i id="toggle-notifications-audio-icon" class="fa fa-volume-off"></i> Toggle sound</a></li> {{if $bookmark_link}} <li class="divider"></li> <li class="nav-item"><a class="nav-link" href="{{$bookmark_link}}" target="_blank" ><i class="fa fa-bookmark"></i> {{$bookmark}}</a></li> @@ -194,6 +197,7 @@ function update_chats(chats) { 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(); @@ -204,6 +208,9 @@ function update_chats(chats) { } 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() { @@ -226,12 +233,17 @@ function chatNotificationInit() { } }); } + // 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 = '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'; + 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 ) { + if ( !chat_notify_granted || !chat_notify_enabled) { return; } var nIcon = "/images/icons/48/group.png"; @@ -244,8 +256,38 @@ var chat_issue_notification = function (theBody,theTitle) { n.onclick = function (event) { setTimeout(n.close.bind(n), 300); } - // TODO: Allow audio notification option - //chat_notify_audio.play(); + 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() { diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index d9c60fc3b..817a03028 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -78,82 +78,95 @@ </div> {{/if}} <div class="wall-item-tools"> - <div class="wall-item-tools-right btn-group pull-right"> - {{if $item.like}} - <button type="button" title="{{$item.like.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'like'); return false;"> - <i class="fa fa-thumbs-o-up" ></i> - </button> - {{/if}} - {{if $item.dislike}} - <button type="button" title="{{$item.dislike.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'dislike'); return false;"> - <i class="fa fa-thumbs-o-down" ></i> - </button> - {{/if}} - {{if $item.isevent}} - <button type="button" title="{{$item.attend.0}}" class="btn btn-default btn-sm" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendyes'); return false;"> - <i class="fa fa-check" ></i> - </button> - <button type="button" title="{{$item.attend.1}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'attendno'); return false;"> - <i class="fa fa-times" ></i> - </button> - <button type="button" title="{{$item.attend.2}}" class="btn btn-default btn-sm" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendmaybe'); return false;"> - <i class="fa fa-question" ></i> - </button> - {{/if}} - - {{if $item.canvote}} - <button type="button" title="{{$item.conlabels.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'agree'); return false;"> - <i class="fa fa-check" ></i> - </button> - <button type="button" title="{{$item.conlabels.1}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'disagree'); return false;"> - <i class="fa fa-times" ></i> - </button> - <button type="button" title="{{$item.conlabels.2}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'abstain'); return false;"> - <i class="fa fa-question" ></i> - </button> + <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-default btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-react-{{$item.id}}"> + <i class="fa fa-smile-o"></i> + </button> + <ul class="dropdown-menu dropdown-menu-left" role="menu" aria-labelledby="wall-item-react-{{$item.id}}"> + {{foreach $item.reactions as $react}} + <li role="presentation"><a role="menuitem" href="#" onclick="jotReact({{$item.id}},'{{$react}}'); return false;"><img class="dropdown-menu-img-sm" src="/images/emoji/{{$react}}.png" alt="{{$react}}" /></a></li> + {{/foreach}} + </ul> + </div> {{/if}} - - <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-menu-{{$item.id}}"> - <i class="fa fa-caret-down"></i> - </button> - <ul class="dropdown-menu" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}"> - {{if $item.share}} - <li role="presentation"><a role="menuitem" href="#" onclick="jotShare({{$item.id}}); return false"><i class="fa fa-retweet" title="{{$item.share.0}}"></i> {{$item.share.0}}</a></li> - {{/if}} - {{if $item.plink}} - <li role="presentation"><a role="menuitem" href="{{$item.plink.href}}" title="{{$item.plink.title}}" ><i class="fa fa-external-link"></i> {{$item.plink.title}}</a></li> - {{/if}} - {{if $item.edpost}} - <li role="presentation"><a role="menuitem" href="{{$item.edpost.0}}" title="{{$item.edpost.1}}"><i class="editpost fa fa-pencil"></i> {{$item.edpost.1}}</a></li> + <div class="btn-group dropdown"> + {{if $item.like}} + <button type="button" title="{{$item.like.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'like'); return false;"> + <i class="fa fa-thumbs-o-up" ></i> + </button> {{/if}} - {{if $item.tagger}} - <li role="presentation"><a role="menuitem" href="#" onclick="itemTag({{$item.id}}); return false;"><i id="tagger-{{$item.id}}" class="fa fa-tag" title="{{$item.tagger.tagit}}"></i> {{$item.tagger.tagit}}</a></li> + {{if $item.dislike}} + <button type="button" title="{{$item.dislike.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'dislike'); return false;"> + <i class="fa fa-thumbs-o-down" ></i> + </button> {{/if}} - {{if $item.filer}} - <li role="presentation"><a role="menuitem" href="#" onclick="itemFiler({{$item.id}}); return false;"><i id="filer-{{$item.id}}" class="fa fa-folder-open" title="{{$item.filer}}"></i> {{$item.filer}}</a></li> + {{if $item.isevent}} + <button type="button" title="{{$item.attend.0}}" class="btn btn-default btn-sm" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendyes'); return false;"> + <i class="fa fa-check" ></i> + </button> + <button type="button" title="{{$item.attend.1}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'attendno'); return false;"> + <i class="fa fa-times" ></i> + </button> + <button type="button" title="{{$item.attend.2}}" class="btn btn-default btn-sm" onclick="itemAddToCal({{$item.id}}); dolike({{$item.id}},'attendmaybe'); return false;"> + <i class="fa fa-question" ></i> + </button> {{/if}} - {{if $item.bookmark}} - <li role="presentation"><a role="menuitem" href="#" onclick="itemBookmark({{$item.id}}); return false;"><i id="bookmarker-{{$item.id}}" class="fa fa-bookmark" title="{{$item.bookmark}}"></i> {{$item.bookmark}}</a></li> - {{/if}} - {{if $item.addtocal}} - <li role="presentation"><a role="menuitem" href="#" onclick="itemAddToCal({{$item.id}}); return false;"><i id="addtocal-{{$item.id}}" class="fa fa-calendar" title="{{$item.addtocal}}"></i> {{$item.addtocal}}</a></li> - {{/if}} - {{if $item.star}} - <li role="presentation"><a role="menuitem" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="fa fa-star {{$item.star.isstarred}}" title="{{$item.star.toggle}}"></i> {{$item.star.toggle}}</a></li> - {{/if}} - {{if $item.drop.dropping}} - <li role="presentation"><a role="menuitem" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}'); return false;" title="{{$item.drop.delete}}" ><i class="fa fa-trash-o"></i> {{$item.drop.delete}}</a></li> - {{/if}} - {{if $item.item_photo_menu}} - <li role="presentation" class="divider"></li> - {{$item.item_photo_menu}} - {{if $item.edpost && $item.dreport}} - <li role="presentation"><a role="menuitem" href="dreport/{{$item.mid}}">{{$item.dreport}}</a></li> + {{if $item.canvote}} + <button type="button" title="{{$item.conlabels.0}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'agree'); return false;"> + <i class="fa fa-check" ></i> + </button> + <button type="button" title="{{$item.conlabels.1}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'disagree'); return false;"> + <i class="fa fa-times" ></i> + </button> + <button type="button" title="{{$item.conlabels.2}}" class="btn btn-default btn-sm" onclick="dolike({{$item.id}},'abstain'); return false;"> + <i class="fa fa-question" ></i> + </button> {{/if}} + <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" id="wall-item-menu-{{$item.id}}"> + <i class="fa fa-caret-down"></i> + </button> + <ul class="dropdown-menu dropdown-menu-right" role="menu" aria-labelledby="wall-item-menu-{{$item.id}}"> + {{if $item.share}} + <li role="presentation"><a role="menuitem" href="#" onclick="jotShare({{$item.id}}); return false"><i class="fa fa-retweet" title="{{$item.share.0}}"></i> {{$item.share.0}}</a></li> + {{/if}} + {{if $item.plink}} + <li role="presentation"><a role="menuitem" href="{{$item.plink.href}}" title="{{$item.plink.title}}" ><i class="fa fa-external-link"></i> {{$item.plink.title}}</a></li> + {{/if}} + {{if $item.edpost}} + <li role="presentation"><a role="menuitem" href="{{$item.edpost.0}}" title="{{$item.edpost.1}}"><i class="editpost fa fa-pencil"></i> {{$item.edpost.1}}</a></li> + {{/if}} + {{if $item.tagger}} + <li role="presentation"><a role="menuitem" href="#" onclick="itemTag({{$item.id}}); return false;"><i id="tagger-{{$item.id}}" class="fa fa-tag" title="{{$item.tagger.tagit}}"></i> {{$item.tagger.tagit}}</a></li> + {{/if}} + {{if $item.filer}} + <li role="presentation"><a role="menuitem" href="#" onclick="itemFiler({{$item.id}}); return false;"><i id="filer-{{$item.id}}" class="fa fa-folder-open" title="{{$item.filer}}"></i> {{$item.filer}}</a></li> + {{/if}} + {{if $item.bookmark}} + <li role="presentation"><a role="menuitem" href="#" onclick="itemBookmark({{$item.id}}); return false;"><i id="bookmarker-{{$item.id}}" class="fa fa-bookmark" title="{{$item.bookmark}}"></i> {{$item.bookmark}}</a></li> + {{/if}} + {{if $item.addtocal}} + <li role="presentation"><a role="menuitem" href="#" onclick="itemAddToCal({{$item.id}}); return false;"><i id="addtocal-{{$item.id}}" class="fa fa-calendar" title="{{$item.addtocal}}"></i> {{$item.addtocal}}</a></li> + {{/if}} + {{if $item.star}} + <li role="presentation"><a role="menuitem" href="#" onclick="dostar({{$item.id}}); return false;"><i id="starred-{{$item.id}}" class="fa fa-star {{$item.star.isstarred}}" title="{{$item.star.toggle}}"></i> {{$item.star.toggle}}</a></li> + {{/if}} + {{if $item.drop.dropping}} + <li role="presentation"><a role="menuitem" href="#" onclick="dropItem('item/drop/{{$item.id}}', '#thread-wrapper-{{$item.id}}'); return false;" title="{{$item.drop.delete}}" ><i class="fa fa-trash-o"></i> {{$item.drop.delete}}</a></li> + {{/if}} + {{if $item.item_photo_menu}} + <li role="presentation" class="divider"></li> + {{$item.item_photo_menu}} - {{/if}} - </ul> + {{if $item.edpost && $item.dreport}} + <li role="presentation"><a role="menuitem" href="dreport/{{$item.mid}}">{{$item.dreport}}</a></li> + {{/if}} + + {{/if}} + </ul> + </div> </div> <div id="like-rotator-{{$item.id}}" class="like-rotator"></div> diff --git a/view/tpl/hdr.tpl b/view/tpl/hdr.tpl index 3770cb9a6..6a14906f6 100644 --- a/view/tpl/hdr.tpl +++ b/view/tpl/hdr.tpl @@ -1,5 +1,5 @@ <div id="banner" class="hidden-sm hidden-xs">{{$banner}}</div> -<ul id="nav-notifications-template" style="display:none;" rel="template"> +<ul id="nav-notifications-template" rel="template"> <li class="{5}"><a href="{0}" title="{2} {3}"><img class="dropdown-menu-img-sm" data-src="{1}"><span class="contactname">{2}</span><span class="dropdown-sub-text">{3}<br>{4}</span></a></li> </ul> diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index aeb661008..43df2e175 100755 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -349,6 +349,14 @@ function enableOnUser(){ } } + 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); diff --git a/view/tpl/profile_advanced.tpl b/view/tpl/profile_advanced.tpl index c617e6c14..a4c98b1d0 100755 --- a/view/tpl/profile_advanced.tpl +++ b/view/tpl/profile_advanced.tpl @@ -33,6 +33,7 @@ <div class="section-content-wrapper"> {{foreach $fields as $f}} + {{if $f == 'name'}} <dl id="aprofile-fullname" class="aprofile"> <dt>{{$profile.fullname.0}}</dt> @@ -40,6 +41,13 @@ </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"> @@ -72,7 +80,7 @@ {{if $profile.marital}} <dl id="aprofile-marital" class="aprofile"> <dt><span class="heart"><i class="fa fa-heart"></i> </span>{{$profile.marital.0}}</dt> - <dd>{{$profile.marital.1}}{{if in_array('with',$fields)}}{{if $profile.marital.with}} ({{$profile.marital.with}}){{/if}}{{/if}}{{if in_array('howlong',$fields)}}{{if $profile.howlong}} {{$profile.howlong}}{{/if}}{{/if}}</dd> + <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}} @@ -237,11 +245,11 @@ {{/if}} - {{if $f == 'work'}} - {{if $profile.work}} + {{if $f == 'employment'}} + {{if $profile.employment}} <dl id="aprofile-work" class="aprofile"> - <dt>{{$profile.work.0}}</dt> - <dd>{{$profile.work.1}}</dd> + <dt>{{$profile.employment.0}}</dt> + <dd>{{$profile.employment.1}}</dd> </dl> {{/if}} {{/if}} diff --git a/view/tpl/profile_edit.tpl b/view/tpl/profile_edit.tpl index deabc2795..b0211d697 100755 --- a/view/tpl/profile_edit.tpl +++ b/view/tpl/profile_edit.tpl @@ -173,7 +173,7 @@ </div> <div class="clear"></div> - {{if $fields.with}} + {{if $fields.partner}} {{include file="field_input.tpl" field=$with}} {{/if}} @@ -198,7 +198,7 @@ </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.romance || $fields.education || $extra_fields}} + {{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> @@ -269,7 +269,7 @@ {{include file="field_textarea.tpl" field=$romance}} {{/if}} - {{if $fields.work}} + {{if $fields.employment}} {{include file="field_textarea.tpl" field=$work}} {{/if}} diff --git a/view/tpl/profile_vcard.tpl b/view/tpl/profile_vcard.tpl index b4d21b6e7..7d7d2019a 100755 --- a/view/tpl/profile_vcard.tpl +++ b/view/tpl/profile_vcard.tpl @@ -1,6 +1,6 @@ <div class="vcard"> {{if ! $zcard}} - <div id="profile-photo-wrapper"><img class="photo" src="{{$profile.photo}}?rev={{$profile.picdate}}" alt="{{$profile.name}}"></div> + <div id="profile-photo-wrapper"><img class="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> @@ -25,7 +25,7 @@ {{/if}} {{if ! $zcard}} - <div class="fn">{{$profile.name}}{{if $profile.online}} <i class="fa fa-asterisk online-now" title="{{$profile.online}}"></i>{{/if}}</div> + <div class="fn">{{$profile.fullname}}{{if $profile.online}} <i class="fa fa-asterisk online-now" title="{{$profile.online}}"></i>{{/if}}</div> {{if $reddress}}<div class="reddress" oncopy="return false;">{{$profile.reddress}}</div>{{/if}} {{/if}} {{if $pdesc}}<div class="title">{{$profile.pdesc}}</div>{{/if}} diff --git a/view/tpl/settings_oauth.tpl b/view/tpl/settings_oauth.tpl index 02ca26234..9582ef52d 100755 --- a/view/tpl/settings_oauth.tpl +++ b/view/tpl/settings_oauth.tpl @@ -18,7 +18,7 @@ {{foreach $apps as $app}} <div class='oauthapp'> <img src='{{$app.icon}}' class="{{if $app.icon}} {{else}}noicon{{/if}}"> - {{if $app.name}}<h4>{{$app.name}}</h4>{{else}}<h4>{{$noname}}</h4>{{/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> diff --git a/view/tpl/wiki.tpl b/view/tpl/wiki.tpl new file mode 100644 index 000000000..1312f8518 --- /dev/null +++ b/view/tpl/wiki.tpl @@ -0,0 +1,277 @@ +<style type="text/css" media="screen"> + #ace-editor { + position: relative; + width: 100%; + height: 500px; + } + .fade.in { + -webkit-transition: opacity 0.5s 0.5s ease; + -moz-transition: opacity 0.5s 0.5s ease; + -o-transition: opacity 0.5s 0.5s ease; + transition: opacity 0.5s 0.5s ease; + } +</style> +<div class="generic-content-wrapper"> + <div class="section-title-wrapper"> + <div class="pull-right"> + {{if $showNewWikiButton}} + <button class="btn btn-primary btn-xs" onclick="$('#new-page-form-wrapper').hide(); openClose('new-wiki-form-wrapper');">New Wiki</button> + {{/if}} + {{if $showNewPageButton}} + <button class="btn btn-success btn-xs" onclick="$('#new-wiki-form-wrapper').hide(); openClose('new-page-form-wrapper');">New Page</button> + {{/if}} + <button id="fullscreen-btn" type="button" class="btn btn-default btn-xs" onclick="makeFullScreen(); + adjustFullscreenTopBarHeight();"><i class="fa fa-expand"></i></button> + <button id="inline-btn" type="button" class="btn btn-default btn-xs" onclick="makeFullScreen(false); + adjustInlineTopBarHeight();"><i class="fa fa-compress"></i></button> + </div> + <h2>{{$wikiheader}}</h2> + <div class="clear"></div> + </div> + <div id="new-wiki-form-wrapper" class="section-content-tools-wrapper" style="display:none;"> + <form id="new-wiki-form" action="wiki/{{$channel}}/create/wiki" method="post" > + <div class="clear"></div> + {{include file="field_input.tpl" field=$wikiName}} + <div class="btn-group pull-right"> + <div id="profile-jot-submit-right" class="btn-group"> + <button id="dbtn-acl" class="btn btn-default 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">{{$bang}}</i> + </button> + </div> + <button id="new-wiki-submit" class="btn btn-primary" type="submit" name="submit" >Create Wiki</button> + </div> + <div>{{$acl}}</div> + </form> + <div class="clear"></div> + <hr> + </div> + + <div id="new-page-form-wrapper" class="section-content-tools-wrapper" style="display:none;"> + <form id="new-page-form" action="wiki/create/page" method="post" > + <div class="clear"></div> + {{include file="field_input.tpl" field=$pageName}} + <div class="btn-group pull-right"> + <button id="new-page-submit" class="btn btn-success" type="submit" name="submit" >Create Page</button> + </div> + </form> <div class="clear"></div> + <hr> + </div> + + <div id="wiki-content-container" class="section-content-wrapper" {{if $hideEditor}}style="display: none;"{{/if}}> + <ul class="nav nav-tabs" id="wiki-nav-tabs"> + <li><a data-toggle="tab" href="#edit-pane">Edit</a></li> + <li class="active"><a data-toggle="tab" href="#preview-pane" id="wiki-get-preview">Preview</a></li> + <li {{if $hidePageHistory}}style="display: none;"{{/if}}><a data-toggle="tab" href="#page-history-pane" id="wiki-get-history">History</a></li> + {{if $showPageControls}} + <li class="dropdown"> + <a data-toggle="dropdown" class="dropdown-toggle" href="#">Page <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a id="save-page" data-toggle="tab" href="#">Save</a></li> + <li><a id="delete-page" data-toggle="tab" href="#">Delete</a></li> + </ul> + </li> + {{/if}} + </ul> + <div class="tab-content" id="wiki-page-tabs"> + + <div id="edit-pane" class="tab-pane fade"> + <div id="ace-editor"></div> + </div> + <div id="preview-pane" class="tab-pane fade in active"> + <div id="wiki-preview" class="section-content-wrapper"> + {{$renderedContent}} + </div> + </div> + <div id="page-history-pane" class="tab-pane fade" {{if $hidePageHistory}}style="display: none;"{{/if}}> + <div id="page-history-list" class="section-content-wrapper"> + <table class="table-striped table-responsive table-hover" style="width: 100%;"> + {{foreach $pageHistory as $commit}} + <tr><td> + <table> + <tr><td>Date</td><td>{{$commit.date}}</td></tr> + <tr><td>Name</td><td>{{$commit.name}}</td></tr> + <tr><td>Message</td><td>{{$commit.title}}</td></tr> + </table> + </td></tr> + {{/foreach}} + </table> + </div> + </div> + + + </div> + </div> + {{if $showCommitMsg}} + <div class="section-content-wrapper"> + {{include file="field_input.tpl" field=$commitMsg}} + </div> + {{/if}} +</div> + +<script> + window.wiki_resource_id = '{{$resource_id}}'; + window.wiki_page_name = '{{$page}}'; + window.wiki_page_content = {{$content}}; + + if (window.wiki_page_name === 'Home') { + $('#delete-page').hide(); + } + $(document).ready(function () { + wiki_refresh_page_list(); + // Show Edit tab first. Otherwise the Ace editor does not load. + $("#wiki-nav-tabs li:eq(1) a").tab('show'); + }); + + var editor = ace.edit("ace-editor"); + editor.setTheme("ace/theme/github"); + editor.getSession().setMode("ace/mode/markdown"); + editor.getSession().setValue(window.wiki_page_content); + + $('#wiki-get-preview').click(function (ev) { + $.post("wiki/{{$channel}}/preview", {content: editor.getValue()}, function (data) { + if (data.success) { + $('#wiki-preview').html(data.html); + } 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); + } else { + window.console.log('Error getting page history.'); + } + }, 'json'); + ev.preventDefault(); + }); + +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'); +} + + + $('#new-page-submit').click(function (ev) { + if (window.wiki_resource_id === '') { + window.console.log('You must have a wiki open in order to create pages.'); + ev.preventDefault(); + return false; + } + $.post("wiki/{{$channel}}/create/page", {name: $('#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_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; + } + var currentContent = editor.getValue(); + if (window.wiki_page_content === currentContent) { + 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 + } else { + alert('Error saving page.'); // TODO: Replace alerts with auto-timeout popups + window.console.log('Error saving page.'); + } + }, 'json'); + ev.preventDefault(); + }); + + $('#delete-page').click(function (ev) { + if (window.wiki_resource_id === '' || window.wiki_page_name === '' || window.wiki_page_name === 'Home') { + window.console.log('You must have a wiki page open in order to delete pages.'); + ev.preventDefault(); + return false; + } + $.post("wiki/{{$channel}}/delete/page", {name: window.wiki_page_name, resource_id: window.wiki_resource_id}, + function (data) { + if (data.success) { + window.console.log('Page deleted successfully.'); + 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 { + alert('Error deleting page.'); // TODO: Replace alerts with auto-timeout popups + window.console.log('Error deleting 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'); + // put contents in editor + editor.getSession().setValue(data.content); + } else { + window.console.log('Error reverting page.'); + } + }, 'json'); + } +</script> diff --git a/view/tpl/wiki_page_history.tpl b/view/tpl/wiki_page_history.tpl new file mode 100644 index 000000000..6ce3ce204 --- /dev/null +++ b/view/tpl/wiki_page_history.tpl @@ -0,0 +1,12 @@ +<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"> + <button id="revert-{{$commit.hash}}" class="btn btn-danger btn-xs" onclick="wiki_revert_page('{{$commit.hash}}')">Revert</button></td></tr> + <tr><td>Name</td><td>{{$commit.name}} <{{$commit.email}}></td></tr> + <tr><td>Message</td><td>{{$commit.title}}</td></tr> + </table> + </td></tr> + {{/foreach}} +</table>
\ No newline at end of file diff --git a/view/tpl/wiki_page_list.tpl b/view/tpl/wiki_page_list.tpl new file mode 100644 index 000000000..1c3254465 --- /dev/null +++ b/view/tpl/wiki_page_list.tpl @@ -0,0 +1,10 @@ +{{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 nav-stacked"> + {{foreach $pages as $page}} + <li><a href="/wiki/{{$channel}}/{{$wikiname}}/{{$page.url}}">{{$page.title}}</a></li> + {{/foreach}} + </ul> +</div> +{{if $not_refresh}}</div>{{/if}} diff --git a/view/tpl/wikilist.tpl b/view/tpl/wikilist.tpl new file mode 100644 index 000000000..be353ca5e --- /dev/null +++ b/view/tpl/wikilist.tpl @@ -0,0 +1,20 @@ +<div id="wiki_list" class="widget"> + <h3>{{$header}}</h3> + <ul class="nav nav-pills nav-stacked"> + {{foreach $wikis as $wiki}} + <li class="dropdown" id="wiki-{{$wiki.resource_id}}"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + <b>{{$wiki.title}}</b><b class="fa fa-caret-down pull-right"></b> + </a> + <ul class="dropdown-menu pull-right"> + <li><a href="/wiki/{{$channel}}/{{$wiki.urlName}}/Home" title="View {{$wiki.title}}">View</a></li> + {{if $showControls}} + <li class="divider"></li> + <li><a href="#" onclick="wiki_delete_wiki('{{$wiki.title}}','{{$wiki.resource_id}}'); return false;" title="Delete {{$wiki.title}}">Delete wiki</a></li> + {{/if}} + </ul> + </li> + {{/foreach}} + </ul> +</div> + |