Merge pull request #3088 from quay/joseph.schorr/QUAY-940/url-join-libn
Change to using a lib to build URLs
This commit is contained in:
commit
2e403633b0
18 changed files with 85 additions and 318 deletions
|
@ -84,7 +84,7 @@ angular.module('quay').directive('entitySearch', function () {
|
|||
$scope.checkLazyLoad = function() {
|
||||
if (!$scope.namespace || !$scope.thisUser || !$scope.requiresLazyLoading ||
|
||||
$scope.isLazyLoading || !$scope.userRequestedLazyLoading) {
|
||||
return;
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.isLazyLoading = true;
|
||||
|
@ -229,15 +229,20 @@ angular.module('quay').directive('entitySearch', function () {
|
|||
name: 'entities' + $rootScope.__entity_search_counter,
|
||||
remote: {
|
||||
url: '/api/v1/entities/%QUERY',
|
||||
replace: function (url, uriEncodedQuery) {
|
||||
replace: function (query_url, uriEncodedQuery) {
|
||||
$scope.lazyLoad();
|
||||
|
||||
var namespace = $scope.namespace || '';
|
||||
url = url.replace('%QUERY', uriEncodedQuery);
|
||||
url += '?namespace=' + encodeURIComponent(namespace);
|
||||
|
||||
var url = UtilService.getRestUrl(query_url.replace('%QUERY', uriEncodedQuery));
|
||||
url.setQueryParameter('namespace', namespace);
|
||||
|
||||
if ($scope.isOrganization && isSupported('team')) {
|
||||
url += '&includeTeams=true'
|
||||
url.setQueryParameter('includeTeams', true);
|
||||
}
|
||||
|
||||
if (isSupported('org')) {
|
||||
url += '&includeOrgs=true'
|
||||
url.setQueryParameter('includeOrgs', true);
|
||||
}
|
||||
return url;
|
||||
},
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
/**
|
||||
* An element which displays a small flag representing the given location, as well as a ping
|
||||
* latency gauge for that location.
|
||||
*/
|
||||
angular.module('quay').directive('locationView', function () {
|
||||
var directiveDefinitionObject = {
|
||||
priority: 0,
|
||||
templateUrl: '/static/directives/location-view.html',
|
||||
replace: false,
|
||||
transclude: true,
|
||||
restrict: 'C',
|
||||
scope: {
|
||||
'location': '=location'
|
||||
},
|
||||
controller: function($rootScope, $scope, $element, $http, PingService) {
|
||||
var LOCATIONS = {
|
||||
'local_us': { 'country': 'US', 'data': 'quay-registry.s3.amazonaws.com', 'title': 'United States' },
|
||||
'local_eu': { 'country': 'EU', 'data': 'quay-registry-eu.s3-eu-west-1.amazonaws.com', 'title': 'Europe' },
|
||||
|
||||
's3_us_east_1': { 'country': 'US', 'data': 'quay-registry.s3.amazonaws.com', 'title': 'United States (East)' },
|
||||
's3_us_west_1': { 'country': 'US', 'data': 'quay-registry-cali.s3.amazonaws.com', 'title': 'United States (West)' },
|
||||
|
||||
's3_eu_west_1': { 'country': 'EU', 'data': 'quay-registry-eu.s3-eu-west-1.amazonaws.com', 'title': 'Europe' },
|
||||
|
||||
's3_ap_southeast_1': { 'country': 'SG', 'data': 'quay-registry-singapore.s3-ap-southeast-1.amazonaws.com', 'title': 'Singapore' },
|
||||
's3_ap_southeast_2': { 'country': 'AU', 'data': 'quay-registry-sydney.s3-ap-southeast-2.amazonaws.com', 'title': 'Australia' },
|
||||
|
||||
// 's3_ap_northeast-1': { 'country': 'JP', 'data': 's3-ap-northeast-1.amazonaws.com', 'title': 'Japan' },
|
||||
// 's3_sa_east1': { 'country': 'BR', 'data': 's3-east-1.amazonaws.com', 'title': 'Sao Paulo' }
|
||||
};
|
||||
|
||||
$scope.locationPing = null;
|
||||
|
||||
$scope.getLocationTooltip = function(location, ping) {
|
||||
var tip = $scope.getLocationTitle(location) + '<br>';
|
||||
if (ping == null) {
|
||||
tip += '(Loading)';
|
||||
} else if (ping < 0) {
|
||||
tip += '<br><b>Note: Could not contact server</b>';
|
||||
} else {
|
||||
tip += 'Estimated Ping: ' + (ping ? ping + 'ms' : '(Loading)');
|
||||
}
|
||||
return tip;
|
||||
};
|
||||
|
||||
$scope.getLocationTitle = function(location) {
|
||||
if (!LOCATIONS[location]) {
|
||||
return '(Unknown)';
|
||||
}
|
||||
return 'Image data is located in ' + LOCATIONS[location]['title'];
|
||||
};
|
||||
|
||||
$scope.getLocationImage = function(location) {
|
||||
if (!LOCATIONS[location]) {
|
||||
return 'unknown.png';
|
||||
}
|
||||
return LOCATIONS[location]['country'] + '.png';
|
||||
};
|
||||
|
||||
$scope.getLocationPing = function(location) {
|
||||
var url = 'https://' + LOCATIONS[location]['data'] + '/okay.txt';
|
||||
PingService.pingUrl($scope, url, function(ping, success, count) {
|
||||
if (count == 3 || !success) {
|
||||
$scope.locationPing = success ? ping : -1;
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
$scope.$watch('location', function(location) {
|
||||
if (!location) { return; }
|
||||
$scope.getLocationPing(location);
|
||||
});
|
||||
}
|
||||
};
|
||||
return directiveDefinitionObject;
|
||||
});
|
|
@ -1,5 +1,5 @@
|
|||
import { LogUsageChart } from '../../graphing';
|
||||
|
||||
import { parse } from 'path';
|
||||
|
||||
/**
|
||||
* Element which displays usage logs for the given entity.
|
||||
|
@ -383,8 +383,8 @@ angular.module('quay').directive('logsView', function () {
|
|||
url = UtilService.getRestUrl('superuser', suffix)
|
||||
}
|
||||
|
||||
url += '?starttime=' + encodeURIComponent(getDateString($scope.options.logStartDate));
|
||||
url += '&endtime=' + encodeURIComponent(getDateString($scope.options.logEndDate));
|
||||
url.setQueryParameter('starttime', getDateString($scope.options.logStartDate));
|
||||
url.setQueryParameter('endtime', getDateString($scope.options.logEndDate));
|
||||
return url;
|
||||
};
|
||||
|
||||
|
@ -405,7 +405,7 @@ angular.module('quay').directive('logsView', function () {
|
|||
|
||||
$scope.chartLoading = true;
|
||||
|
||||
var aggregateUrl = getUrl('aggregatelogs')
|
||||
var aggregateUrl = getUrl('aggregatelogs').toString();
|
||||
var loadAggregate = Restangular.one(aggregateUrl);
|
||||
loadAggregate.customGET().then(function(resp) {
|
||||
$scope.chart = new LogUsageChart(logKinds);
|
||||
|
@ -430,12 +430,10 @@ angular.module('quay').directive('logsView', function () {
|
|||
|
||||
$scope.loading = true;
|
||||
|
||||
var logsUrl = getUrl('logs');
|
||||
if ($scope.nextPageToken) {
|
||||
logsUrl = logsUrl + '&next_page=' + encodeURIComponent($scope.nextPageToken);
|
||||
}
|
||||
var url = getUrl('logs');
|
||||
url.setQueryParameter('next_page', $scope.nextPageToken);
|
||||
|
||||
var loadLogs = Restangular.one(logsUrl);
|
||||
var loadLogs = Restangular.one(url.toString());
|
||||
loadLogs.customGET().then(function(resp) {
|
||||
resp.logs.forEach(function(log) {
|
||||
$scope.logs.push(log);
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
/**
|
||||
* An element which displays a repository search box.
|
||||
*/
|
||||
angular.module('quay').directive('repoSearch', function () {
|
||||
var number = 0;
|
||||
var directiveDefinitionObject = {
|
||||
priority: 0,
|
||||
templateUrl: '/static/directives/repo-search.html',
|
||||
replace: false,
|
||||
transclude: false,
|
||||
restrict: 'C',
|
||||
scope: {
|
||||
},
|
||||
controller: function($scope, $element, $location, UserService, Restangular, UtilService) {
|
||||
var searchToken = 0;
|
||||
$scope.$watch( function () { return UserService.currentUser(); }, function (currentUser) {
|
||||
++searchToken;
|
||||
}, true);
|
||||
|
||||
var repoHound = new Bloodhound({
|
||||
name: 'repositories',
|
||||
remote: {
|
||||
url: '/api/v1/find/repository?query=%QUERY',
|
||||
replace: function (url, uriEncodedQuery) {
|
||||
url = url.replace('%QUERY', uriEncodedQuery);
|
||||
url += '&cb=' + searchToken;
|
||||
return url;
|
||||
},
|
||||
filter: function(data) {
|
||||
var datums = [];
|
||||
for (var i = 0; i < data.repositories.length; ++i) {
|
||||
var repo = data.repositories[i];
|
||||
datums.push({
|
||||
'value': repo.name,
|
||||
'tokens': [repo.name, repo.namespace],
|
||||
'repo': repo
|
||||
});
|
||||
}
|
||||
return datums;
|
||||
}
|
||||
},
|
||||
datumTokenizer: function(d) {
|
||||
return Bloodhound.tokenizers.whitespace(d.val);
|
||||
},
|
||||
queryTokenizer: Bloodhound.tokenizers.whitespace
|
||||
});
|
||||
repoHound.initialize();
|
||||
|
||||
var element = $($element[0].childNodes[0]);
|
||||
element.typeahead({ 'highlight': true }, {
|
||||
source: repoHound.ttAdapter(),
|
||||
templates: {
|
||||
'suggestion': function (datum) {
|
||||
template = '<div class="repo-mini-listing">';
|
||||
template += '<i class="fa fa-hdd-o fa-lg"></i>'
|
||||
template += '<span class="name">' + datum.repo.namespace +'/' + datum.repo.name + '</span>'
|
||||
if (datum.repo.description) {
|
||||
template += '<span class="description">' + UtilService.getFirstMarkdownLineAsText(datum.repo.description) + '</span>'
|
||||
}
|
||||
|
||||
template += '</div>'
|
||||
return template;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
element.on('typeahead:selected', function (e, datum) {
|
||||
element.typeahead('val', '');
|
||||
$scope.$apply(function() {
|
||||
$location.path('/repository/' + datum.repo.namespace + '/' + datum.repo.name);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
return directiveDefinitionObject;
|
||||
});
|
Reference in a new issue