document.addEventListener('DOMContentLoaded', function (event : any) { window['HarnessClient'] = new HarnessHTTPClient(); }, false); var parser = document.createElement('a'); var getQuery = function (search : string) { var params : any = {}; var queries = search.slice(1).split("&"); // Convert the array of strings into an object for (var i = 0; i < queries.length; i++) { var temp = queries[i].split('='); params[temp[0]] = temp[1]; } return params; }; function ParsedUrl(url : string) { parser.href = url; this.url = url; this.protocol = parser.protocol; this.hostname = parser.hostname; this.host = parser.host; this.port = parser.port; this.pathname = parser.pathname; this.search = parser.search; this.hash = parser.hash; this.query = getQuery(this.search); } class HarnessHTTPClient { constructor() { var params = new ParsedUrl(location.href).query; var harnessName = params['harness']; var variantName = params['variant']; var mockSets = params['mocks']; if (harnessName) { harnessName = decodeURIComponent(harnessName); var mocks : any = {}; if (mockSets) { mocks = JSON.parse(decodeURIComponent(mockSets)); } var harness = Harness.getHarnessByName(harnessName); if (!harness) { harness = Harness.getDefaultHarness(); console.warn(`unable to load harness ${harnessName}, loading default instead`) } if(variantName) { variantName = decodeURIComponent(variantName); } if (variantName && !harness.hasVariant(variantName)) { console.warn(`unable to load variant ${variantName}, loading default harness`) } Mock.assertValidMocks(mocks || {}); harness.activateVariant(variantName); Harness.load(Harness.mergeMocks(harness.getDefaultMocks(), mocks)); HarnessHTTPClient.bootstrap(harness); } } public static bootstrap(harness : Harness) : void { var deps = [harness.getRootModuleName()]; window['angular'].module('AngularHarnessApplication', deps).directive('entryPoint', function () { return { template: harness.getTemplate(), templateUrl: harness.getTemplateUrl(), controller: harness.getContext() }; }); var element = document.querySelector("[ng-app]"); if (element) element.removeAttribute("ng-app"); var parent = document.body; //provides a button that will destroy a directive when clicked and re-create it when clicked again. this shaves //a huge amount of time off of automated test runs that reload the page each time. parent.innerHTML = '\n\n\n'; parent.setAttribute('ng-app', 'AngularHarnessApplication'); } }