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 >
2018-12-08 22:13:33 +00:00
<!-- main frame TODO tr -->
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_main" type = "text/html" >
2018-10-03 20:04:29 +00:00
< 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" >
2018-12-14 23:09:47 +00:00
< div class = "button btn_connect" title = "{{tr 'Connect to a server' /}}" >
2018-10-03 20:04:29 +00:00
< div class = "icon_x32 client-connect" > < / div >
< / div >
2018-12-14 23:09:47 +00:00
< div class = "button btn_disconnect" title = "{{tr 'Disconnect from server' /}}" style = "display: none" >
2018-10-03 20:04:29 +00:00
< 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 >
2018-12-14 23:09:47 +00:00
< div class = "button-dropdown btn_away" title = "{{tr 'Toggle away status' /}}" >
2018-10-03 20:04:29 +00:00
< 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" >
2018-12-14 23:09:47 +00:00
< 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 >
2018-10-03 20:04:29 +00:00
< / div >
< / div >
< div class = "button btn_mute_input" >
2018-12-14 23:09:47 +00:00
< div class = "icon_x32 client-input_muted" title = "{{tr 'Mute/unmute microphone' /}}" > < / div >
2018-10-03 20:04:29 +00:00
< / div >
< div class = "button btn_mute_output" >
2018-12-14 23:09:47 +00:00
< div class = "icon_x32 client-output_muted" title = "{{tr 'Mute/unmute headphones' /}}" > < / div >
2018-10-03 20:04:29 +00:00
< / div >
< div class = "divider" > < / div >
2018-12-14 23:09:47 +00:00
< div class = "button-dropdown btn_token" title = "{{tr 'Use token' /}}" >
2018-10-03 20:04:29 +00:00
< 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" >
2018-12-14 23:09:47 +00:00
< 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 >
2018-10-03 20:04:29 +00:00
< / div >
< / div >
< div style = "width: 100%" > < / div >
2018-12-14 23:09:47 +00:00
< div class = "button btn_banlist" title = "{{tr 'Banlist' /}}" >
2018-10-20 17:58:06 +00:00
< div class = "icon_x32 client-ban_list" > < / div >
< / div >
2018-12-14 23:09:47 +00:00
< div class = "button btn_permissions" title = "{{tr 'View/edit permissions' /}}" >
2018-10-03 20:04:29 +00:00
< div class = "icon_x32 client-permission_overview" > < / div >
< / div >
< div class = "divider" > < / div >
2018-12-14 23:09:47 +00:00
< div class = "button btn_open_settings" title = "{{tr 'Edit global client settings' /}}" >
2018-10-03 20:04:29 +00:00
< div class = "icon_x32 client-settings" > < / div >
< / div >
< / div >
< / div >
2018-11-03 11:16:13 +00:00
< 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" >
2018-10-03 20:04:29 +00:00
< div class = "channelTree" id = "channelTree" > < / div >
2018-11-03 11:16:13 +00:00
< / div >
<!-- Channel tree -->
< div class = "main_container container-chat" >
2018-10-03 20:04:29 +00:00
< 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 >
2018-11-03 11:16:13 +00:00
< div class = "main_container container-info" >
2018-10-03 20:04:29 +00:00
< div id = "select_info" class = "select_info" style = "width: 100%; max-width: 100%" >
2018-11-03 11:16:13 +00:00
< div class = "container-banner" > < / div >
< div class = "container-select-info" > < / div >
2018-10-03 20:04:29 +00:00
< / 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 -->
2018-10-14 11:27:48 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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%" >
2018-12-08 22:13:33 +00:00
< div > {{tr "Server password:" /}}< / div >
2018-09-30 19:50:59 +00:00
< form name = "server_password_form" onsubmit = "return false;" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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;" >
2018-12-08 22:13:33 +00:00
< div style = "text-align: right;" > {{tr "Identity Settings" /}}< / div >
2018-09-30 19:50:59 +00:00
< select class = "identity_select" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
{{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" >
2018-12-08 22:13:33 +00:00
{{tr "You're using your forum account as verification"/}}
2018-10-07 16:21:28 +00:00
< / div >
< div class = "disconnected" >
2018-12-08 22:13:33 +00:00
<!-- 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" >
2018-12-08 22:13:33 +00:00
{{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 >
2018-10-20 17:58:06 +00:00
<!-- Template for channel create & edit -->
2018-10-14 11:27:48 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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
2018-12-08 22:13:33 +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
2018-12-08 22:13:33 +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
2018-12-08 22:13:33 +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 >
2018-12-08 22:13:33 +00:00
< 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;" >
2018-12-08 22:13:33 +00:00
< 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;" >
2018-12-08 22:13:33 +00:00
< 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%;" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< / div > Description
2018-02-27 16:20:49 +00:00
< / div >
< / div >
< / x-content >
< / x-entry >
< x-entry >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Presets" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content" >
< fieldset style = "" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Custom Settings" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content" >
< div class = "custom" >
2018-12-08 22:13:33 +00:00
< div > {{tr "Codec:"/}}< / div >
2018-08-13 15:50:55 +00:00
< select class = "voice_codec" >
2018-12-08 22:13:33 +00:00
<!-- 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Regular needed powers:" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content" >
< table class = "channel_perm_tbl" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Other Settings" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< 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}}" >
2018-12-08 22:13:33 +00:00
< 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? -->
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Max users" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content max_users" >
< fieldset >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Family Max users" /}}< / div >
2018-08-13 15:50:55 +00:00
< div class = "content max_users" >
< fieldset >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a class = "key" > {{tr "Name:" /}}< / a >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_name" value = "{{>virtualserver_name}}" / >
2018-12-08 22:13:33 +00:00
< 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
2018-12-08 22:13:33 +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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Binding" /}}< / div >
2018-08-11 13:02:11 +00:00
< div class = "content" >
< div class = "properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Host:" /}}< / div >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_host" value = "{{>virtualserver_host}}" / >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Host message" /}}< / div >
2018-08-11 13:02:11 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Message:" /}}< / div >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_hostmessage" value = "{{>virtualserver_hostmessage}}" / >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Message Mode:" /}}< / div >
2018-08-11 13:02:11 +00:00
< select class = "value virtualserver_hostmessage_mode" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Host banner" /}}< / div >
2018-08-11 13:02:11 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "URL:" /}}< / div >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_hostbanner_url" value = "{{>virtualserver_hostbanner_url}}" / >
2018-12-08 22:13:33 +00:00
< 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}}" / >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Resize:" /}}< / a >
2018-08-11 13:02:11 +00:00
< select class = "value virtualserver_hostbanner_mode" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Host Button" /}}< / div >
2018-08-11 13:02:11 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Tooltip:" /}}< / div >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_hostbutton_tooltip" value = "{{>virtualserver_hostbutton_tooltip}}" / >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "URL:" /}}< / div >
2018-08-11 13:02:11 +00:00
< input class = "value virtualserver_hostbutton_url" value = "{{>virtualserver_hostbutton_url}}" / >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Upload" /}}< / div >
2018-11-04 13:20:38 +00:00
< div class = "content settings" >
< div class = "setting" >
2018-12-08 22:13:33 +00:00
< 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}}" / >
2018-12-08 22:13:33 +00:00
< div class = "suffix" > {{tr "Bytes/s" /}}< / div >
2018-11-04 13:20:38 +00:00
< / div >
< div class = "setting" >
2018-12-08 22:13:33 +00:00
< 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}}" / >
2018-12-08 22:13:33 +00:00
< div class = "suffix" > {{tr "MiB" /}}< / div >
2018-11-04 13:20:38 +00:00
< / div >
< / div >
< / div >
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Download" /}}< / div >
2018-11-04 13:20:38 +00:00
< div class = "content settings" >
< div class = "setting" >
2018-12-08 22:13:33 +00:00
< 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}}" / >
2018-12-08 22:13:33 +00:00
< div class = "suffix" > {{tr "Bytes/s" /}}< / div >
2018-11-04 13:20:38 +00:00
< / div >
< div class = "setting" >
2018-12-08 22:13:33 +00:00
< 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}}" / >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< x-tag > {{tr "Anti-Flood" /}}< / x-tag >
2018-08-13 09:28:33 +00:00
< x-content >
< div class = "container properties_flood" >
< div class = "properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Reduced points per tick:" /}}< / div >
2018-08-13 09:28:33 +00:00
< input type = "number" min = "1" max = "65536" value = "{{:virtualserver_antiflood_points_tick_reduce}}" class = "value virtualserver_antiflood_points_tick_reduce" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Points needed to block commands:" /}}< / div >
2018-08-13 09:28:33 +00:00
< input type = "number" min = "1" max = "65536" value = "{{:virtualserver_antiflood_points_needed_command_block}}" class = "value virtualserver_antiflood_points_needed_command_block" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Points needed to block IP:" /}}< / div >
2018-08-13 09:28:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< x-tag > {{tr "Security" /}}< / x-tag >
2018-08-13 11:06:42 +00:00
< x-content >
< div class = "container properties_security" >
< div class = "properties" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Channel voice data encryption:" /}}< / div >
2018-08-13 11:06:42 +00:00
< select class = "value virtualserver_codec_encryption_mode" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Default groups" /}}< / div >
2018-08-13 11:06:42 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Server group" /}}< / div >
2018-08-13 11:06:42 +00:00
< select class = "value default_server_group" > < / select >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Music bot group" /}}< / div >
2018-09-24 19:21:48 +00:00
< select class = "value default_music_group" > < / select >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Channel group" /}}< / div >
2018-08-13 11:06:42 +00:00
< select class = "value default_channel_group" > < / select >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Complain" /}}< / div >
2018-08-13 11:06:42 +00:00
< div class = "content complains" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Server list" /}}< / div >
2018-08-13 11:06:42 +00:00
< div class = "content" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< x-tag > {{tr "Messages" /}}< / x-tag >
2018-08-13 09:03:55 +00:00
< x-content >
< div > <!-- We have to move the shit one layer up -->
< div class = "container properties_messages" >
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Channel" /}}< / div >
2018-08-13 09:03:55 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Default Topic:" /}}< / div >
2018-08-13 09:03:55 +00:00
< textarea class = "value virtualserver_default_channel_topic" > {{>virtualserver_default_channel_topic}}< / textarea >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Default Description" /}}< / div >
2018-08-13 09:03:55 +00:00
< textarea class = "value virtualserver_default_channel_description" > {{>virtualserver_default_channel_description}}< / textarea >
< / div >
< / div >
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Client" /}}< / div >
2018-08-13 09:03:55 +00:00
< div class = "content properties" >
2018-12-08 22:13:33 +00:00
< div class = "key" > {{tr "Default Description" /}}< / div >
2018-08-13 09:03:55 +00:00
< textarea class = "value virtualserver_default_client_description" > {{>virtualserver_default_client_description}}< / textarea >
< / div >
< / div >
2018-12-08 22:13:33 +00:00
{{tr "Note: These settings require a virtual server restart to take effect!" /}}
2018-08-13 09:03:55 +00:00
< / 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 -->
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_settings" type = "text/html" >
2018-03-07 18:06:52 +00:00
< x-tab >
< x-entry >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< x-tag > {{tr "Audio" /}}< / x-tag >
2018-03-07 18:06:52 +00:00
< x-content >
2018-10-28 17:25:43 +00:00
< div class = "settings_audio" >
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Microphone" /}}< / div >
2018-10-28 17:25:43 +00:00
< div class = "content settings-microphone" >
< div class = "settings-device settings-device-microphone" >
< div class = "settings-device-error" > < / div >
< div class = "settings-device-select" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Device:" /}}< / a >
2018-10-28 17:25:43 +00:00
< div > < select class = "audio-select-microphone" > < / select > < / div >
2018-03-17 07:05:37 +00:00
< / div >
2018-10-28 17:25:43 +00:00
< / div >
< div class = "settings-vad-container" >
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Voice Activity Detection"/}}< / div >
2018-10-28 17:25:43 +00:00
< div class = "content" >
< fieldset >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-28 17:25:43 +00:00
< / fieldset >
< / div >
< / div >
< div class = "settings-vad-impl" >
< div class = "settings-vad-impl-entry setting-vad-pt" >
2018-12-08 22:13:33 +00:00
{{tr "There are no setting entries for an < b > always< / b > online voice detection."/}}
2018-10-28 17:25:43 +00:00
< / div >
< div class = "settings-vad-impl-entry setting-vad-ppt" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Push to talk key:"/}}< / a >
< button class = "vat_ppt_key" > {{tr "Uninitialised"/}}< / button >
2018-10-28 17:25:43 +00:00
< / div >
< div class = "settings-vad-impl-entry setting-vad-vad" >
2018-12-08 22:13:33 +00:00
< div > {{tr "Voice activity threshold (< a class = 'vad_vad_slider_value' > 20< / a > %)"/}}< / div >
2018-10-28 17:25:43 +00:00
< 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 >
2018-10-28 17:25:43 +00:00
< div class = "group_box" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Speaker" /}}< / div >
2018-10-28 17:25:43 +00:00
< div class = "content settings-speaker" >
< div class = "settings-device settings-device-speaker" >
< div class = "settings-device-error" > < / div >
< div class = "settings-device-select" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Device:" /}}< / a >
2018-10-28 17:25:43 +00:00
< 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 >
2018-12-14 23:09:47 +00:00
< 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 >
2018-12-14 23:09:47 +00:00
< 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}}
 < {{>contributors[0].email}}>
{{/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}}
 < {{>email}}>
{{/if}}
< / div >
{{/for}}
< / div >
< / div >
{{/if}}
{{/if}}
< / div >
< / script >
2018-10-14 11:27:48 +00:00
< 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" > ± 0 %< / div >
< / div >
2018-06-24 11:38:53 +00:00
< / script >
2018-09-30 19:50:59 +00:00
<!-- Permission overview -->
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_server_permissions" type = "text/html" >
2018-09-30 19:50:59 +00:00
< x-tab >
< x-entry >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< div class = "horizontal-stretch" >
< node key = "permissions_channel" / >
< / div >
2018-09-30 19:50:59 +00:00
< / div >
< / x-content >
< / x-entry >
< x-entry >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Nickname:" /}}< / a >
2018-09-30 19:50:59 +00:00
< input class = "client-name" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Unique ID:" /}}< / a >
2018-09-30 19:50:59 +00:00
< input class = "client-uid" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Client database ID:" /}}< / a >
2018-09-30 19:50:59 +00:00
< input class = "client-dbid" >
< / div >
< / div >
2018-10-14 11:27:48 +00:00
< div class = "horizontal-stretch" >
< node key = "permissions_client" / >
< / div >
2018-09-30 19:50:59 +00:00
< / div >
< / x-content >
< / x-entry >
< x-entry >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Nickname:"/}}< / a >
2018-09-30 19:50:59 +00:00
< input class = "client-name" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Unique ID:" /}}< / a >
2018-09-30 19:50:59 +00:00
< input class = "client-uid" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< div class = "permission-skip" >
< label class = "checkbox" >
< input type = "checkbox" >
< span class = "checkmark" > < / span >
< / label >
2018-09-30 19:50:59 +00:00
< / div >
2018-10-14 11:27:48 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
{{else}}
2018-12-02 17:55:08 +00:00
< 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" >
2018-10-14 11:27:48 +00:00
{{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" >
2018-12-08 22:13:33 +00:00
< div > < a > {{tr "Filter:" /}}< / a > < / div >
2018-10-14 11:27:48 +00:00
< div > < input type = "text" class = "filter-input" > < / div >
2018-12-08 22:13:33 +00:00
< div > < input type = "checkbox" class = "filter-granted" > < a > {{tr "Show granted permissions only" /}}< / a > < / div >
2018-10-14 11:27:48 +00:00
< / div >
< div class = "list" >
< div class = "entry header" >
2018-12-08 22:13:33 +00:00
< div > {{tr "Permission Name" /}}< / div >
< div > {{tr "Value" /}}< / div >
< div > {{tr "Skip" /}}< / div >
< div > {{tr "Negate" /}}< / div >
< div > {{tr "Granted" /}}< / div >
2018-10-14 11:27:48 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< button class = "button-update" > < div class = "icon client-check_update" > < / div > {{tr "Update" /}}< / button >
2018-10-14 11:27:48 +00:00
< / div >
2018-09-30 19:50:59 +00:00
< / div >
< / div >
< / script >
2018-10-20 17:58:06 +00:00
<!-- 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" >
2018-12-08 22:13:33 +00:00
< button class = "button-add" > {{tr "Add" /}}< / button >
< button class = "button-edit" > {{tr "Edit" /}}< / button >
< button class = "button-remove" > {{tr "Remove" /}}< / button >
2018-10-20 17:58:06 +00:00
< / div >
< div class = "search" >
< input type = "text" class = "entry-filter" >
< / div >
< / div >
< div class = "entry-container" >
< div class = "table-container" >
< table >
< thead >
< tr >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / div >
< div class = "right" >
< a class = "entry-count-info" > < / a >
2018-12-08 22:13:33 +00:00
< button class = "button-close" > {{tr "Close" /}}< / button >
2018-10-20 17:58:06 +00:00
< / 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Name:" /}}< / a >
2018-10-20 17:58:06 +00:00
< input value = "{{>client_name}}" readonly >
< / div >
< div class = "align_column" style = "margin: 5px" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Reason:" /}}< / a >
2018-10-20 17:58:06 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Duration:" /}}< / a >
2018-10-20 17:58:06 +00:00
< div class = "align_row" >
< input type = "number" value = "1" class = "ban_duration" style = "margin-right: 7px" min = "1" >
< select class = "ban_duration_type" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / select >
< / div >
< / div >
< div class = "group_box container-ban-type" >
2018-12-08 22:13:33 +00:00
< div class = "header" > {{tr "Ban client by"/}}< / div >
2018-10-20 17:58:06 +00:00
< div class = "content ban-types" >
< div >
< input type = "checkbox" class = "ban-type-nickname" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Nickname"/}}< / a >
2018-10-20 17:58:06 +00:00
< div class = "help-tip tip-right tip-small" checked >
< p >
2018-12-09 19:18:49 +00:00
{{tr "Bans the client by his current nickname.< br > " +
"The currently nickname cant be used until the ban expired"/}}
2018-10-20 17:58:06 +00:00
< / p >
< / div >
< / div >
< div >
< input type = "checkbox" class = "ban-type-hardware-id" checked >
2018-12-08 22:13:33 +00:00
< a > {{tr "Hardware ID" /}}< / a >
2018-10-20 17:58:06 +00:00
< div class = "help-tip tip-right tip-small" >
< p >
2018-12-09 19:18:49 +00:00
{{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" /}}
2018-10-20 17:58:06 +00:00
< / p >
< / div >
< / div >
< div >
< input type = "checkbox" class = "ban-type-ip" checked >
2018-12-08 22:13:33 +00:00
< a > {{tr "IP Address" /}}< / a >
2018-10-20 17:58:06 +00:00
< / div >
< / div >
< / div >
< / div >
< / script >
2018-12-08 22:13:33 +00:00
//TODO tr downwards
2018-10-20 17:58:06 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "IP:" /}}< / a >
2018-10-20 17:58:06 +00:00
< input class = "input-ip" type = "text" maxlength = "128" >
< / div >
< div class = "container container-name" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Name:" /}}< / a >
2018-10-20 17:58:06 +00:00
< input class = "input-name" type = "text" maxlength = "128" >
< div class = "container-name-type" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Interpret IP/Name as:" /}}< / a >
2018-10-20 17:58:06 +00:00
< select class = "input-name-type" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / select >
< / div >
< / div >
< div class = "container container-uid" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Unique ID:" /}}< / a >
2018-10-20 17:58:06 +00:00
< div > < input class = "input-uid" type = "text" maxlength = "64" > < / div >
< / div >
< div class = "container container-hwid" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Hardware ID:" /}}< / a >
2018-10-20 17:58:06 +00:00
< input class = "input-hwid" type = "text" max = "64" >
< / div >
< div class = "container container-reason" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Reason" /}}< / a >
2018-10-20 17:58:06 +00:00
< textarea class = "input-reason" > < / textarea >
< / div >
< div class = "container container-time" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Duration" /}}< / a >
2018-10-20 17:58:06 +00:00
< div class = "container-time-input" >
< input type = "number" value = "1" class = "input-time" style = "margin-right: 7px" min = "1" >
< select class = "input-time-unit" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-10-20 17:58:06 +00:00
< / select >
< / div >
< / div >
< div class = "footer" >
< div >
< div class = "container-global" >
< input type = "checkbox" class = "input-global" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Use this ban as a global ban" /}}< / a >
2018-10-20 17:58:06 +00:00
< div class = "help-tip tip-center tip-small" >
< p >
2018-12-09 19:18:49 +00:00
{{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"/}}
2018-10-20 17:58:06 +00:00
< / p >
< / div >
< / div >
< / div >
< div class = "container-buttons modal-button-group" style = "text-align: right; margin-top: 3px; margin-bottom: 6px;" >
2018-12-08 22:13:33 +00:00
< button class = "button-close" > {{tr "Cancel"/}}< / button >
< button class = "button-success" > {{tr "OK"/}}< / button >
2018-10-20 17:58:06 +00:00
< / div >
< / div >
< / div >
< / div >
< / script >
2018-09-30 19:50:59 +00:00
<!-- Music interface -->
2018-10-14 11:27:48 +00:00
< 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" >
2018-11-04 12:54:18 +00:00
< 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 >
2018-10-14 11:27:48 +00:00
< 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" >
2018-12-08 22:13:33 +00:00
< a > {{tr "Not playing any music"/}}< / a >
2018-04-30 21:57:21 +00:00
< / div >
2018-10-03 20:04:29 +00:00
< / script >
2018-06-20 17:06:55 +00:00
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_selected_client" type = "text/html" >
2018-06-20 19:05:35 +00:00
< table class = "select_info_table" >
2018-06-20 17:06:55 +00:00
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Name:" /}}< / td >
2018-06-20 19:05:35 +00:00
< td > < node key = "client_name" / > < / td >
2018-06-20 17:06:55 +00:00
< / tr >
{{if property_client_description.length > 0}}
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Description:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{>property_client_description}}< / td >
2018-06-20 17:06:55 +00:00
< / tr >
{{/if}}
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Version:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > < a title = "{{>property_client_version}}" > {{*: data.property_client_version.split(" ")[0]; }}< / a > on {{>property_client_platform}}< / td >
2018-06-20 17:06:55 +00:00
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Online since:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td class = "update_onlinetime" > {{:client_onlinetime}}< / td >
2018-06-20 17:06:55 +00:00
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Volume:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{:sound_volume}}%< / td >
2018-06-20 17:06:55 +00:00
< / tr >
{{if client_teaforum_id > 0}}
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "TeaSpeak Account:" /}}< / td >
2018-06-20 19:05:35 +00:00
< td > < a href = "//forum.teaspeak.de/index.php?members/{{:property_client_teaforum_id}}" target = "_blank" > {{>property_client_teaforum_name}}< / a > < / td >
2018-06-20 17:06:55 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< div style = "margin-left:3px;font-weight:bold" > {{tr "Server groups:"/}}< / div >
2018-06-20 17:06:55 +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" / >
2018-09-30 20:47:41 +00:00
< div style = "margin-left: 3px" > {{>group_name}}< / div >
2018-06-20 17:06:55 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< div style = "margin-left:3px;font-weight:bold" > {{tr "Channel group:"/}}< / div >
2018-06-20 17:06:55 +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 >
2018-06-20 19:05:35 +00:00
<!-- 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 >
2018-12-08 22:13:33 +00:00
< 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}}
2018-06-20 19:05:35 +00:00
<!-- 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 >
2018-12-08 22:13:33 +00:00
< a style = "align-self: center" > {{tr "Speakers/Headphones disabled"/}}< / a >
2018-06-20 19:05:35 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< a style = "align-self: center" > {{tr "Microphone disabled"/}}< / a >
2018-06-20 19:05:35 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< a style = "align-self: center" > {{tr "Speakers/Headphones Muted"/}}< / a >
2018-06-20 19:05:35 +00:00
< / 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 >
2018-12-08 22:13:33 +00:00
< a style = "align-self: center" > {{tr "Microphone Muted"/}}< / a >
2018-06-20 19:05:35 +00:00
< / div >
{{/if}}
2018-08-12 14:38:38 +00:00
{{if property_client_flag_avatar & & property_client_flag_avatar.length > 0}}
2018-08-12 16:58:15 +00:00
< div style = "margin-top: 10px;" >
2018-08-12 14:38:38 +00:00
< node key = "client_avatar" / >
< / div >
{{/if}}
2018-06-20 19:05:35 +00:00
< / script >
2018-10-14 11:27:48 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< td > {{tr "Description:"/}}< / td >
2018-08-10 19:30:58 +00:00
< td > {{>property_client_description}}< / td >
< / tr >
{{/if}}
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Livetime:"/}}< / td >
2018-08-10 19:30:58 +00:00
< td class = "update_onlinetime" > {{:client_onlinetime}}< / td >
< / tr >
<!-- player_volume -->
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Remote Volume:"/}}< / td >
2018-08-10 19:30:58 +00:00
< td > {{*: data.property_player_volume * 100 }}%< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Local Volume:"/}}< / td >
2018-08-10 19:30:58 +00:00
< td > {{>sound_volume}}%< / td >
< / tr >
2018-11-04 12:54:18 +00:00
{{if song_url}}
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Currently replaying:"/}}< / td >
2018-11-04 12:54:18 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >
2018-11-03 11:16:13 +00:00
< 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;" >
2018-11-03 11:16:13 +00:00
< 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}}
2018-12-08 22:13:33 +00:00
alt="{{tr "Host banner"/}}"
2018-11-03 11:16:13 +00:00
>
< / a >
< / div >
< / script >
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_selected_server" type = "text/html" >
2018-09-25 15:39:38 +00:00
< div class = "select_server" >
2018-11-03 11:16:13 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< td > {{tr "Name:" /}}< / td >
2018-11-03 11:16:13 +00:00
< td > < node key = "server_name" / > < / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Address:" /}}< / td >
2018-11-03 11:16:13 +00:00
< td > {{>server_address}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Type:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td > TeaSpeak< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Version:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td > < a title = "{{>property_virtualserver_version}}" > {{*: data.property_virtualserver_version.split(" ")[0]; }}< / a > on {{>property_virtualserver_platform}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Uptime:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td class = "update_onlinetime" > {{:server_onlinetime}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Current Channels:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td > {{:property_virtualserver_channelsonline}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Current Clients:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td > {{:property_virtualserver_clientsonline}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Current Queries:"/}}< / td >
2018-11-03 11:16:13 +00:00
< td > {{:property_virtualserver_queryclientsonline}}< / td >
< / tr >
< / table >
< / div >
2018-09-25 15:39:38 +00:00
2018-12-08 22:13:33 +00:00
< button class = "button-update btn_update" > {{tr "Update info"/}}< / button >
2018-09-25 15:39:38 +00:00
< / div >
2018-06-20 19:05:35 +00:00
< / script >
2018-10-14 11:27:48 +00:00
< script class = "jsrender-template" id = "tmpl_selected_channel" type = "text/html" >
2018-06-20 19:05:35 +00:00
< table class = "select_info_table" >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Name:" /}}< / td >
2018-06-20 19:05:35 +00:00
< td > < node key = "channel_name" / > < / td >
< / tr >
2018-08-12 11:26:56 +00:00
{{if property_channel_topic}}
2018-06-20 19:05:35 +00:00
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Topic:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{>property_channel_topic}}< / td >
< / tr >
2018-08-12 11:26:56 +00:00
{{/if}}
2018-06-20 19:05:35 +00:00
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Codec:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{>property_channel_codec}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Codec Quality:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{>property_channel_codec_quality}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Type:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td > {{>channel_type}}< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Current clients:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td >
{{>channel_clients}} /
{{if property_channel_maxclients == -1}}
2018-12-08 22:13:33 +00:00
{{tr "Unlimited"/}}
2018-06-20 19:05:35 +00:00
{{else}}
{{>property_channel_maxclients}}
{{/if}}
< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Subscription Status:"/}}< / td >
2018-06-20 19:05:35 +00:00
< td >
{{if channel_subscribed}}
2018-12-08 22:13:33 +00:00
{{tr "Subscribed"/}}
2018-06-20 19:05:35 +00:00
{{else}}
2018-12-08 22:13:33 +00:00
{{tr "Unsubscribed"/}}
2018-06-20 19:05:35 +00:00
{{/if}}
< / td >
< / tr >
< tr >
2018-12-08 22:13:33 +00:00
< td > {{tr "Voice Data Encryption:" /}}< / td >
2018-06-20 19:05:35 +00:00
< td >
{{if property_channel_codec_is_unencrypted}}
2018-12-08 22:13:33 +00:00
{{tr "Unencrypted"/}}
2018-06-20 19:05:35 +00:00
{{else}}
2018-12-08 22:13:33 +00:00
{{tr "Encrypted"/}}
2018-06-20 19:05:35 +00:00
{{/if}}
2018-12-02 13:12:23 +00:00
{{if server_encryption == 2}}
2018-12-08 22:13:33 +00:00
{{tr "(Overridden by the server with Encrypted)" /}}
2018-12-02 13:12:23 +00:00
{{/if}}
{{if server_encryption == 1}}
2018-12-08 22:13:33 +00:00
{{tr "(Overridden by the server with Unencrypted)"/}}
2018-12-02 13:12:23 +00:00
{{/if}}
2018-06-20 19:05:35 +00:00
< / td >
< / tr >
< / table >
2018-08-13 09:03:55 +00:00
< div style = "margin-top: 10px" >
2018-12-08 22:13:33 +00:00
< b style = "margin-bottom: 2px" > {{tr "Description"/}}< / b >
2018-08-12 17:17:57 +00:00
< node key = "bbcode_channel_description" > < / node >
< / div >
2018-06-20 17:06:55 +00:00
< / 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" >
2018-12-08 22:13:33 +00:00
< 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 >
2018-12-08 22:13:33 +00:00
< 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 >