Expose ignores in the UI

This commit is contained in:
Audrius Butkevicius 2014-09-19 21:02:53 +01:00
parent d96ce23451
commit b084b4faaf
5 changed files with 78 additions and 2 deletions

File diff suppressed because one or more lines are too long

View File

@ -479,6 +479,7 @@ func restPostIgnores(m *model.Model, w http.ResponseWriter, r *http.Request) {
var data map[string][]string var data map[string][]string
err := json.NewDecoder(r.Body).Decode(&data) err := json.NewDecoder(r.Body).Decode(&data)
r.Body.Close() r.Body.Close()
if err != nil { if err != nil {
http.Error(w, err.Error(), 500) http.Error(w, err.Error(), 500)
return return

View File

@ -888,6 +888,42 @@ syncthing.controller('SyncthingCtrl', function ($scope, $http, $translate, $loca
$scope.saveConfig(); $scope.saveConfig();
}; };
$scope.editIgnores = function () {
if (!$scope.editingExisting) {
return;
}
$('#editIgnoresButton').attr('disabled', 'disabled');
$http.get(urlbase + '/ignores?repo=' + encodeURIComponent($scope.currentRepo.ID))
.success(function (data) {
$('#editRepo').modal('hide');
var textArea = $('#editIgnores textarea');
textArea.val(data.ignore.join('\n'));
$('#editIgnores').modal()
.on('hidden.bs.modal', function () {
$('#editRepo').modal();
})
.on('shown.bs.modal', function () {
textArea.focus();
});
})
.then(function () {
$('#editIgnoresButton').removeAttr('disabled');
});
};
$scope.saveIgnores = function () {
if (!$scope.editingExisting) {
return;
}
$http.post(urlbase + '/ignores?repo=' + encodeURIComponent($scope.currentRepo.ID), {
ignore: $('#editIgnores textarea').val().split('\n')
});
};
$scope.setAPIKey = function (cfg) { $scope.setAPIKey = function (cfg) {
cfg.APIKey = randomString(30, 32); cfg.APIKey = randomString(30, 32);
}; };

View File

@ -522,6 +522,35 @@
<button type="button" class="btn btn-primary btn-sm" ng-click="saveRepo()" ng-disabled="repoEditor.$invalid"><span class="glyphicon glyphicon-ok"></span>&emsp;<span translate>Save</span></button> <button type="button" class="btn btn-primary btn-sm" ng-click="saveRepo()" ng-disabled="repoEditor.$invalid"><span class="glyphicon glyphicon-ok"></span>&emsp;<span translate>Save</span></button>
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&emsp;<span translate>Close</span></button> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&emsp;<span translate>Close</span></button>
<button ng-if="editingExisting" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteRepo()"><span class="glyphicon glyphicon-minus"></span>&emsp;<span translate>Delete</span></button> <button ng-if="editingExisting" type="button" class="btn btn-danger pull-left btn-sm" ng-click="deleteRepo()"><span class="glyphicon glyphicon-minus"></span>&emsp;<span translate>Delete</span></button>
<button id="editIgnoresButton" ng-if="editingExisting" type="button" class="btn btn-default pull-left btn-sm" ng-click="editIgnores()"><span class="glyphicon glyphicon-pencil"></span>&emsp;<span translate>Edit ignored files and directories</span></button>
</div>
</div>
</div>
</div>
<!-- Ignores editor modal -->
<div id="editIgnores" class="modal fade" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 translate class="modal-title">Ignored files and directories</h4>
</div>
<div class="modal-body">
<p translate>Supported patterns:</p>
<ul>
<li><code>*</code> - <span translate>Single-level wildcard (matches anything within a single directory)</span>
<li><code>**</code> - <span translate>Multi-level wildcard (matches anything within all directories at any depth)</span>
<li><code>!</code> - <span translate>Inversion of the given condition, which excludes the given pattern from any previous matches</span>
<li><code>#include</code> - <span translate>Including ignores from another file</span>
<li><code>//</code> - <span translate>Comment</span>
</ul>
<textarea class="form-control" rows="15"></textarea>
</div>
<div class="modal-footer">
<div class="pull-left"><span translate >Ignore file location</span>:<code>{{ currentRepo.Directory }}/.stignore</code></div>
<button type="button" class="btn btn-primary btn-sm" data-dismiss="modal" ng-click="saveIgnores()"><span class="glyphicon glyphicon-ok"></span>&emsp;<span translate>Save</span></button>
<button type="button" class="btn btn-default btn-sm" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span>&emsp;<span translate>Close</span></button>
</div> </div>
</div> </div>
</div> </div>

View File

@ -11,6 +11,7 @@
"Bugs": "Bugs", "Bugs": "Bugs",
"CPU Utilization": "CPU Utilization", "CPU Utilization": "CPU Utilization",
"Close": "Close", "Close": "Close",
"Comment": "Comment",
"Connection Error": "Connection Error", "Connection Error": "Connection Error",
"Copyright © 2014 Jakob Borg and the following Contributors:": "Copyright © 2014 Jakob Borg and the following Contributors:", "Copyright © 2014 Jakob Borg and the following Contributors:": "Copyright © 2014 Jakob Borg and the following Contributors:",
"Delete": "Delete", "Delete": "Delete",
@ -20,6 +21,7 @@
"Edit": "Edit", "Edit": "Edit",
"Edit Node": "Edit Node", "Edit Node": "Edit Node",
"Edit Repository": "Edit Repository", "Edit Repository": "Edit Repository",
"Edit ignored files and directories": "Edit ignored files and directories",
"Enable UPnP": "Enable UPnP", "Enable UPnP": "Enable UPnP",
"Enter comma separated \"ip:port\" addresses or \"dynamic\" to perform automatic discovery of the address.": "Enter comma separated \"ip:port\" addresses or \"dynamic\" to perform automatic discovery of the address.", "Enter comma separated \"ip:port\" addresses or \"dynamic\" to perform automatic discovery of the address.": "Enter comma separated \"ip:port\" addresses or \"dynamic\" to perform automatic discovery of the address.",
"Error": "Error", "Error": "Error",
@ -37,7 +39,11 @@
"Global Repository": "Global Repository", "Global Repository": "Global Repository",
"Idle": "Idle", "Idle": "Idle",
"Ignore Permissions": "Ignore Permissions", "Ignore Permissions": "Ignore Permissions",
"Ignore file location": "Ignore file location",
"Ignored files and directories": "Ignored files and directories",
"Including ignores from another file": "Including ignores from another file",
"Incoming Rate Limit (KiB/s)": "Incoming Rate Limit (KiB/s)", "Incoming Rate Limit (KiB/s)": "Incoming Rate Limit (KiB/s)",
"Inversion of the given condition, which excludes the given pattern from any previous matches": "Inversion of the given condition, which excludes the given pattern from any previous matches",
"Keep Versions": "Keep Versions", "Keep Versions": "Keep Versions",
"Last seen": "Last seen", "Last seen": "Last seen",
"Latest Release": "Latest Release", "Latest Release": "Latest Release",
@ -48,6 +54,7 @@
"Max File Change Rate (KiB/s)": "Max File Change Rate (KiB/s)", "Max File Change Rate (KiB/s)": "Max File Change Rate (KiB/s)",
"Max Outstanding Requests": "Max Outstanding Requests", "Max Outstanding Requests": "Max Outstanding Requests",
"Maximum Age": "Maximum Age", "Maximum Age": "Maximum Age",
"Multi-level wildcard (matches anything within all directories at any depth)": "Multi-level wildcard (matches anything within all directories at any depth)",
"Never": "Never", "Never": "Never",
"No": "No", "No": "No",
"No File Versioning": "No File Versioning", "No File Versioning": "No File Versioning",
@ -90,11 +97,13 @@
"Shown instead of Node ID in the cluster status. Will be updated to the name the node advertises if left empty.": "Shown instead of Node ID in the cluster status. Will be updated to the name the node advertises if left empty.", "Shown instead of Node ID in the cluster status. Will be updated to the name the node advertises if left empty.": "Shown instead of Node ID in the cluster status. Will be updated to the name the node advertises if left empty.",
"Shutdown": "Shutdown", "Shutdown": "Shutdown",
"Simple File Versioning": "Simple File Versioning", "Simple File Versioning": "Simple File Versioning",
"Single-level wildcard (matches anything within a single directory)": "Single-level wildcard (matches anything within a single directory)",
"Source Code": "Source Code", "Source Code": "Source Code",
"Staggered File Versioning": "Staggered File Versioning", "Staggered File Versioning": "Staggered File Versioning",
"Start Browser": "Start Browser", "Start Browser": "Start Browser",
"Stopped": "Stopped", "Stopped": "Stopped",
"Support / Forum": "Support / Forum", "Support / Forum": "Support / Forum",
"Supported patterns:": "Supported patterns:",
"Sync Protocol Listen Addresses": "Sync Protocol Listen Addresses", "Sync Protocol Listen Addresses": "Sync Protocol Listen Addresses",
"Synchronization": "Synchronization", "Synchronization": "Synchronization",
"Syncing": "Syncing", "Syncing": "Syncing",
@ -116,6 +125,7 @@
"The number of old versions to keep, per file.": "The number of old versions to keep, per file.", "The number of old versions to keep, per file.": "The number of old versions to keep, per file.",
"The number of versions must be a number and cannot be blank.": "The number of versions must be a number and cannot be blank.", "The number of versions must be a number and cannot be blank.": "The number of versions must be a number and cannot be blank.",
"The repository ID cannot be blank.": "The repository ID cannot be blank.", "The repository ID cannot be blank.": "The repository ID cannot be blank.",
"The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the dot (.), dash (-) and underscode (_) characters only.": "The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the dot (.), dash (-) and underscode (_) characters only.",
"The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the the dot (.), dash (-) and underscode (_) characters only.": "The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the the dot (.), dash (-) and underscode (_) characters only.", "The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the the dot (.), dash (-) and underscode (_) characters only.": "The repository ID must be a short identifier (64 characters or less) consisting of letters, numbers and the the dot (.), dash (-) and underscode (_) characters only.",
"The repository ID must be unique.": "The repository ID must be unique.", "The repository ID must be unique.": "The repository ID must be unique.",
"The repository path cannot be blank.": "The repository path cannot be blank.", "The repository path cannot be blank.": "The repository path cannot be blank.",