TeaWeb/shared/html/templates.html

1660 lines
95 KiB
HTML
Raw Normal View History

2018-02-27 16:20:49 +00:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
2018-03-24 22:38:01 +00:00
<title>TeaSpeak-Web client templates</title>
2018-02-27 16:20:49 +00:00
</head>
<body>
<!-- main frame TODO tr -->
<script class="jsrender-template" id="tmpl_main" type="text/html">
<div class="app-container">
<div class="app">
<!-- Container -->
<div style="height: 45px; width: 100%; border-radius: 2px 0px 0px 0px; border-bottom-width: 0px; background-color: lightgrey"
class="main_container">
<div id="control_bar" class="control_bar">
<div class="button btn_connect" title="{{tr 'Connect to a server' /}}">
<div class="icon_x32 client-connect"></div>
</div>
<div class="button btn_disconnect" title="{{tr 'Disconnect from server' /}}" style="display: none">
<div class="icon_x32 client-disconnect"></div>
</div>
<!--<div class="button btn_disconnect"><div class="icon_x32 client-disconnect"></div></div>-->
<div class="divider"></div>
<div class="button-dropdown btn_away" title="{{tr 'Toggle away status' /}}">
<div class="buttons">
<div class="button icon_x32 client-away btn_away_toggle"></div>
<div class="button-dropdown">
<div class="arrow"></div>
</div>
</div>
<div class="dropdown">
<div class="btn_away_toggle"><div class="icon client-away"></div><a>{{tr "Toggle away status" /}}</a></div>
2018-12-15 11:23:23 +00:00
<div class="btn_away_message"><div class="icon client-away"></div><a>{{tr "Set away message" /}}</a></div>
</div>
</div>
<div class="button btn_mute_input">
<div class="icon_x32 client-input_muted" title="{{tr 'Mute/unmute microphone' /}}"></div>
</div>
<div class="button btn_mute_output">
<div class="icon_x32 client-output_muted" title="{{tr 'Mute/unmute headphones' /}}"></div>
</div>
<div class="divider"></div>
<div class="button-dropdown btn_token" title="{{tr 'Use token' /}}">
<div class="buttons">
<div class="button icon_x32 client-token btn_token_use"></div>
<div class="button-dropdown">
<div class="arrow"></div>
</div>
</div>
<div class="dropdown">
<div class="btn_token_list"><div class="icon client-token"></div><a>{{tr "List tokens" /}}</a></div>
<div class="btn_token_use"><div class="icon client-token_use"></div><a>{{tr "Use token" /}}</a></div>
</div>
</div>
<div style="width: 100%"></div>
<div class="button btn_banlist" title="{{tr 'Banlist' /}}">
<div class="icon_x32 client-ban_list"></div>
</div>
<div class="button btn_permissions" title="{{tr 'View/edit permissions' /}}">
<div class="icon_x32 client-permission_overview"></div>
</div>
<div class="divider"></div>
<div class="button btn_open_settings" title="{{tr 'Edit global client settings' /}}">
<div class="icon_x32 client-settings"></div>
</div>
</div>
</div>
<div style="flex-direction: row; height: 100%; width: 100%; display: flex; justify-content: stretch;">
<div class="container-channel-chat">
<div class="container-channel" class="main_container">
<div class="channelTree" id="channelTree"></div>
</div>
<!-- Channel tree -->
<div class="main_container container-chat">
<div id="chat">
<div class="messages">
<div class="message_box"></div>
</div>
<div class="chats"></div>
<div class="input">
<!--<div contentEditable="true" class="input_box"></div>-->
<textarea class="input_box" title=""></textarea>
<button>Send</button>
</div>
</div>
</div> <!-- Chat window -->
</div>
<div class="main_container container-info">
<div id="select_info" class="select_info" style="width: 100%; max-width: 100%">
<div class="container-banner"></div>
<div class="container-select-info"></div>
</div>
</div> <!-- Selection info -->
</div>
</div>
</div>
<div id="contextMenu" class="context-menu"></div>
</script>
2018-09-30 19:50:59 +00:00
<!-- Template for the connect modal -->
<script class="jsrender-template" id="tmpl_connect" type="text/html">
2018-09-30 19:50:59 +00:00
<div style="margin-top: 5px;">
<div style="display: flex; flex-direction: row; width: 100%; justify-content: space-between">
<div style="width: 68%; margin-bottom: 5px">
<div>{{tr "Remote address and port:" /}}</div>
2018-09-30 19:50:59 +00:00
<input type="text" style="width: 100%" class="connect_address" value="unknown">
</div>
<div style="width: 20%">
<div>{{tr "Server password:" /}}</div>
2018-09-30 19:50:59 +00:00
<form name="server_password_form" onsubmit="return false;">
<input type="password" id="connect_server_password_{{rnd '0~13377331'/}}" autocomplete="off" style="width: 100%" class="connect_password">
2018-09-30 19:50:59 +00:00
</form>
</div>
</div>
<div>
<div>{{tr "Nickname:" /}}</div>
2018-09-30 19:50:59 +00:00
<input type="text" style="width: 100%" class="connect_nickname" value="">
</div>
<hr>
<div class="group_box">
<div style="display: flex; justify-content: space-between;">
<div style="text-align: right;">{{tr "Identity Settings" /}}</div>
2018-09-30 19:50:59 +00:00
<select class="identity_select">
<option name="identity_type" value="TEAFORO">{{tr "Forum Account" /}}</option>
<option name="identity_type" value="TEAMSPEAK">{{tr "TeamSpeak" /}}</option>
<option name="identity_type" value="NICKNAME">{{tr "Nickname (Debug purposes only!)" /}}</option> <!-- Only available on localhost for debug -->
2018-09-30 19:50:59 +00:00
</select>
</div>
<hr>
<div class="identity_config_TEAMSPEAK identity_config">
{{tr "Please enter your exported TS3 Identity string bellow or select your exported Identity"/}}<br>
2018-12-02 18:27:03 +00:00
<div style="width: 100%; display: flex; justify-content: stretch; flex-direction: row">
<input placeholder="Identity string" style="min-width: 60%; flex-shrink: 1; flex-grow: 2; margin: 5px;" class="identity_string">
<div style="max-width: 200px; flex-grow: 1; flex-shrink: 4; margin: 5px"><input style="display: flex; width: 100%;" class="identity_file" type="file"></div>
2018-09-30 19:50:59 +00:00
</div>
</div>
<div class="identity_config_TEAFORO identity_config">
2018-10-07 16:21:28 +00:00
<div class="connected">
{{tr "You're using your forum account as verification"/}}
2018-10-07 16:21:28 +00:00
</div>
<div class="disconnected">
<!-- TODO tr -->
2018-10-07 16:21:28 +00:00
You cant use your TeaSpeak forum account.<br>
You're not connected!<br>
Click {{if !client}}<a href="{{:forum_path}}login.php">here</a>{{else}}<a href="#" class="native-teaforo-login">here</a>{{/if}} to login via the TeaSpeak forum.
</div>
2018-09-30 19:50:59 +00:00
</div>
<div class="identity_config_NICKNAME identity_config">
{{tr "This is just for debug and uses the name as unique identifier" /}}
2018-09-30 19:50:59 +00:00
</div>
<div style="background-color: red; border-radius: 1px; display: none" class="error_message"></div>
</div> <!-- <a href="<?php echo authPath() . "login.php"; ?>">Login</a> via the TeaSpeak forum. -->
</div>
</script>
<!-- Template for channel create & edit-->
<script class="jsrender-template" id="tmpl_channel_edit" type="text/html">
2018-08-11 13:02:11 +00:00
<div class="align_column general_properties">
<div class="properties">
<a class="key">{{tr "Name:"/}}</a>
2018-06-24 11:38:53 +00:00
<input class="value channel_name" value="{{>channel_name}}"/>
2018-08-11 13:02:11 +00:00
<a class="key">{{tr "Password:"/}}</a>
2018-06-24 11:38:53 +00:00
<!-- Use a random id to trick the default browser password manager. (I think something like a default password is really useless and -->
<!-- Just display a random value here-->
<input class="value channel_password" type="password" id="field_channel_password_{{rnd '0~13377331'/}}" {{if channel_flag_password}} value="WolverinDEV"{{/if}}/>
2018-08-11 13:02:11 +00:00
<a class="key">{{tr "Topic:"/}}</a>
2018-06-24 11:38:53 +00:00
<input class="value channel_topic" value="{{>channel_topic}}"/>
2018-08-11 13:02:11 +00:00
<a class="key">{{tr "Description:"/}}</a>
2018-06-24 11:38:53 +00:00
<textarea class="value channel_description" style="height: 150px; resize: none">{{>channel_description}}</textarea>
2018-04-16 18:38:35 +00:00
</div>
</div>
<div style="margin-bottom: 5px"></div>
2018-02-27 16:20:49 +00:00
<x-tab>
<x-entry>
<x-tag>{{tr "Standard" /}}</x-tag>
2018-02-27 16:20:49 +00:00
<x-content>
2018-04-16 18:38:35 +00:00
<div class="settings_standard" style="display: flex; flex-direction: row; width: 100%; justify-content: space-evenly">
2018-02-27 16:20:49 +00:00
<div style="vertical-align: center; margin: 20px;">
<a>{{tr "Channel Type" /}}</a><br>
2018-08-11 13:02:11 +00:00
<fieldset style="border: 2px solid gray;border-radius: 0px 6px 6px 6px;">
<div><input type="radio" name="channel_type" value="temp" {{if !channel_flag_semi_permanent && !channel_flag_permanent}}checked{{/if}}> {{tr "Temporary" /}}</div>
<div><input type="radio" name="channel_type" value="semi" {{if channel_flag_semi_permanent}}checked{{/if}}> {{tr "Semi-Permanent" /}}</div>
<div><input type="radio" name="channel_type" value="perm" {{if channel_flag_permanent}}checked{{/if}}> {{tr "Permanent" /}}</div>
2018-02-27 16:20:49 +00:00
<hr style="width: 100%;">
<div><input type="checkbox" name="channel_default" id="default" value="def"> {{tr "Default Channel" /}}</div>
2018-02-27 16:20:49 +00:00
</fieldset>
</div>
<div style="border-left:1px solid #000;height: auto;"></div>
<div style="flex-direction: column; align-content: stretch; vertical-align: center; margin: 20px;">
<div>
<div>{{tr "Sort this channel after:"/}}</div>
2018-02-27 16:20:49 +00:00
<select class="order_id" style="width: 150px">
</select>
</div>
<div style="margin-top: 20px">
<div>{{tr "Needed Talk Power:"/}}</div>
2018-04-16 18:38:35 +00:00
<input type="number" min="0" value="0" name="talk_power" style="width: 150px">
</div>Description
2018-02-27 16:20:49 +00:00
</div>
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Audio" /}}</x-tag>
2018-08-13 15:50:55 +00:00
<x-content>
<div class="container">
<div class="settings_audio">
<div class="group_box">
<div class="header">{{tr "Presets" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content">
<fieldset style="">
<div><input type="radio" name="voice_template" value="voice_mobile"> {{tr "Voice Mobile"/}}</div>
<div><input type="radio" name="voice_template" value="voice_desktop"> {{tr "Voice Desktop"/}}</div>
<div><input type="radio" name="voice_template" value="music"> {{tr "Music"/}}</div>
<div><input type="radio" name="voice_template" value="custom"> {{tr "Custom"/}}</div>
2018-08-13 15:50:55 +00:00
</fieldset>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Custom Settings" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content">
<div class="custom">
<div>{{tr "Codec:"/}}</div>
2018-08-13 15:50:55 +00:00
<select class="voice_codec">
<!-- TODO tr -->
<option value="speex_narrow">{{tr "Speex Narrowband" /}} <div class="icon_entry icon client-conflict-icon" title="You don't support this codec"></div></option>
<option value="speex_wide">{{tr "Speex Wideband" /}} <div class="icon_entry icon client-conflict-icon" title="You don't support this codec"></div></option>
<option value="speex_ultra_wide">{{tr "Speex Ultra-Wideband" /}} <div class="icon_entry icon client-conflict-icon" title="You don't support this codec"></div></option>
<option value="celt">{{tr "CELT Mono" /}} <div class="icon_entry icon client-conflict-icon" title="You don't support this codec"></div></option>
<option value="opus_voice">{{tr "Opus Voice" /}}</option>
<option value="opus_music">{{tr "Opus Music" /}}</option>
2018-08-13 15:50:55 +00:00
</select>
<div>{{tr "Quality:" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="quality">
<input class="voice_quality_slider" type="range" min="1" max="10" value="6">
<div class="voice_quality_number">6</div>
</div>
</div>
</div>
</div>
</div>
</div>
</x-content>
2018-02-27 16:20:49 +00:00
</x-entry>
<x-entry>
<x-tag>{{tr "Permissions" /}}</x-tag>
2018-02-27 16:20:49 +00:00
<x-content>
2018-07-03 10:33:31 +00:00
<div style="display: flex; justify-content: space-evenly" class="settings_permissions">
2018-08-13 15:50:55 +00:00
<div class="group_box">
<div class="header">{{tr "Regular needed powers:" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content">
<table class="channel_perm_tbl">
<tr><td class="key">{{tr "Join:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_join_power"></td></tr>
<tr><td class="key">{{tr "View:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_view_power"></td></tr>
<tr><td class="key">{{tr "Subscribe:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_subscribe_power"></td></tr>
<tr><td class="key">{{tr "Desc. view:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_description_view_power"></td></tr>
<tr><td class="key">{{tr "Modify:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_modify_power"></td></tr>
<tr><td class="key">{{tr "Delete:" /}}</td><td><input type="number" min="0" value="0" class="value" permission="i_channel_needed_delete_power"></td></tr>
2018-08-13 15:50:55 +00:00
</table>
</div>
2018-02-27 16:20:49 +00:00
</div>
2018-08-13 15:50:55 +00:00
<div class="group_box">
<div class="header">{{tr "File transfer needed powers:" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content">
<table class="channel_perm_tbl">
<tr><td class="key">Join:</td><td><input type="number" min="0" value="0" class="value"></td></tr>
<tr><td class="key">Subscribe:</td><td><input type="number" min="0" value="0" class="value"></td></tr>
<tr><td class="key">Desc. view:</td><td><input type="number" min="0" value="0" class="value"></td></tr>
<tr><td class="key">Modify:</td><td><input type="number" min="0" value="0" class="value"></td></tr>
<tr><td class="key">Delete:</td><td><input type="number" min="0" value="0" class="value"></td></tr>
</table>
</div>
2018-02-27 16:20:49 +00:00
</div>
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Advanced" /}}</x-tag>
2018-08-13 15:50:55 +00:00
<x-content>
<div class="container settings_advanced">
<div class="group_box">
<div class="header">{{tr "Other Settings" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content properties">
<div class="key">{{tr "Phonetic Name:" /}}</div>
2018-08-13 15:50:55 +00:00
<input class="value channel_name_phonetic" value="{{>channel_name_phonetic}}">
<div class="key">{{tr "Delete delay:" /}}</div>
2018-08-13 15:50:55 +00:00
<input class="value channel_delete_delay" type="number" min="0" max="99999999" value="{{:channel_delete_delay}}"> <!-- Implement max? -->
<div><input class="channel_codec_is_unencrypted" type="checkbox" style="margin-left: 0px" {{if !channel_codec_is_unencrypted}}checked{{/if}}> {{tr "Voice Data encrypted" /}}</div>
2018-08-13 15:50:55 +00:00
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Max users" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content max_users">
<fieldset>
<div><input type="radio" name="max_users" value="infinity" {{if channel_flag_maxclients_unlimited}}checked{{/if}}>{{tr "Unlimited" /}}</div>
<div class="max_limited"><input type="radio" name="max_users" value="limited" {{if !channel_flag_maxclients_unlimited}}checked{{/if}}>{{tr "Limited" /}}
2018-08-13 15:50:55 +00:00
<input style="margin-left: 25px;" class="value channel_maxclients" value="{{:channel_maxclients}}" type="number" min="0" max="99999999"></div>
</fieldset>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Family Max users" /}}</div>
2018-08-13 15:50:55 +00:00
<div class="content max_users">
<fieldset>
<div><input type="radio" name="max_users_family" value="inherited" {{if channel_flag_maxfamilyclients_inherited}}checked{{/if}}>{{tr "Inherited" /}}</div>
<div><input type="radio" name="max_users_family" value="infinity" {{if channel_flag_maxfamilyclients_unlimited}}checked{{/if}}>{{tr "Unlimited" /}}</div>
<div class="max_limited"><input type="radio" name="max_users_family" value="limited" {{if !channel_flag_maxfamilyclients_unlimited && !channel_flag_maxfamilyclients_inherited}}{{tr "checked" /}}{{/if}}>{{tr "Limited" /}}
2018-08-13 15:50:55 +00:00
<input style="margin-left: 25px;" class="value channel_maxfamilyclients" type="number" value="{{:channel_maxfamilyclients}}" min="0" max="99999999"></div>
</fieldset>
</div>
</div>
</div>
</x-content>
2018-02-27 16:20:49 +00:00
</x-entry>
</x-tab>
2018-06-24 11:38:53 +00:00
</script>
<script class="jsrender-template" id="tmpl_server_edit" type="text/html">
2018-08-11 13:02:11 +00:00
<div class="align_column properties_general server_properties">
<div class="properties">
<a class="key">{{tr "Name:" /}}</a>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_name" value="{{>virtualserver_name}}"/>
<a class="key">{{tr "Phonetic Name:" /}}</a>
2018-08-13 11:06:42 +00:00
<input class="value virtualserver_name_phonetic" value="{{>virtualserver_name_phonetic}}"/>
2018-08-11 13:02:11 +00:00
<a class="key">{{tr "Password:" /}}</a>
2018-08-11 13:02:11 +00:00
<!-- Use a random id to trick the default browser password manager. (I think something like a default password is really useless and -->
<!-- Just display a random value here-->
<input class="value virtualserver_password" type="password" id="field_server_password_{{rnd '0~13377331'/}}" {{if virtualserver_flag_password}} value="WolverinDEV"{{/if}}/>
</div>
<hr>
<div class="properties">
<a>{{tr "Maximum Clients:" /}}</a>
2018-08-11 13:02:11 +00:00
<div>
<input type="number" min="0" max="1024" value="{{:virtualserver_maxclients}}" class="value virtualserver_maxclients">
<a>{{tr "Reserved slots:" /}}</a>
2018-08-11 13:02:11 +00:00
<input type="number" min="0" max="{{*: data.virtualserver_maxclients - 1 }}" value="{{:virtualserver_reserved_slots}}" class="value virtualserver_reserved_slots">
</div>
<div class="key">{{tr "Welcome Message:" /}}</div>
2018-08-11 13:02:11 +00:00
<textarea class="value virtualserver_welcomemessage">{{>virtualserver_welcomemessage}}</textarea>
</div>
<hr>
</div>
<div style="margin-bottom: 5px"></div>
<x-tab>
<x-entry>
<x-tag>{{tr "Host" /}}</x-tag>
2018-08-11 13:02:11 +00:00
<x-content>
<div class="container properties_host">
<div class="group_box">
<div class="header">{{tr "Binding" /}}</div>
2018-08-11 13:02:11 +00:00
<div class="content">
<div class="properties">
<div class="key">{{tr "Host:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_host" value="{{>virtualserver_host}}"/>
<div class="key">{{tr "Port:" /}}</div>
2018-08-11 13:02:11 +00:00
<input type="number" min="1" max="65536" value="{{:virtualserver_port}}" class="value virtualserver_port">
</div>
<a>{{tr "Note: These settings require a virtual server restart to take effect!" /}}</a>
2018-08-11 13:02:11 +00:00
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Host message" /}}</div>
2018-08-11 13:02:11 +00:00
<div class="content properties">
<div class="key">{{tr "Message:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostmessage" value="{{>virtualserver_hostmessage}}"/>
<div class="key">{{tr "Message Mode:" /}}</div>
2018-08-11 13:02:11 +00:00
<select class="value virtualserver_hostmessage_mode">
<option value="none">{{tr "No message" /}}</option>
<option value="log">{{tr "Show message in log" /}}</option>
<option value="modal">{{tr "Show message as modal" /}}</option>
<option value="modal_exit">{{tr "Show message as modal and disconnect the client" /}}</option>
2018-08-11 13:02:11 +00:00
</select>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Host banner" /}}</div>
2018-08-11 13:02:11 +00:00
<div class="content properties">
<div class="key">{{tr "URL:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostbanner_url" value="{{>virtualserver_hostbanner_url}}"/>
<div class="key">{{tr "Banner Gfx URL:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostbanner_gfx_url" value="{{>virtualserver_hostbanner_gfx_url}}"/>
<div class="key">{{tr "Gfx Interval:" /}}</div>
2018-08-11 13:02:11 +00:00
<div class="value">
<input type="number" min="60" value="{{:virtualserver_hostbanner_gfx_interval}}" class="value virtualserver_hostbanner_gfx_interval">
<a>{{tr "Resize:" /}}</a>
2018-08-11 13:02:11 +00:00
<select class="value virtualserver_hostbanner_mode">
<option value="none">{{tr "Do not adjust" /}}</option>
<option value="ignore_ratio">{{tr "Adjust but ignore ratio aspect" /}}</option>
<option value="keep_ratio">{{tr "Adjust and keep ratio aspect" /}}</option>
2018-08-11 13:02:11 +00:00
</select>
</div>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Host Button" /}}</div>
2018-08-11 13:02:11 +00:00
<div class="content properties">
<div class="key">{{tr "Tooltip:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostbutton_tooltip" value="{{>virtualserver_hostbutton_tooltip}}"/>
<div class="key">{{tr "URL:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostbutton_url" value="{{>virtualserver_hostbutton_url}}"/>
<div class="key">{{tr "Icon URL:" /}}</div>
2018-08-11 13:02:11 +00:00
<input class="value virtualserver_hostbutton_gfx_url" value="{{>virtualserver_hostbutton_gfx_url}}"/>
</div>
</div>
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Transfers" /}}</x-tag>
2018-11-04 13:20:38 +00:00
<x-content>
<div class="container-file-transfer">
<div class="group_box">
<div class="header">{{tr "Upload" /}}</div>
2018-11-04 13:20:38 +00:00
<div class="content settings">
<div class="setting">
<div class="key">{{tr "Bandwidth Limit:" /}}</div>
2018-11-04 13:20:38 +00:00
<input type="number" class="value virtualserver_max_upload_total_bandwidth" value="{{>virtualserver_max_upload_total_bandwidth}}"/>
<div class="suffix">{{tr "Bytes/s" /}}</div>
2018-11-04 13:20:38 +00:00
</div>
<div class="setting">
<div class="key">{{tr "Upload Quota:" /}}</div>
2018-11-04 13:20:38 +00:00
<input type="number" class="value virtualserver_upload_quota" value="{{>virtualserver_upload_quota}}"/>
<div class="suffix">{{tr "MiB" /}}</div>
2018-11-04 13:20:38 +00:00
</div>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Download" /}}</div>
2018-11-04 13:20:38 +00:00
<div class="content settings">
<div class="setting">
<div class="key">{{tr "Bandwidth Limit:" /}}</div>
2018-11-04 13:20:38 +00:00
<input type="number" class="value virtualserver_max_download_total_bandwidth" value="{{>virtualserver_max_download_total_bandwidth}}"/>
<div class="suffix">{{tr "Bytes/s" /}}</div>
2018-11-04 13:20:38 +00:00
</div>
<div class="setting">
<div class="key">{{tr "Download Quota:" /}}</div>
2018-11-04 13:20:38 +00:00
<input type="number" class="value virtualserver_download_quota" value="{{>virtualserver_download_quota}}"/>
<div class="suffix">{{tr "MiB" /}}</div>
2018-11-04 13:20:38 +00:00
</div>
</div>
</div>
</div>
</x-content>
2018-08-11 13:02:11 +00:00
</x-entry>
<x-entry>
<x-tag>{{tr "Anti-Flood" /}}</x-tag>
<x-content>
<div class="container properties_flood">
<div class="properties">
<div class="key">{{tr "Reduced points per tick:" /}}</div>
<input type="number" min="1" max="65536" value="{{:virtualserver_antiflood_points_tick_reduce}}" class="value virtualserver_antiflood_points_tick_reduce">
<div class="key">{{tr "Points needed to block commands:" /}}</div>
<input type="number" min="1" max="65536" value="{{:virtualserver_antiflood_points_needed_command_block}}" class="value virtualserver_antiflood_points_needed_command_block">
<div class="key">{{tr "Points needed to block IP:" /}}</div>
<input type="number" min="1" max="65536" value="{{:virtualserver_antiflood_points_needed_ip_block}}" class="value virtualserver_antiflood_points_needed_ip_block">
</div>
</div>
</x-content>
2018-08-11 13:02:11 +00:00
</x-entry>
<x-entry>
<x-tag>{{tr "Security" /}}</x-tag>
2018-08-13 11:06:42 +00:00
<x-content>
<div class="container properties_security">
<div class="properties">
<div class="key">{{tr "Needed Security Level:" /}}</div>
2018-08-13 11:06:42 +00:00
<input type="number" min="1" max="64" value="{{:virtualserver_needed_identity_security_level}}" class="value virtualserver_needed_identity_security_level">
<div class="key">{{tr "Channel voice data encryption:" /}}</div>
2018-08-13 11:06:42 +00:00
<select class="value virtualserver_codec_encryption_mode">
<option value="unset">{{tr "Edit per channel individually" /}}</option>
<option value="off">{{tr "Globally disabled" /}}</option>
<option value="on">{{tr "Globally enabled (recommended)" /}}</option>
2018-08-13 11:06:42 +00:00
</select>
</div>
</div>
</x-content>
2018-08-11 13:02:11 +00:00
</x-entry>
<x-entry>
<x-tag>{{tr "Misc" /}}</x-tag>
2018-08-13 11:06:42 +00:00
<x-content>
<div class="container properties_misc">
<div class="group_box">
<div class="header">{{tr "Default groups" /}}</div>
2018-08-13 11:06:42 +00:00
<div class="content properties">
<div class="key">{{tr "Server group" /}}</div>
2018-08-13 11:06:42 +00:00
<select class="value default_server_group"></select>
<div class="key">{{tr "Music bot group" /}}</div>
<select class="value default_music_group"></select>
<div class="key">{{tr "Channel group" /}}</div>
2018-08-13 11:06:42 +00:00
<select class="value default_channel_group"></select>
<div class="key">{{tr "Channel Admin group" /}}</div>
2018-08-13 11:06:42 +00:00
<select class="value default_channel_admin_group"></select>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Complain" /}}</div>
2018-08-13 11:06:42 +00:00
<div class="content complains">
<div class="key">{{tr "Autoban Count" /}}</div>
<div class="key">{{tr "Autoban Time" /}}</div>
<div class="key">{{tr "Remove Time" /}}</div>
2018-08-13 11:06:42 +00:00
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_autoban_count}}" class="value virtualserver_complain_autoban_count">
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_autoban_time}}" class="value virtualserver_complain_autoban_time">
<input type="number" min="1" max="65536" value="{{:virtualserver_complain_remove_time}}" class="value virtualserver_complain_remove_time">
</div>
</div>
<div class="properties">
<div class="key">{{tr "Minimum clients is channel before silence:" /}}</div>
2018-08-13 11:06:42 +00:00
<input type="number" min="1" max="65536" value="{{:virtualserver_min_clients_in_channel_before_forced_silence}}" class="value virtualserver_min_clients_in_channel_before_forced_silence">
<div class="key">{{tr "Priority speaker dim modificator:" /}}</div>
2018-08-13 11:06:42 +00:00
<input type="number" min="-100" max="0" value="{{:virtualserver_priority_speaker_dimm_modificator}}" class="value virtualserver_priority_speaker_dimm_modificator">
<div class="key">{{tr "Delete delay for temporary channels" /}}</div>
2018-08-13 11:06:42 +00:00
<input type="number" min="1" max="65536" value="{{:virtualserver_channel_temp_delete_delay_default}}" class="value virtualserver_channel_temp_delete_delay_default">
</div>
<div class="group_box">
<div class="header">{{tr "Server list" /}}</div>
2018-08-13 11:06:42 +00:00
<div class="content">
<input type="checkbox" class="value virtualserver_weblist_enabled" checked="{{:virtualserver_weblist_enabled}}"> {{tr "Enable reporting to the TeamSpeak server list" /}}<br>
<input type="checkbox" class="value" checked="false" disabled> {{tr "<del>Enable reporting to the TeaSpeak server list</del> (TeaSpeak does not support this setting)" /}}
2018-08-13 11:06:42 +00:00
</div>
</div>
</div>
</x-content>
2018-08-11 13:02:11 +00:00
</x-entry>
2018-08-13 11:06:42 +00:00
<!-- TeaSpeak don't have any configurable log section
2018-08-11 13:02:11 +00:00
<x-entry>
<x-tag>Log</x-tag>
<x-content>TODO!</x-content>
</x-entry>
2018-08-13 11:06:42 +00:00
-->
2018-08-11 13:02:11 +00:00
<x-entry>
<x-tag>{{tr "Messages" /}}</x-tag>
<x-content>
<div> <!-- We have to move the shit one layer up -->
<div class="container properties_messages">
<div class="group_box">
<div class="header">{{tr "Channel" /}}</div>
<div class="content properties">
<div class="key">{{tr "Default Topic:" /}}</div>
<textarea class="value virtualserver_default_channel_topic">{{>virtualserver_default_channel_topic}}</textarea>
<div class="key">{{tr "Default Description" /}}</div>
<textarea class="value virtualserver_default_channel_description">{{>virtualserver_default_channel_description}}</textarea>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Client" /}}</div>
<div class="content properties">
<div class="key">{{tr "Default Description" /}}</div>
<textarea class="value virtualserver_default_client_description">{{>virtualserver_default_client_description}}</textarea>
</div>
</div>
{{tr "Note: These settings require a virtual server restart to take effect!" /}}
</div>
</div>
</x-content>
2018-08-11 13:02:11 +00:00
</x-entry>
</x-tab>
</script>
2018-03-24 22:38:01 +00:00
<!-- Template for the settings -->
<script class="jsrender-template" id="tmpl_settings" type="text/html">
2018-03-07 18:06:52 +00:00
<x-tab>
<x-entry>
<x-tag>{{tr "General"/}}</x-tag>
<x-content>{{tr "Didnt setuped yet!"/}}</x-content>
2018-03-07 18:06:52 +00:00
</x-entry>
<x-entry>
<x-tag>{{tr "Audio" /}}</x-tag>
2018-03-07 18:06:52 +00:00
<x-content>
<div class="settings_audio">
<div class="group_box">
<div class="header">{{tr "Microphone" /}}</div>
<div class="content settings-microphone">
<div class="settings-device settings-device-microphone">
<div class="settings-device-error"></div>
<div class="settings-device-select">
<a>{{tr "Device:" /}}</a>
<div><select class="audio-select-microphone"></select></div>
2018-03-17 07:05:37 +00:00
</div>
</div>
<div class="settings-vad-container">
<div class="group_box">
<div class="header">{{tr "Voice Activity Detection"/}}</div>
<div class="content">
<fieldset>
<div><input type="radio" name="vad_type" value="pt" display="Always active"> {{tr "Always active" /}}</div>
<div><input type="radio" name="vad_type" value="vad" display="Voice activity detection"> {{tr "Voice activity detection"/}}</div>
<div><input type="radio" name="vad_type" value="ppt" display="Push to talk"> {{tr "Push to talk"/}}</div>
</fieldset>
</div>
</div>
<div class="settings-vad-impl">
<div class="settings-vad-impl-entry setting-vad-pt">
{{tr "There are no setting entries for an <b>always</b> online voice detection."/}}
</div>
<div class="settings-vad-impl-entry setting-vad-ppt">
<a>{{tr "Push to talk key:"/}}</a>
<button class="vat_ppt_key">{{tr "Uninitialised"/}}</button>
</div>
<div class="settings-vad-impl-entry setting-vad-vad">
<div>{{tr "Voice activity threshold (<a class='vad_vad_slider_value'>20</a>%)"/}}</div>
<div class="vad_vad_threshold_selector">
<div class="vad_vad_bar">
<div style="width: 100%; height: 100%; position: absolute">
<div class="vad_vad_bar_filler"></div>
</div>
<input type="range" min="0" max="100" value="50" class="vad_vad_slider">
2018-03-17 07:05:37 +00:00
</div>
2018-03-08 14:40:31 +00:00
</div>
</div>
2018-03-07 18:06:52 +00:00
</div>
</div>
</div>
</div>
<div class="group_box">
<div class="header">{{tr "Speaker" /}}</div>
<div class="content settings-speaker">
<div class="settings-device settings-device-speaker">
<div class="settings-device-error"></div>
<div class="settings-device-select">
<a>{{tr "Device:" /}}</a>
<div><select class="audio-select-speaker"></select></div>
</div>
</div>
</div>
</div>
2018-03-07 18:06:52 +00:00
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>
{{tr "Translations" /}}
</x-tag>
<x-content>
<div class="settings-translations">
<div class="group_box">
<div class="header">{{tr "Available translations" /}}</div>
<div class="content settings-microphone">
<div class="setting-list">
<div class="list">
<!--
<div class="entry default">{{tr "English (Default / Fallback)" /}}</div>
<div class="entry repository">
<div class="name">TeaSpeak Official</div>
<div class="button button-delete"><div class="icon client-delete"></div></div>
<div class="button button-info"><div class="icon client-about"></div></div>
</div>
<div class="entry translation selected">
<div class="name">German (Google Translate)</div>
<div class="button button-info"><div class="icon client-about"></div></div>
</div>
-->
</div>
<div class="management">
<div class="loading">Loading...</div><div class="space"></div><button class="button-add-repository">{{tr "Add repository" /}}</button>
</div>
<div class="restart-note">
<p>
{{tr "Attention: These settings get only affected after a restart or reload!" /}}
</p>
<button class="button-reload">{{tr "reload now" /}}</button>
</div>
</div>
</div>
</div>
</div>
</x-content>
</x-entry>
2018-03-07 18:06:52 +00:00
</x-tab>
2018-06-24 11:38:53 +00:00
</script>
<script class="jsrender-template" id="settings-translations-list-entry" type="text/html">
{{if type == "repository" }}
<div class="entry repository" repository="{{:id}}">
<div class="name">{{> name}}</div>
<div class="button button-delete"><div class="icon client-delete"></div></div>
<div class="button button-info"><div class="icon client-about"></div></div>
</div>
{{else type == "default" }}
<div class="entry default {{if selected}}selected{{/if}}">{{tr "English (Default / Fallback)" /}}</div>
{{else}}
<div class="entry translation {{if selected}}selected{{/if}}" parent-repository="{{:id}}">
<div class="name">{{> name}}</div>
<div class="button button-info"><div class="icon client-about"></div></div>
</div>
{{/if}}
</script>
<script class="jsrender-template" id="settings-translations-list-entry-info" type="text/html">
<div class="entry-info-container">
{{if type == "repository" }}
<!--
unique_id: string;
url: string;
name?: string;
contact?: string;
translations?: RepositoryTranslation[];
load_timestamp?: number;
-->
<div class="property property-name"><div class="key">Name:</div><div class="value">{{>name}}</div></div>
<div class="property property-url"><div class="key">URL:</div><div class="value">{{>url}}</div></div>
<div class="property property-contact"><div class="key">Contact:</div><div class="value">{{>contact}}</div></div>
<div class="property property-translations"><div class="key">Translations:</div><div class="value">{{:translations.length}}</div></div>
{{else}}
<!--
name: string;
contributors: Contributor[];
-->
<div class="property property-name"><div class="key">Name:</div><div class="value">{{>name}}</div></div>
<div class="property property-url"><div class="key">URL:</div><div class="value">{{>url}}</div></div>
<div class="property property-repository">
<div class="key">Repository:</div>
<div class="value">
<p>{{>repository_name}}</p>
<div class="button button-info"><div class="icon client-about"></div></div>
</div>
</div>
{{if !contributors }}
{{else contributors.length == 1}}
<div class="property property-contributor">
<div class="key">Contributor:</div>
<div class="value">
{{>contributors[0].name}}
{{if contributors[0].email}}
&nbsp&lt;{{>contributors[0].email}}&gt;
{{/if}}
</div>
</div>
{{else}}
<div class="property property-contributors">
<div class="key">Contributors:</div>
<div class="value">
{{for contributors}}
<div class="contributor">
{{>name}}
{{if email}}
&nbsp&lt;{{>email}}&gt;
{{/if}}
</div>
{{/for}}
</div>
</div>
{{/if}}
{{/if}}
</div>
</script>
<script class="jsrender-template" id="tmpl_change_volume" type="text/html">
2018-04-11 15:56:09 +00:00
<div style="display: flex; justify-content: center; vertical-align: center">
<input type="range" min="0" max="200" value="100" class="volume_slider" style="width: 100%">
<div class="display_volume" style="width: 60px; align-self: center; text-align: center">&plusmn;0 %</div>
</div>
2018-06-24 11:38:53 +00:00
</script>
2018-09-30 19:50:59 +00:00
<!-- Permission overview -->
<script class="jsrender-template" id="tmpl_server_permissions" type="text/html">
2018-09-30 19:50:59 +00:00
<x-tab>
<x-entry>
<x-tag>{{tr "Server Groups" /}}</x-tag>
2018-09-30 19:50:59 +00:00
<x-content>
<div class="layout-group-server">
<div class="list-group-server">
<div class="entries"></div>
</div>
<div class="horizontal-stretch">
<node key="permissions_group_server"/>
</div>
2018-09-30 19:50:59 +00:00
<div class="list-group-server-clients"></div>
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Channel Groups" /}}</x-tag>
2018-09-30 19:50:59 +00:00
<x-content>
<div class="layout-group-channel">
<div class="list-group-channel">
<div class="entries"></div>
</div>
<div class="horizontal-stretch">
<node key="permissions_group_channel"/>
</div>
2018-09-30 19:50:59 +00:00
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Channel permissions" /}}</x-tag>
2018-09-30 19:50:59 +00:00
<x-content>
<div class="layout-channel">
<div class="list-channel">
<div class="entries"></div>
</div>
<div class="horizontal-stretch">
<node key="permissions_channel"/>
</div>
2018-09-30 19:50:59 +00:00
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Client permissions"/}}</x-tag>
2018-09-30 19:50:59 +00:00
<x-content>
<div class="layout-client">
<div class="client-info">
<div class="client-select">
<a>{{tr "Client unique ID:"/}}</a>
2018-09-30 19:50:59 +00:00
<input type="text" class="client-select-uid">
</div>
<hr>
<div class="client-info">
<a>{{tr "Nickname:" /}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-name">
<a>{{tr "Unique ID:" /}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-uid">
<a>{{tr "Client database ID:" /}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-dbid">
</div>
</div>
<div class="horizontal-stretch">
<node key="permissions_client"/>
</div>
2018-09-30 19:50:59 +00:00
</div>
</x-content>
</x-entry>
<x-entry>
<x-tag>{{tr "Client channel permissions" /}}</x-tag>
2018-09-30 19:50:59 +00:00
<x-content>
<div class="layout-client-channel">
<div class="client-info">
<div class="client-select">
<a>{{tr "Client unique ID:"/}}</a>
2018-09-30 19:50:59 +00:00
<input type="text" class="client-select-uid">
</div>
<hr>
<div class="client-info">
<a>{{tr "Nickname:"/}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-name">
<a>{{tr "Unique ID:" /}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-uid">
<a>{{tr "Client database ID:" /}}</a>
2018-09-30 19:50:59 +00:00
<input class="client-dbid">
</div>
<hr>
<div class="list-channel">
<div class="entries"></div>
</div>
</div>
<div class="horizontal-stretch">
<node key="permissions_client_channel"/>
</div>
2018-09-30 19:50:59 +00:00
</div>
</x-content>
</x-entry>
</x-tab>
</script>
<script class="jsrender-template" id="tmpl_server_group_assignment" type="text/html">
2018-09-30 19:50:59 +00:00
<div class="group-assignment-list">
<a>{{tr "Changing groups of" /}} <b>{{>client_name}}</b></a>
2018-09-30 19:50:59 +00:00
<div class="group-list">
{{for groups}}
<div class="group-entry">
<label class="checkbox {{if disabled}}disabled{{/if}}">
<input type="checkbox" group-id="{{>id}}" {{if assigned}}checked{{/if}}>
<span class="checkmark"></span>
</label>
<node key="icon_{{>id}}"></node>
<a>{{>name}} ({{>id}})</a>
</div>
{{/for}}
</div>
</div>
</script>
<script class="jsrender-template" id="tmpl_permission_entry" type="text/html">
{{if type == "entry"}}
<div class="entry {{if unset}}unset{{/if}} permission {{>permission_name}}">
<div class="permission-name filter-key">{{>permission_name}}</div>
<div class="permission-value">
{{if permission_name.startsWith("b_") }}
<label class="checkbox">
<input type="checkbox">
<span class="checkmark"></span>
</label>
{{else}}
<input type="number" min-value="-1" max-value="9999999999" />
{{/if}}
2018-09-30 19:50:59 +00:00
</div>
<div class="permission-skip">
<label class="checkbox">
<input type="checkbox">
<span class="checkmark"></span>
</label>
2018-09-30 19:50:59 +00:00
</div>
<div class="permission-negate">
<label class="checkbox">
<input type="checkbox">
<span class="checkmark"></span>
</label>
</div>
<div class="permission-grant">
<input type="number" min-value="-1" max-value="9999999999" />
2018-09-30 19:50:59 +00:00
</div>
</div>
{{else}}
<div class="entry group tab-show-partitional">
2018-09-30 19:50:59 +00:00
<div class="title"><div class="arrow down"></div><a>{{>name}}</a></div>
<div class="group-entries">
{{for entries tmpl="tmpl_permission_entry"/}}
</div>
</div>
{{/if}}
</script>
<script class="jsrender-template" id="tmpl_permission_explorer" type="text/html">
<div class="container-permissions">
<div class="align_row permission-explorer">
<div class="bar-filter">
<div><a>{{tr "Filter:" /}}</a></div>
<div><input type="text" class="filter-input"></div>
<div><input type="checkbox" class="filter-granted"><a>{{tr "Show granted permissions only" /}}</a></div>
</div>
<div class="list">
<div class="entry header">
<div>{{tr "Permission Name" /}}</div>
<div>{{tr "Value" /}}</div>
<div>{{tr "Skip" /}}</div>
<div>{{tr "Negate" /}}</div>
<div>{{tr "Granted" /}}</div>
</div>
<div class="entries">
{{for permissions tmpl="tmpl_permission_entry" /}}
</div>
<!--
<div class="entry">
<div>this_is_a_test_permission</div>
<div>value</div>
<div>skip</div>
<div>negate</div>
<div>granted</div>
</div>
<div class="entry group">
<div class="title"><div class="arrow right"></div><a>Test group</a></div>
<div class="group-entries">
<div class="entry">
<div>Grouped entry A</div>
<div>value</div>
<div>skip</div>
<div>negate</div>
<div>granted</div>
</div>
<div class="entry">
<div>Grouped entry B</div>
<div>value</div>
<div>skip</div>
<div>negate</div>
<div>granted</div>
</div>
</div>
</div>
-->
<div class="overlay-disabled"></div>
</div>
<div>
<button class="button-update"><div class="icon client-check_update"></div> {{tr "Update" /}}</button>
</div>
2018-09-30 19:50:59 +00:00
</div>
</div>
</script>
<!-- General management templates -->
<script class="jsrender-template" id="tmpl_ban_list" type="text/html">
<div class="banlist">
<div class="frame-container">
<div class="top-menu">
<div class="manage-buttons">
<button class="button-add">{{tr "Add" /}}</button>
<button class="button-edit">{{tr "Edit" /}}</button>
<button class="button-remove">{{tr "Remove" /}}</button>
</div>
<div class="search">
<input type="text" class="entry-filter">
</div>
</div>
<div class="entry-container">
<div class="table-container">
<table>
<thead>
<tr>
<th class="field-properties">{{tr "Name/IP/UID/HWID"/}}</th>
<th class="field-reason">{{tr "Reason"/}}</th>
<th class="field-invoker">{{tr "Creator"/}}</th>
<th class="field-timestamp">{{tr "Created / Expires"/}}</th>
</tr>
</thead>
<tbody class="ban-entry-list">
<!--
<tr class="ban-entry">
<td class="field-properties">
<a class="property property-name">name=WolverasdasdinDEV</a>
<a class="property property-ip">ip=WolverasdasdinDEV</a>
<a class="property property-unique-id">uid=WolverasdasdinDEV</a>
<a class="property property-hardware-id">hwid=WolverasdasdinDEV</a>
</td>
<td class="field-reason">Insult</td>
<td class="field-invoker">WolverinDEV</td>
<td class="field-timestamp">1.1.2013 12:22 / 1.21.2013 12:22</td>
</tr>
<tr class="ban-entry">
<td class="field-properties">
<a class="property property-name">name=WolverasdasdinDEV</a>
<a class="property property-ip">ip=WolverasdasdinDEV</a>
<a class="property property-unique-id">uid=WolverasdasdinDEV</a>
<a class="property property-hardware-id">hwid=WolverasdasdinDEV</a>
</td>
<td class="field-reason">Insult</td>
<td class="field-invoker">WolverinDEV</td>
<td class="field-timestamp">
<a class="timestamp-created">Created: 1.1.2013 12:22</a>
<a class="timestamp-expires">Expires: 1.21.2013 12:22</a>
</td>
</tr>
-->
</tbody>
</table>
</div>
</div>
<div class="bottom-menu">
<div class="left">
<button class="button-refresh">{{tr "Reload"/}}</button>
<div><input type="checkbox" class="filter-flag-force-own"> {{tr "Show only own bans" /}}</div>
<div><input type="checkbox" class="filter-flag-highlight-own"> {{tr "Highlight own bans" /}}</div>
</div>
<div class="right">
<a class="entry-count-info"></a>
<button class="button-close">{{tr "Close" /}}</button>
</div>
</div>
</div>
</div>
</script>
<script class="jsrender-template" id="tmpl_client_ban" type="text/html">
<div class="align_column">
<div class="align_column" style="margin: 5px">
<a>{{tr "Name:" /}}</a>
<input value="{{>client_name}}" readonly>
</div>
<div class="align_column" style="margin: 5px">
<a>{{tr "Reason:" /}}</a>
<textarea style="height: 32px; resize: vertical; max-height: 150px; min-height: 32px" maxlength="512" class="ban_reason"></textarea>
</div>
<div class="align_row" style="margin: 5px; justify-content: space-between">
<a>{{tr "Duration:" /}}</a>
<div class="align_row">
<input type="number" value="1" class="ban_duration" style="margin-right: 7px" min="1">
<select class="ban_duration_type">
<option value="sec">{{tr "seconds"/}}</option>
<option value="min">{{tr "minutes"/}}</option>
<option value="hours">{{tr "hours"/}}</option>
<option value="days">{{tr "days"/}}</option>
<option value="perm">{{tr "permanent"/}}</option>
</select>
</div>
</div>
<div class="group_box container-ban-type">
<div class="header">{{tr "Ban client by"/}}</div>
<div class="content ban-types">
<div>
<input type="checkbox" class="ban-type-nickname">
<a>{{tr "Nickname"/}}</a>
<div class="help-tip tip-right tip-small" checked>
<p>
{{tr "Bans the client by his current nickname.<br>" +
"The currently nickname cant be used until the ban expired"/}}
</p>
</div>
</div>
<div>
<input type="checkbox" class="ban-type-hardware-id" checked>
<a>{{tr "Hardware ID" /}}</a>
<div class="help-tip tip-right tip-small">
<p>
{{tr "Bans the client by his hardware id.<br>" +
"The hardware id has different meanings, depends on the users agent<br>" +
"TeaClient: The hardware id will be equal to the mac address<br>" +
"TeaWeb: The TeaSpeak web client hasn't a hardware id, it will be random<br>" +
"TeamSpeak 3 client: The hardware id will be a result of some hashes from hardware specific properties" /}}
</p>
</div>
</div>
<div>
<input type="checkbox" class="ban-type-ip" checked>
<a>{{tr "IP Address" /}}</a>
</div>
</div>
</div>
</div>
</script>
//TODO tr downwards
<script class="jsrender-template" id="tmpl_ban_entry" type="text/html">
<tr class="ban-entry {{if server_id == 0}}ban-entry-global{{/if}} {{if flag_own}}ban-entry-own{{/if}}" ban-id={{>banid}} server-id={{>server_id}}>
<td class="field-properties">
{{if name }}<a class="property property-name">name={{>name}}</a>{{/if}}
{{if ip }} <a class="property property-ip">ip={{>ip}}</a>{{/if}}
{{if unique_id }} <a class="property property-unique-id">uid={{>unique_id}}</a>{{/if}}
{{if hardware_id }}<a class="property property-hardware-id">hwid={{>hardware_id}}</a>{{/if}}
</td>
<td class="field-reason">{{>reason}}</td>
<td class="field-invoker">{{>invoker_name}}</td>
<td class="field-timestamp">
<a class="timestamp-created">{{tr "Created:" /}} {{fmt_date timestamp_created "DD.MM.YYYY HH:mm" /}}</a>
<a class="timestamp-expire">{{tr "Expire:" /}} {{if (!timestamp_expire || timestamp_expire.getTime() == 0) }}never{{else}}{{fmt_date timestamp_expire "DD.MM.YYYY HH:mm" /}}{{/if}}</a>
</td>
</tr>
</script>
<!-- `hwid` VARCHAR(" CLIENT_UID_LENGTH "), `uid` VARCHAR(" CLIENT_UID_LENGTH "), `name` VARCHAR(" CLIENT_NAME_LENGTH "), `ip` VARCHAR(128) -->
<script class="jsrender-template" id="tmpl_ban_create" type="text/html">
<div class="bancreate">
<div class="frame-container">
<div class="container container-ip">
<a>{{tr "IP:" /}}</a>
<input class="input-ip" type="text" maxlength="128">
</div>
<div class="container container-name">
<a>{{tr "Name:" /}}</a>
<input class="input-name" type="text" maxlength="128">
<div class="container-name-type">
<a>{{tr "Interpret IP/Name as:" /}}</a>
<select class="input-name-type">
<option value="wildcard-4">{{tr "Wildcard IPv4" /}}</option>
<option value="wildcard-6">{{tr "Wildcard IPv6" /}}</option>
<option value="fixed" selected>{{tr "Fixed string" /}}</option>
<option value="regex">{{tr "Regular Expression" /}}</option>
</select>
</div>
</div>
<div class="container container-uid">
<a>{{tr "Unique ID:" /}}</a>
<div><input class="input-uid" type="text" maxlength="64"></div>
</div>
<div class="container container-hwid">
<a>{{tr "Hardware ID:" /}}</a>
<input class="input-hwid" type="text" max="64">
</div>
<div class="container container-reason">
<a>{{tr "Reason" /}}</a>
<textarea class="input-reason"></textarea>
</div>
<div class="container container-time">
<a>{{tr "Duration" /}}</a>
<div class="container-time-input">
<input type="number" value="1" class="input-time" style="margin-right: 7px" min="1">
<select class="input-time-unit">
<option value="sec">{{tr "seconds"/}}</option>
<option value="min">{{tr "minutes"/}}</option>
<option value="hours">{{tr "hours"/}}</option>
<option value="days">{{tr "days"/}}</option>
<option value="perm">{{tr "permanent"/}}</option>
</select>
</div>
</div>
<div class="footer">
<div>
<div class="container-global">
<input type="checkbox" class="input-global">
<a>{{tr "Use this ban as a global ban" /}}</a>
<div class="help-tip tip-center tip-small">
<p>
{{tr "Global bans are bans which apply instance wide.<br>" +
"This means that (if this rule apply to a victim) cant join <b>any</b> virtual server!<br>" +
"Global bans are by default shown to every server admin group,<br>" +
"but could only be created with query rights"/}}
</p>
</div>
</div>
</div>
<div class="container-buttons modal-button-group" style="text-align: right; margin-top: 3px; margin-bottom: 6px;">
<button class="button-close">{{tr "Cancel"/}}</button>
<button class="button-success">{{tr "OK"/}}</button>
</div>
</div>
</div>
</div>
</script>
2018-09-30 19:50:59 +00:00
<!-- Music interface -->
<script class="jsrender-template" id="tmpl_music_frame" type="text/html">
2018-06-24 11:38:53 +00:00
<!-- First we want to define some variables if not defined yet. -->
{{if !thumbnail}}
2018-08-10 19:30:58 +00:00
{{*
data.thumbnail = "img/music/no_thumbnail.svg";
}}
2018-06-24 11:38:53 +00:00
{{/if}}
2018-08-10 19:30:58 +00:00
{{*
if(!data.song_max_width) data.song_max_width = 300;
let width = calculate_width(data.song_name);
if(width > data.song_max_width)
data.song_use_scroller = true;
}}
2018-04-30 21:57:21 +00:00
<div class="music-wrapper">
<div class="container">
<div class="left">
<div class="static-card">
2018-06-24 11:38:53 +00:00
<img src="{{:thumbnail}}" alt="Thumbnail" class="thumbnail">
2018-04-30 21:57:21 +00:00
</div>
</div>
<div class="right">
<div class="controls hover">
<label class="btn-forward"><span></span></label>
<label class="btn-rewind"><span></span></label>
<label class="btn-settings"><span></span></label>
</div>
<div class="flip-card">
2018-06-24 11:38:53 +00:00
<img src="{{:thumbnail}}" alt="Thumbnail" class="thumbnail">
2018-04-30 21:57:21 +00:00
</div>
</div>
</div>
<div class="controls-overlay">
<div class="timer">
<div class="button-container">
<div class="container-play-pause">
<div class="button button_play">
<svg x="0px" y="0px" viewBox="0 0 4.5 6.9" style="enable-background:new 0 0 4.5 6.9;">
<defs>
<filter id="shadow_play" title="Start replaying">
<feDropShadow dx="4" dy="8" stdDeviation="4"/>
</filter>
</defs>
<polyline style="filter:url(#shadow_play);" class="button" points="0.6,0.3 3.9,3.4 0.6,6.6 "></polyline>
</svg>
</div>
<div class="button button_pause" title="Pause the current song">
<svg x="0px" y="0px" viewBox="0 0 4.5 6.9" style="enable-background:new 0 0 4.5 6.9;">
<defs>
<filter id="shadow_pause">
<feDropShadow dx="4" dy="8" stdDeviation="4"/>
</filter>
</defs>
<g style="filter:url(#shadow_pause);">
<line x1="0.4" y1="0.1" x2="0.4" y2="6.8"></line>
<line x1="4.1" y1="0.1" x2="4.1" y2="6.8"></line>
</g>
</svg>
</div>
</div>
<div>
<div class="button button_stop" title="Stop the music bot">
<svg x="0px" y="0px" viewBox="0 0 4.5 6.9" style="enable-background:new 0 0 4.5 6.9;">
<defs>
<filter id="shadow_stop">
<feDropShadow dx="4" dy="8" stdDeviation="4"/>
</filter>
</defs>
<g style="filter:url(#shadow_stop);">
<rect x="0.25" y="1.45" width="4" height="4" fill="black"></rect>
</g>
</svg>
</div>
</div>
2018-04-30 21:57:21 +00:00
</div>
<div class="timeline">
<div class="buffered"></div>
<div class="played"></div>
<div class="slider"></div>
</div>
2018-08-10 19:30:58 +00:00
<div class="time player_time">--:--</div>
</div>
<div class="song">
{{if song_use_scroller}}
<div class="scroll-left">
<p class="name">{{>song_name}}</p>
</div>
{{else}}
<div class="name" style="">{{>song_name}}</div>
{{/if}}
2018-04-30 21:57:21 +00:00
</div>
</div>
</div>
2018-06-24 11:38:53 +00:00
</script>
<script class="jsrender-template" id="tmpl_music_frame_empty" type="text/html">
2018-04-30 21:57:21 +00:00
<div class="music-wrapper empty">
<img src="img/music/empty_disk.svg">
<a>{{tr "Not playing any music"/}}</a>
2018-04-30 21:57:21 +00:00
</div>
</script>
<script class="jsrender-template" id="tmpl_selected_client" type="text/html">
<table class="select_info_table">
<tr>
<td>{{tr "Name:" /}}</td>
<td><node key="client_name"/></td>
</tr>
{{if property_client_description.length > 0}}
<tr>
<td>{{tr "Description:"/}}</td>
<td>{{>property_client_description}}</td>
</tr>
{{/if}}
<tr>
<td>{{tr "Version:"/}}</td>
<td><a title="{{>property_client_version}}">{{*: data.property_client_version.split(" ")[0]; }}</a> on {{>property_client_platform}}</td>
</tr>
<tr>
<td>{{tr "Online since:"/}}</td>
<td class="update_onlinetime">{{:client_onlinetime}}</td>
</tr>
<tr>
<td>{{tr "Volume:"/}}</td>
<td>{{:sound_volume}}%</td>
</tr>
{{if client_teaforum_id > 0}}
<tr>
<td>{{tr "TeaSpeak Account:" /}}</td>
<td><a href="//forum.teaspeak.de/index.php?members/{{:property_client_teaforum_id}}" target="_blank">{{>property_client_teaforum_name}}</a></td>
</tr>
{{/if}}
</table>
<!-- Server groups -->
<div style="display: flex; flex-direction: column;">
<div style="display:flex;margin-top:5px;align-items:center">
<div class="icon client-permission_server_groups"></div>
<div style="margin-left:3px;font-weight:bold">{{tr "Server groups:"/}}</div>
</div>
{{for group_server}}
<div style="display: flex; margin-top: 1px; margin-left: 10px; align-items: center;">
<node key="group_{{:group_id}}_icon"/>
2018-09-30 20:47:41 +00:00
<div style="margin-left: 3px">{{>group_name}}</div>
</div>
{{/for}}
</div>
<!-- Channel group -->
<div style="display: flex; flex-direction: column; margin-bottom: 20px">
<div style="display:flex;margin-top:10px;align-items:center">
<div class="icon client-permission_channel"></div>
<div style="margin-left:3px;font-weight:bold">{{tr "Channel group:"/}}</div>
</div>
<div style="display: flex; margin-top: 1px; margin-left: 10px; align-items: center;">
<node key="group_{{:group_channel}}_icon"/>
<div style="margin-left: 3px">{{*: data["group_" + data.group_channel + "_name"]}}</div>
</div>
</div>
<!-- Costume tags/icons -->
2018-09-25 10:57:47 +00:00
<!-- Client is away -->
{{if property_client_away}}
<div style="display: inline-flex">
<div class="icon_x32 client-away" style="margin-right: 5px"></div>
<a style="align-self: center">{{tr "Away"/}}
2018-09-25 10:57:47 +00:00
{{if property_client_away_message && property_client_away_message.length > 0}}
({{>property_client_away_message}})
{{/if}}
</a>
</div>
{{/if}}
<!-- Speakers/Headphones disabled -->
{{if !property_client_output_hardware}}
<div style="display: inline-flex">
<div class="icon_x32 client-hardware_output_muted" style="margin-right: 5px"></div>
<a style="align-self: center">{{tr "Speakers/Headphones disabled"/}}</a>
</div>
{{/if}}
<!-- Microphone disabled -->
{{if !property_client_input_hardware}}
<div style="display: inline-flex">
<div class="icon_x32 client-hardware_input_muted" style="margin-right: 5px"></div>
<a style="align-self: center">{{tr "Microphone disabled"/}}</a>
</div>
{{/if}}
<!-- Speakers/Headphones Muted -->
{{if property_client_output_muted}}
<div style="display: inline-flex">
<div class="icon_x32 client-output_muted" style="margin-right: 5px"></div>
<a style="align-self: center">{{tr "Speakers/Headphones Muted"/}}</a>
</div>
{{/if}}
<!-- Microphone Muted -->
{{if property_client_input_muted}}
<div style="display: inline-flex">
<div class="icon_x32 client-input_muted" style="margin-right: 5px"></div>
<a style="align-self: center">{{tr "Microphone Muted"/}}</a>
</div>
{{/if}}
2018-08-12 14:38:38 +00:00
{{if property_client_flag_avatar && property_client_flag_avatar.length > 0}}
<div style="margin-top: 10px;">
2018-08-12 14:38:38 +00:00
<node key="client_avatar"/>
</div>
{{/if}}
</script>
<script class="jsrender-template" id="tmpl_selected_music" type="text/html">
2018-08-10 19:30:58 +00:00
<table class="select_info_table">
<tr>
<td>{{tr "Name:"/}}</td>
2018-08-10 19:30:58 +00:00
<td><node key="client_name"/></td>
</tr>
{{if property_client_description.length > 0}}
<tr>
<td>{{tr "Description:"/}}</td>
2018-08-10 19:30:58 +00:00
<td>{{>property_client_description}}</td>
</tr>
{{/if}}
<tr>
<td>{{tr "Livetime:"/}}</td>
2018-08-10 19:30:58 +00:00
<td class="update_onlinetime">{{:client_onlinetime}}</td>
</tr>
<!-- player_volume -->
<tr>
<td>{{tr "Remote Volume:"/}}</td>
2018-08-10 19:30:58 +00:00
<td>{{*: data.property_player_volume * 100 }}%</td>
</tr>
<tr>
<td>{{tr "Local Volume:"/}}</td>
2018-08-10 19:30:58 +00:00
<td>{{>sound_volume}}%</td>
</tr>
{{if song_url}}
<tr>
<td>{{tr "Currently replaying:"/}}</td>
<td><node key="song_url"></node></td>
</tr>
{{/if}}
2018-08-10 19:30:58 +00:00
<!-- TODO: Created by -->
</table>
<!-- Server groups -->
<div style="display: flex; flex-direction: column;">
<div style="display:flex;margin-top:5px;align-items:center">
<div class="icon client-permission_server_groups"></div>
<div style="margin-left:3px;font-weight:bold">{{tr "Server groups:"/}}</div>
2018-08-10 19:30:58 +00:00
</div>
{{for group_server}}
<div style="display: flex; margin-top: 1px; margin-left: 10px; align-items: center;">
<node key="group_{{:group_id}}_icon"/>
<div style="margin-left: 3px">{{:group_name}}</div>
</div>
{{/for}}
</div>
<!-- Channel group -->
<div style="display: flex; flex-direction: column; margin-bottom: 20px">
<div style="display:flex;margin-top:10px;align-items:center">
<div class="icon client-permission_channel"></div>
<div style="margin-left:3px;font-weight:bold">{{tr "Channel group:"/}}</div>
2018-08-10 19:30:58 +00:00
</div>
<div style="display: flex; margin-top: 1px; margin-left: 10px; align-items: center;">
<node key="group_{{:group_channel}}_icon"/>
<div style="margin-left: 3px">{{*: data["group_" + data.group_channel + "_name"]}}</div>
</div>
</div>
<div>
<node key="music_player"/>
</div>
</script>
<script class="jsrender-template" id="tmpl_selected_hostbanner" type="text/html">
<div class="hostbanner">
2018-11-03 23:39:29 +00:00
<a href="{{:property_virtualserver_hostbanner_url}}" style="display: flex; flex-direction: row; justify-content: center;">
<img src="
{{:property_virtualserver_hostbanner_gfx_url}}
{{if property_virtualserver_hostbanner_gfx_interval > 0}}
{{*
date = Math.floor(Date.now() / 1000);
if (data.property_virtualserver_hostbanner_gfx_interval <= 60)
data.property_virtualserver_hostbanner_gfx_interval = 60;
date = Math.floor(date / data.property_virtualserver_hostbanner_gfx_interval) * data.property_virtualserver_hostbanner_gfx_interval;
}}
?ts={{*:date}}
{{/if}}
"
{{if property_virtualserver_hostbanner_mode == 0}}
{{else property_virtualserver_hostbanner_mode == 1}}
style="width: 100%; height: 100%;"
{{else property_virtualserver_hostbanner_mode == 2}}
style="width: 100%; height: auto;"
{{/if}}
alt="{{tr "Host banner"/}}"
>
</a>
</div>
</script>
<script class="jsrender-template" id="tmpl_selected_server" type="text/html">
2018-09-25 15:39:38 +00:00
<div class="select_server">
<div class="container">
<!--
virtualserver_hostbanner_url: string = "";
virtualserver_hostbanner_gfx_url: string = "";
virtualserver_hostbanner_gfx_interval: number = 0;
virtualserver_hostbanner_mode: number = 0;
-->
<table class="select_info_table">
<tr>
<td>{{tr "Name:" /}}</td>
<td><node key="server_name"/></td>
</tr>
<tr>
<td>{{tr "Address:" /}}</td>
<td>{{>server_address}}</td>
</tr>
<tr>
<td>{{tr "Type:"/}}</td>
<td>TeaSpeak</td>
</tr>
<tr>
<td>{{tr "Version:"/}}</td>
<td><a title="{{>property_virtualserver_version}}">{{*: data.property_virtualserver_version.split(" ")[0]; }}</a> on {{>property_virtualserver_platform}}</td>
</tr>
<tr>
<td>{{tr "Uptime:"/}}</td>
<td class="update_onlinetime">{{:server_onlinetime}}</td>
</tr>
<tr>
<td>{{tr "Current Channels:"/}}</td>
<td>{{:property_virtualserver_channelsonline}}</td>
</tr>
<tr>
<td>{{tr "Current Clients:"/}}</td>
<td>{{:property_virtualserver_clientsonline}}</td>
</tr>
<tr>
<td>{{tr "Current Queries:"/}}</td>
<td>{{:property_virtualserver_queryclientsonline}}</td>
</tr>
</table>
</div>
2018-09-25 15:39:38 +00:00
<button class="button-update btn_update">{{tr "Update info"/}}</button>
2018-09-25 15:39:38 +00:00
</div>
</script>
<script class="jsrender-template" id="tmpl_selected_channel" type="text/html">
<table class="select_info_table">
<tr>
<td>{{tr "Name:" /}}</td>
<td><node key="channel_name"/></td>
</tr>
{{if property_channel_topic}}
<tr>
<td>{{tr "Topic:"/}}</td>
<td>{{>property_channel_topic}}</td>
</tr>
{{/if}}
<tr>
<td>{{tr "Codec:"/}}</td>
<td>{{>property_channel_codec}}</td>
</tr>
<tr>
<td>{{tr "Codec Quality:"/}}</td>
<td>{{>property_channel_codec_quality}}</td>
</tr>
<tr>
<td>{{tr "Type:"/}}</td>
<td>{{>channel_type}}</td>
</tr>
<tr>
<td>{{tr "Current clients:"/}}</td>
<td>
{{>channel_clients}} /
{{if property_channel_maxclients == -1}}
{{tr "Unlimited"/}}
{{else}}
{{>property_channel_maxclients}}
{{/if}}
</td>
</tr>
<tr>
<td>{{tr "Subscription Status:"/}}</td>
<td>
{{if channel_subscribed}}
{{tr "Subscribed"/}}
{{else}}
{{tr "Unsubscribed"/}}
{{/if}}
</td>
</tr>
<tr>
<td>{{tr "Voice Data Encryption:" /}}</td>
<td>
{{if property_channel_codec_is_unencrypted}}
{{tr "Unencrypted"/}}
{{else}}
{{tr "Encrypted"/}}
{{/if}}
2018-12-02 13:12:23 +00:00
{{if server_encryption == 2}}
{{tr "(Overridden by the server with Encrypted)" /}}
2018-12-02 13:12:23 +00:00
{{/if}}
{{if server_encryption == 1}}
{{tr "(Overridden by the server with Unencrypted)"/}}
2018-12-02 13:12:23 +00:00
{{/if}}
</td>
</tr>
</table>
<div style="margin-top: 10px">
<b style="margin-bottom: 2px">{{tr "Description"/}}</b>
2018-08-12 17:17:57 +00:00
<node key="bbcode_channel_description"></node>
</div>
</script>
2018-11-03 23:39:29 +00:00
<script class="jsrender-template" id="tmpl_poke_popup" type="text/html">
<div class="container-poke">
<div class="container-information">
<a>{{tr "You have been poked by"/}} </a><node key="invoker"></node><a>:</a>
2018-11-03 23:39:29 +00:00
</div>
<div class="container-message">
<a class="message">{{>message}}</a>
</div>
<button class="button-close">{{tr "Close" /}}</button>
2018-11-03 23:39:29 +00:00
</div>
</script>
2018-02-27 16:20:49 +00:00
</body>
</html>