2018-05-24 20:59:32 +02:00
< modal id = "settings" status = "default" icon = "fas fa-cog" heading = "{{'Settings' | translate}}" large = "yes" closeable = "yes" >
2016-06-12 14:06:48 +00:00
< div class = "modal-body" >
< form role = "form" name = "settingsEditor" >
2017-12-07 07:08:24 +00:00
< ul class = "nav nav-tabs" >
2018-08-23 13:45:28 +02:00
< li class = "active" > < a data-toggle = "tab" href = "#settings-general" > < span class = "fas fa-cog" > < / span > < span translate > General< / span > < / a > < / li >
< li > < a data-toggle = "tab" href = "#settings-gui" > < span class = "fas fa-desktop" > < / span > < span translate > GUI< / span > < / a > < / li >
< li > < a data-toggle = "tab" href = "#settings-connections" > < span class = "fas fa-sitemap" > < / span > < span translate > Connections< / span > < / a > < / li >
2018-08-25 11:36:10 +01:00
< li >
< a data-toggle = "tab" href = "#settings-ignored-devices" >
< span class = "fas fa-laptop" > < / span >
< span translate > Ignored Devices< / span >
< span class = "badge" > {{ tmpRemoteIgnoredDevices.length }}< / span >
< / a >
< / li >
< li >
< a data-toggle = "tab" href = "#settings-ignored-folders" >
< span class = "fas fa-folder" > < / span >
< span translate > Ignored Folders< / span >
< span class = "badge" > {{ ignoredFoldersCountTmpConfig() }}< / span >
< / a >
< / li >
2017-12-07 07:08:24 +00:00
< / ul >
< div class = "tab-content" >
2017-12-07 08:33:32 +00:00
< div id = "settings-general" class = "tab-pane in active" >
2016-06-12 14:06:48 +00:00
< div class = "form-group" >
< label translate for = "DeviceName" > Device Name< / label >
2017-07-15 09:54:37 +00:00
< input id = "DeviceName" class = "form-control" type = "text" ng-model = "tmpOptions.deviceName" / >
2016-06-12 14:06:48 +00:00
< / div >
2016-01-05 09:48:38 +01:00
2017-12-07 07:08:24 +00:00
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-horizontal" >
< div class = "form-group" ng-class = "{'has-error': settingsEditor.minHomeDiskFree.$invalid && settingsEditor.minHomeDiskFree.$dirty}" >
< label class = "col-xs-12" for = "minHomeDiskFree" > < span translate > Minimum Free Disk Space< / span > < / label > < br / >
< div class = "col-xs-9" > < input name = "minHomeDiskFree" id = "minHomeDiskFree" class = "form-control" type = "number" ng-model = "tmpOptions.minHomeDiskFree.value" required = "" aria-required = "true" min = "0" step = "0.01" / > < / div >
< div class = "col-xs-3" > < select class = "col-sm-3 form-control" ng-model = "tmpOptions.minHomeDiskFree.unit" >
< option value = "%" > %< / option >
< option value = "kB" > kB< / option >
< option value = "MB" > MB< / option >
< option value = "GB" > GB< / option >
< option value = "TB" > TB< / option >
< / select > < / div >
< p class = "col-xs-12 help-block" >
< span translate ng-show = "settingsEditor.minHomeDiskFree.$invalid" > Enter a non-negative number (e.g., "2.35") and select a unit. Percentages are as part of the total disk size.< / span >
< span translate ng-hide = "settingsEditor.minHomeDiskFree.$invalid" > This setting controls the free space required on the home (i.e., index database) disk.< / span >
< / p >
< / div >
< / div >
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
< label translate > API Key< / label >
< div class = "input-group" >
< input type = "text" readonly class = "text-monospace form-control" value = "{{tmpGUI.apiKey || '-'}}" / >
< span class = "input-group-btn" >
< button type = "button" class = "btn btn-default btn-secondary" ng-click = "setAPIKey(tmpGUI)" >
2018-05-24 20:59:32 +02:00
< span class = "fas fa-redo" > < / span > < span translate > Generate< / span >
2017-12-07 07:08:24 +00:00
< / button >
< / span >
< / div >
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
2016-01-05 09:48:38 +01:00
2017-12-07 07:08:24 +00:00
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< div ng-if = "tmpOptions.upgrades != 'candidate'" >
< label translate for = "urVersion" > Anonymous Usage Reporting< / label > (< a href = "" translate data-toggle = "modal" data-target = "#urPreview" > Preview< / a > )
< select class = "form-control" id = "urVersion" ng-model = "tmpOptions._urAcceptedStr" >
< option ng-repeat = "n in urVersions()" value = "{{n}}" > {{'Version' | translate}} {{n}}< / option >
<!-- 1 does not exist, as we did not support incremental formats back then. -->
< option value = "0" translate > Undecided (will prompt)< / option >
< option value = "-1" translate > Disabled< / option >
< / select >
< / div >
< p class = "help-block" ng-if = "tmpOptions.upgrades == 'candidate'" >
< span translate > Usage reporting is always enabled for candidate releases.< / span > (< a href = "" translate data-toggle = "modal" data-target = "#urPreview" > Preview< / a > )
< / p >
< / div >
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
2018-05-24 20:59:32 +02:00
< label translate > Automatic upgrades< / label >   < a href = "https://docs.syncthing.net/users/releases.html" target = "_blank" > < span class = "fas fa-question-circle" > < / span > < span translate > Help< / span > < / a >
2017-12-07 07:08:24 +00:00
< select class = "form-control" ng-model = "tmpOptions.upgrades" ng-if = "upgradeInfo" >
< option value = "none" translate > No upgrades< / option >
< option value = "stable" translate > Stable releases only< / option >
< option value = "candidate" translate > Stable releases and release candidates< / option >
< / select >
< p class = "help-block" ng-if = "!upgradeInfo" >
< span translate > Unavailable/Disabled by administrator or maintainer< / span >
< / p >
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
2017-12-07 07:08:24 +00:00
< div class = "form-group" >
< label translate for = "urVersion" > Default Folder Path< / label >
< input id = "DefaultFolderPath" class = "form-control" type = "text" ng-model = "tmpOptions.defaultFolderPath" / >
2016-06-12 14:06:48 +00:00
< p class = "help-block" >
2017-12-07 07:08:24 +00:00
< span translate translate-value-tilde = "{{system.tilde}}" >
Path where new auto accepted folders will be created, as well as the default suggested path when adding new folders via the UI. Tilde character (~) expands to {%tilde%}.
< / span >
2016-06-12 14:06:48 +00:00
< / p >
< / div >
2017-12-07 07:08:24 +00:00
< / div >
2016-01-05 09:48:38 +01:00
2017-12-07 08:33:32 +00:00
< div id = "settings-gui" class = "tab-pane" >
2017-12-07 07:08:24 +00:00
< div class = "form-group" ng-class = "{'has-error': settingsEditor.Address.$invalid && settingsEditor.Address.$dirty}" >
2018-05-24 20:59:32 +02:00
< label translate for = "Address" > GUI Listen Address< / label >   < a href = "https://docs.syncthing.net/users/guilisten.html" target = "_blank" > < span class = "fas fa-question-circle" > < / span > < span translate > Help< / span > < / a >
2017-12-07 07:08:24 +00:00
< input id = "Address" name = "Address" class = "form-control" type = "text" ng-model = "tmpGUI.address" ng-pattern = "/.*:0*((102[4-9])|(10[3-9][0-9])|(1[1-9][0-9][0-9])|([2-9][0-9][0-9][0-9])|([1-6]\d{4}))$/" / >
< p class = "help-block" ng-show = "settingsEditor.Address.$invalid" translate >
Enter a non-privileged port number (1024 - 65535).
< / p >
< / div >
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< label translate for = "User" > GUI Authentication User< / label >
< input id = "User" class = "form-control" type = "text" ng-model = "tmpGUI.user" / >
< / div >
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
< label translate for = "Password" > GUI Authentication Password< / label >
< input id = "Password" class = "form-control" type = "password" ng-model = "tmpGUI.password" ng-trim = "false" / >
< / div >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
< input id = "UseTLS" type = "checkbox" ng-model = "tmpGUI.useTLS" / > < span translate > Use HTTPS for GUI< / span >
< / label >
< / div >
< / div >
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
< input id = "StartBrowser" type = "checkbox" ng-model = "tmpOptions.startBrowser" / > < span translate > Start Browser< / span >
< / label >
< / div >
< / div >
< / div >
< / div >
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< label translate > GUI Theme< / label >
< select class = "form-control" ng-model = "tmpGUI.theme" ng-if = "themes.length > 1" >
< option ng-repeat = "theme in themes.sort()" value = "{{ theme }}" >
{{ themeName(theme) }}
< / option >
< / select >
< p class = "help-block" ng-if = "themes.length < 2" >
< span translate > Unavailable< / span >
< / p >
< / div >
< / div >
< div class = "col-md-6" >
< / div >
< / div >
< / div >
2017-12-24 22:26:05 +00:00
2017-12-07 08:33:32 +00:00
< div id = "settings-connections" class = "tab-pane" >
2017-12-07 07:08:24 +00:00
< div class = "form-group" >
2018-05-24 20:59:32 +02:00
< label translate for = "ListenAddressesStr" > Sync Protocol Listen Addresses< / label >   < a href = "https://docs.syncthing.net/users/config.html#listen-addresses" target = "_blank" > < span class = "fas fa-question-circle" > < / span > < span translate > Help< / span > < / a >
2017-12-07 07:08:24 +00:00
< input id = "ListenAddressesStr" class = "form-control" type = "text" ng-model = "tmpOptions._listenAddressesStr" / >
< / div >
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" ng-class = "{'has-error': settingsEditor.MaxRecvKbps.$invalid && settingsEditor.MaxRecvKbps.$dirty}" >
< label translate for = "MaxRecvKbps" > Incoming Rate Limit (KiB/s)< / label >
< input id = "MaxRecvKbps" name = "MaxRecvKbps" class = "form-control" type = "number" ng-model = "tmpOptions.maxRecvKbps" min = "0" / >
< p class = "help-block" >
< span translate ng-if = "settingsEditor.MaxRecvKbps.$error.min && settingsEditor.MaxRecvKbps.$dirty" > The rate limit must be a non-negative number (0: no limit)< / span >
< / p >
< / div >
< / div >
< div class = "col-md-6" >
< div class = "form-group" ng-class = "{'has-error': settingsEditor.MaxSendKbps.$invalid && settingsEditor.MaxSendKbps.$dirty}" >
< label translate for = "MaxSendKbps" > Outgoing Rate Limit (KiB/s)< / label >
< input id = "MaxSendKbps" name = "MaxSendKbps" class = "form-control" type = "number" ng-model = "tmpOptions.maxSendKbps" min = "0" / >
< p class = "help-block" >
< span translate ng-if = "settingsEditor.MaxSendKbps.$error.min && settingsEditor.MaxSendKbps.$dirty" > The rate limit must be a non-negative number (0: no limit)< / span >
< / p >
< / div >
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
2017-07-15 09:54:37 +00:00
< input id = "NATEnabled" type = "checkbox" ng-model = "tmpOptions.natEnabled" / > < span translate > Enable NAT traversal< / span >
2016-06-12 14:06:48 +00:00
< / label >
2015-08-02 08:27:05 +02:00
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
2017-07-15 09:54:37 +00:00
< input id = "LocalAnnEnabled" type = "checkbox" ng-model = "tmpOptions.localAnnounceEnabled" / > < span translate > Local Discovery< / span >
2016-06-12 14:06:48 +00:00
< / label >
2015-08-02 08:27:05 +02:00
< / div >
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
2017-07-15 09:54:37 +00:00
< input id = "GlobalAnnEnabled" type = "checkbox" ng-model = "tmpOptions.globalAnnounceEnabled" / > < span translate > Global Discovery< / span >
2016-06-12 14:06:48 +00:00
< / label >
2016-05-17 00:05:38 +00:00
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
< div class = "col-md-6" >
< div class = "form-group" >
< div class = "checkbox" >
< label >
2017-07-15 09:54:37 +00:00
< input id = "RelaysEnabled" type = "checkbox" ng-model = "tmpOptions.relaysEnabled" / > < span translate > Enable Relaying< / span >
2016-06-12 14:06:48 +00:00
< / label >
2016-05-17 00:05:38 +00:00
< / div >
2015-08-02 08:27:05 +02:00
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
2017-12-07 07:08:24 +00:00
< div class = "row" >
< div class = "col-md-6" >
< div class = "form-group" >
< label translate for = "GlobalAnnServersStr" > Global Discovery Servers< / label >
< input ng-disabled = "!tmpOptions.globalAnnounceEnabled" id = "GlobalAnnServersStr" class = "form-control" type = "text" ng-model = "tmpOptions._globalAnnounceServersStr" / >
< / div >
2017-12-24 22:26:05 +00:00
< / div >
2017-12-07 07:08:24 +00:00
< div class = "col-md-6" >
2015-08-02 08:27:05 +02:00
< / div >
2016-06-12 14:06:48 +00:00
< / div >
2015-08-02 08:27:05 +02:00
< / div >
2017-12-24 22:26:05 +00:00
2018-08-25 11:36:10 +01:00
< div id = "settings-ignored-devices" class = "tab-pane" >
< div class = "form-group" >
< span ng-if = "tmpRemoteIgnoredDevices.length === 0" translate > You have no ignored devices.< / span >
< div class = "table-responsive" ng-if = "tmpRemoteIgnoredDevices.length > 0" >
< table class = "table-condensed table-striped table" style = "table-layout: auto;" >
< thead >
< tr >
< th translate > Ignored at< / th >
< th translate > Device< / th >
< th translate > Address< / th >
< th > < / th >
< / tr >
< / thead >
< tbody >
< tr ng-repeat = "ignoredDevice in tmpRemoteIgnoredDevices" >
< td class = "no-overflow-ellipse" > {{ ignoredDevice.time | date:"yyyy-MM-dd HH:mm:ss" }}< / td >
< td >
< span ng-if = "!ignoredDevice.name" > {{ ignoredDevice.deviceID }}< / span >
< span tooltip data-original-title = "{{ ignoredDevice.deviceID }}" ng-if = "ignoredDevice.name" > {{ ignoredDevice.name }}< / span >
< / td >
< td class = "no-overflow-ellipse" > {{ ignoredDevice.address }}< / td >
< td >
< a href = "" ng-click = "unignoreDeviceFromTemporaryConfig(ignoredDevice)" >
< span class = "fas fa-times" > < / span > < span translate > Unignore< / span >
< / a >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< div id = "settings-ignored-folders" class = "tab-pane" >
< div class = "form-group" >
< span ng-if = "ignoredFoldersCountTmpConfig() === 0" translate > You have no ignored folders.< / span >
< div class = "table-responsive" ng-if = "ignoredFoldersCountTmpConfig() > 0" >
< table class = "table-condensed table-striped table" style = "table-layout: auto;" >
< thead >
< tr >
< th translate > Ignored at< / th >
< th translate > Folder< / th >
< th translate > Device< / th >
< th > < / th >
< / tr >
< / thead >
< tbody ng-repeat-start = "device in tmpDevices" >
< tr ng-repeat = "ignoredFolder in device.ignoredFolders" >
< td class = "no-overflow-ellipse" > {{ ignoredFolder.time | date:"yyyy-MM-dd HH:mm:ss" }}< / td >
< td > {{ folderLabel(ignoredFolder.id) }}< / td >
< td >
< span tooltip data-original-title = "{{ device.deviceID }}" > {{ friendlyNameFromID(device.deviceID) }}< / span >
< / td >
< td >
< a href = "" ng-click = "unignoreFolderFromTemporaryConfig(device.deviceID, ignoredFolder.id)" >
< span class = "fas fa-times" > < / span > < span translate > Unignore< / span >
< / a >
< / td >
< / tr >
< / tbody >
< tfoot ng-repeat-end > < / tfoot >
< / table >
< / div >
< / div >
< / div >
2016-06-12 14:06:48 +00:00
< / div >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-primary btn-sm" ng-click = "saveSettings()" >
2018-05-24 20:59:32 +02:00
< span class = "fas fa-check" > < / span > < span translate > Save< / span >
2016-06-12 14:06:48 +00:00
< / button >
< button type = "button" class = "btn btn-default btn-sm" data-dismiss = "modal" >
2018-05-24 20:59:32 +02:00
< span class = "fas fa-times" > < / span > < span translate > Close< / span >
2016-06-12 14:06:48 +00:00
< / button >
2015-08-02 08:27:05 +02:00
< / div >
2016-10-26 21:16:53 +02:00
2016-06-12 14:06:48 +00:00
< / modal >