2021-03-10 18:03:36 +01:00
|
|
|
|
import { ILocationService } from 'angular';
|
2022-04-22 14:33:13 +01:00
|
|
|
|
|
|
|
|
|
|
import { RouteParamsProvider } from '../core/navigation/patch/RouteParamsProvider';
|
|
|
|
|
|
import { RouteProvider } from '../core/navigation/patch/RouteProvider';
|
|
|
|
|
|
|
2021-03-10 18:03:36 +01:00
|
|
|
|
import { AngularLocationWrapper } from './AngularLocationWrapper';
|
2022-04-22 14:33:13 +01:00
|
|
|
|
import { coreModule } from './core_module';
|
2021-03-10 18:03:36 +01:00
|
|
|
|
|
|
|
|
|
|
// Neutralizing Angular’s location tampering
|
|
|
|
|
|
// https://stackoverflow.com/a/19825756
|
|
|
|
|
|
const tamperAngularLocation = () => {
|
|
|
|
|
|
coreModule.config([
|
|
|
|
|
|
'$provide',
|
|
|
|
|
|
($provide: any) => {
|
|
|
|
|
|
$provide.decorator('$browser', [
|
|
|
|
|
|
'$delegate',
|
|
|
|
|
|
($delegate: any) => {
|
|
|
|
|
|
$delegate.onUrlChange = () => {};
|
|
|
|
|
|
$delegate.url = () => '';
|
|
|
|
|
|
|
|
|
|
|
|
return $delegate;
|
|
|
|
|
|
},
|
|
|
|
|
|
]);
|
|
|
|
|
|
},
|
|
|
|
|
|
]);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Intercepting $location service with implementation based on history
|
|
|
|
|
|
const interceptAngularLocation = () => {
|
|
|
|
|
|
coreModule.config([
|
|
|
|
|
|
'$provide',
|
|
|
|
|
|
($provide: any) => {
|
|
|
|
|
|
$provide.decorator('$location', [
|
|
|
|
|
|
'$delegate',
|
|
|
|
|
|
($delegate: ILocationService) => {
|
2022-02-02 12:02:32 +00:00
|
|
|
|
$delegate = new AngularLocationWrapper() as unknown as ILocationService;
|
2021-03-10 18:03:36 +01:00
|
|
|
|
return $delegate;
|
|
|
|
|
|
},
|
|
|
|
|
|
]);
|
|
|
|
|
|
},
|
|
|
|
|
|
]);
|
|
|
|
|
|
coreModule.provider('$route', RouteProvider);
|
|
|
|
|
|
coreModule.provider('$routeParams', RouteParamsProvider);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
export function initAngularRoutingBridge() {
|
|
|
|
|
|
tamperAngularLocation();
|
|
|
|
|
|
interceptAngularLocation();
|
|
|
|
|
|
}
|