blob: d21d101cbae79d4439fb504b89cd1ced95f0fd93 [file] [log] [blame]
/*
* Copyright 2018-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {
AfterContentInit,
Component,
HostListener,
Inject,
Input,
OnInit
} from '@angular/core';
import { ViewControllerImpl } from '../viewcontroller';
import {
FnService,
LogService,
PrefsService,
SvgUtilService, LionService, ZoomUtils, TopoZoomPrefs
} from 'gui2-fw-lib';
/**
* ONOS GUI -- Topology No Connected Devices View.
* View that contains the 'No Connected Devices' message
*
* This component is an SVG snippet that expects to be in an SVG element with a view box of 1000x1000
*
* It should be added to a template with a tag like <svg:g onos-nodeviceconnected />
*/
@Component({
selector: '[onos-nodeviceconnected]',
templateUrl: './nodeviceconnectedsvg.component.html',
styleUrls: ['./nodeviceconnectedsvg.component.css']
})
export class NoDeviceConnectedSvgComponent extends ViewControllerImpl implements AfterContentInit, OnInit {
@Input() bannerHeight: number = 48;
lionFn; // Function
zoomExtents: TopoZoomPrefs = <TopoZoomPrefs>{
sc: 1.0, tx: 0, ty: 0
};
constructor(
protected fs: FnService,
protected log: LogService,
protected ps: PrefsService,
protected sus: SvgUtilService,
private lion: LionService,
@Inject('Window') public window: any,
) {
super(fs, log, ps);
if (this.lion.ubercache.length === 0) {
this.lionFn = this.dummyLion;
this.lion.loadCbs.set('topo-nodevices', () => this.doLion());
} else {
this.doLion();
}
this.log.debug('NoDeviceConnectedSvgComponent constructed');
}
ngOnInit() {
this.log.debug('NoDeviceConnectedSvgComponent initialized');
}
ngAfterContentInit(): void {
this.zoomExtents = ZoomUtils.zoomToWindowSize(
this.bannerHeight, this.window.innerWidth, this.window.innerHeight);
}
@HostListener('window:resize', ['$event'])
onResize(event) {
this.zoomExtents = ZoomUtils.zoomToWindowSize(
this.bannerHeight, event.target.innerWidth, event.target.innerHeight);
}
/**
* Read the LION bundle for Details panel and set up the lionFn
*/
doLion() {
this.lionFn = this.lion.bundle('core.view.Topo');
}
/**
* A dummy implementation of the lionFn until the response is received and the LION
* bundle is received from the WebSocket
*/
dummyLion(key: string): string {
return '%' + key + '%';
}
}