forked from darosh/angular-swagger-ui-material
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbase.js
77 lines (58 loc) · 2.32 KB
/
base.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
'use strict';
angular.module('sw.plugin.base', ['sw.plugins'])
.factory('base', function ($q, $log) {
return {
execute: execute
};
function execute (url, swagger) {
$log.debug('sw:plugin', 'base');
var deferred = $q.defer();
if (swagger && swagger.paths) {
var parts = {};
var min = Number.MAX_VALUE;
angular.forEach(swagger.paths, function (path, key) {
parts[key] = key.split('/');
if (key[0] === '/') {
parts[key].shift();
}
min = Math.min(min, parts[key].length);
});
var paths = Object.keys(swagger.paths);
var sames = [];
for (var i = 0; i < min; i++) {
var first = parts[paths[0]][i];
if (/\{.+\}/.test(first) || (parts[paths[0]].length <= 1)) {
break;
}
var same = true;
for (var j = 0; j < paths.length; j++) {
if (parts[paths[j]][i] !== first) {
same = false;
break;
}
}
if (same) {
sames.push(first);
} else {
break;
}
}
if (sames.length > 0) {
var extracted = sames.join('/');
$log.debug('sw:plugin:base:extracted', extracted);
swagger.basePath = (swagger.basePath || '/');
swagger.basePath = swagger.basePath +
((swagger.basePath[swagger.basePath.length - 1] === '/') ? '' : '/') + extracted;
angular.forEach(paths, function (path) {
swagger.paths['/' + parts[path].slice(sames.length).join('/')] = swagger.paths[path];
delete swagger.paths[path];
});
}
}
deferred.resolve(true);
return deferred.promise;
}
})
.run(function (plugins, base) {
plugins.add(plugins.BEFORE_PARSE, base);
});