Initial commit.

This commit is contained in:
Andreas Baldeau 2014-05-12 20:08:19 +02:00
commit 0335f5aa93
1168 changed files with 261999 additions and 0 deletions

View file

@ -0,0 +1,21 @@
'use strict';
angular.module('ffffng')
.directive('fHelp', function () {
var ctrl = function ($scope) {
$scope.showHelp = false;
$scope.toggleHelp = function () {
$scope.showHelp = !$scope.showHelp;
};
};
return {
'controller': ctrl,
'restrict': 'E',
'scope': {
'text': '@'
},
'templateUrl': 'views/directives/help.html'
};
});

View file

@ -0,0 +1,16 @@
'use strict';
angular.module('ffffng')
.directive('fNavbar', function (Navigator) {
var ctrl = function ($scope) {
$scope.goHome = function () {
Navigator.home();
};
};
return {
'controller': ctrl,
'restrict': 'E',
'templateUrl': 'views/directives/navbar.html'
};
});

View file

@ -0,0 +1,117 @@
'use strict';
angular.module('ffffng')
.directive('fNodeForm', function () {
var ctrl = function ($scope, $timeout, Constraints, Validator, _) {
angular.extend($scope, {
center: {
lat: 53.565278,
lng: 10.001389,
zoom: 10
},
markers: {},
layers: {
baselayers: {
osm: {
name: '',
url: 'http://otile{s}.mqcdn.com/tiles/1.0.0/osm/{z}/{x}/{y}.jpg',
type: 'xyz',
layerOptions: {
subdomains: '1234',
attribution:
'Map data Tiles &copy; <a href="http://www.mapquest.com/" target="_blank">MapQuest</a> ' +
'<img src="http://developer.mapquest.com/content/osm/mq_logo.png" />, ' +
'Map data © OpenStreetMap contributors, CC-BY-SA'
}
}
}
}
});
var updateNodePosition = function (lat, lng) {
$scope.markers.node = {
lat: lat,
lng: lng,
focus: true,
draggable: false
};
};
$scope.$on('leafletDirectiveMap.click', function (event, leaflet) {
var lat = leaflet.leafletEvent.latlng.lat;
var lng = leaflet.leafletEvent.latlng.lng;
updateNodePosition(lat, lng);
$scope.node.coords = lat + ' ' + lng;
});
$scope.updateMap = function () {
var coords = $scope.coords || '';
coords = coords.trim();
if (_.isEmpty(coords)) {
return;
}
if ($scope.hasError('coords')) {
return;
}
var parts = coords.split(/\s+/);
var lat = Number(parts[0]);
var lng = Number(parts[1]);
updateNodePosition(lat, lng);
};
$scope.resetCoords = function () {
$scope.node.coords = '';
$scope.markers = {};
};
var isValid = _.reduce(Constraints.node, function (isValids, constraint, field) {
isValids[field] = Validator.forConstraint(constraint, true);
return isValids;
}, {});
var areValid = Validator.forConstraints(Constraints.node);
$scope.hasError = function (field) {
var value = $scope.node[field];
return !isValid[field](value);
};
$scope.hasAnyError = function () {
return !areValid($scope.node);
};
var duplicateError = {
hostname: 'Der Knotenname ist bereits vergeben. Bitte wähle einen anderen.',
key: 'Für den VPN-Schlüssel gibt es bereits einen Eintrag.',
mac: 'Für die MAC-Adresse gibt es bereits einen Eintrag.'
};
$scope.onSubmit = function (node) {
$scope.error = null;
$scope.save(node).error(function (response, code) {
switch (code) {
case 409: // conflict
$scope.error = duplicateError[response.field];
break;
default:
$scope.error = 'Es ist ein Fehler aufgetreten. Versuche es später noch einmal.';
}
});
};
};
return {
'controller': ctrl,
'restrict': 'E',
'templateUrl': 'views/directives/nodeForm.html',
'scope': {
'node': '=fNode',
'save': '=fSave',
'cancel': '=fCancel',
'action': '@fAction'
}
};
});

View file

@ -0,0 +1,20 @@
'use strict';
angular.module('ffffng')
.directive('fNodeSaved', function () {
var ctrl = function ($scope, Navigator) {
$scope.goHome = function () {
Navigator.home();
};
};
return {
'controller': ctrl,
'restrict': 'E',
'scope': {
'node': '=fNode',
'token': '=fToken'
},
'templateUrl': 'views/directives/nodeSaved.html'
};
});

View file

@ -0,0 +1,39 @@
'use strict';
angular.module('ffffng')
.directive('fTokenForm', function () {
var ctrl = function ($scope, Constraints, Validator) {
var isValid = Validator.forConstraint(Constraints.token);
$scope.hasError = function () {
var value = $scope.token;
if (value === undefined) {
return false;
}
return !isValid(value);
};
$scope.doSubmit = function (token) {
$scope.error = null;
$scope.onSubmit(token)
.error(function (response, code) {
switch (code) {
case 404: // not found
$scope.error = 'Zum Token wurde kein passender Eintrag gefunden.';
break;
default:
$scope.error = 'Es ist ein Fehler aufgetreten. Versuche es später noch einmal.';
}
});
};
};
return {
'controller': ctrl,
'restrict': 'E',
'templateUrl': 'views/directives/tokenForm.html',
'scope': {
'onSubmit': '=fSubmit',
'onCancel': '=fCancel'
}
};
});