48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
(function(karma, requirejs) {
|
||
|
|
||
|
// monkey patch requirejs, to use append timestamps to sources
|
||
|
// to take advantage of karma's heavy caching
|
||
|
// it would work even without this hack, but with reloading all the files all the time
|
||
|
|
||
|
var normalizePath = function(path) {
|
||
|
var normalized = [];
|
||
|
var parts = path.split('/');
|
||
|
|
||
|
for (var i = 0; i < parts.length; i++) {
|
||
|
if (parts[i] === '.') {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (parts[i] === '..' && normalized.length && normalized[normalized.length - 1] !== '..') {
|
||
|
normalized.pop();
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
normalized.push(parts[i]);
|
||
|
}
|
||
|
|
||
|
return normalized.join('/');
|
||
|
};
|
||
|
|
||
|
var createPatchedLoad = function(files, originalLoadFn) {
|
||
|
return function (context, moduleName, url) {
|
||
|
url = normalizePath(url);
|
||
|
|
||
|
if (files.hasOwnProperty(url)) {
|
||
|
url = url + '?' + files[url];
|
||
|
} else {
|
||
|
console.error('There is no timestamp for ' + url + '!');
|
||
|
}
|
||
|
|
||
|
return originalLoadFn.call(this, context, moduleName, url);
|
||
|
};
|
||
|
};
|
||
|
|
||
|
// make it async
|
||
|
karma.loaded = function() {};
|
||
|
|
||
|
// patch require.js
|
||
|
requirejs.load = createPatchedLoad(karma.files, requirejs.load);
|
||
|
|
||
|
})(window.__karma__, window.requirejs);
|