bitwarden-estensione-browser/src/popup/services/popup-utils.service.ts

77 lines
2.9 KiB
TypeScript

import { Injectable } from '@angular/core';
import { BrowserApi } from '../../browser/browserApi';
import { PlatformUtilsService } from 'jslib-common/abstractions/platformUtils.service';
@Injectable()
export class PopupUtilsService {
constructor(private platformUtilsService: PlatformUtilsService) { }
inSidebar(win: Window): boolean {
return win.location.search !== '' && win.location.search.indexOf('uilocation=sidebar') > -1;
}
inTab(win: Window): boolean {
return win.location.search !== '' && win.location.search.indexOf('uilocation=tab') > -1;
}
inPopout(win: Window): boolean {
return win.location.search !== '' && win.location.search.indexOf('uilocation=popout') > -1;
}
inPopup(win: Window): boolean {
return win.location.search === '' || win.location.search.indexOf('uilocation=') === -1 ||
win.location.search.indexOf('uilocation=popup') > -1;
}
getContentScrollY(win: Window, scrollingContainer: string = 'content'): number {
const content = win.document.getElementsByTagName(scrollingContainer)[0];
return content.scrollTop;
}
setContentScrollY(win: Window, scrollY: number, scrollingContainer: string = 'content'): void {
if (scrollY != null) {
const content = win.document.getElementsByTagName(scrollingContainer)[0];
content.scrollTop = scrollY;
}
}
popOut(win: Window, href: string = null): void {
if (href === null) {
href = win.location.href;
}
if ((typeof chrome !== 'undefined') && chrome.windows && chrome.windows.create) {
if (href.indexOf('?uilocation=') > -1) {
href = href.replace('uilocation=popup', 'uilocation=popout')
.replace('uilocation=tab', 'uilocation=popout')
.replace('uilocation=sidebar', 'uilocation=popout');
} else {
const hrefParts = href.split('#');
href = hrefParts[0] + '?uilocation=popout' + (hrefParts.length > 0 ? '#' + hrefParts[1] : '');
}
const bodyRect = document.querySelector('body').getBoundingClientRect();
chrome.windows.create({
url: href,
type: 'popup',
width: Math.round(bodyRect.width ? bodyRect.width + 60 : 375),
height: Math.round(bodyRect.height || 600),
});
if (this.inPopup(win)) {
BrowserApi.closePopup(win);
}
} else if ((typeof chrome !== 'undefined') && chrome.tabs && chrome.tabs.create) {
href = href.replace('uilocation=popup', 'uilocation=tab')
.replace('uilocation=popout', 'uilocation=tab')
.replace('uilocation=sidebar', 'uilocation=tab');
chrome.tabs.create({
url: href,
});
}
}
}