Merge branch 'abstraction_for_detection' of https://github.com/samhed/noVNC
This commit is contained in:
commit
2d53a785d5
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
import * as Log from '../core/util/logging.js';
|
import * as Log from '../core/util/logging.js';
|
||||||
import _, { l10n } from './localization.js';
|
import _, { l10n } from './localization.js';
|
||||||
import { isTouchDevice, isSafari, isIOS, isAndroid, dragThreshold }
|
import { isTouchDevice, isSafari, hasScrollbarGutter, dragThreshold }
|
||||||
from '../core/util/browser.js';
|
from '../core/util/browser.js';
|
||||||
import { setCapture, getPointerEvent } from '../core/util/events.js';
|
import { setCapture, getPointerEvent } from '../core/util/events.js';
|
||||||
import KeyTable from "../core/input/keysym.js";
|
import KeyTable from "../core/input/keysym.js";
|
||||||
|
@ -1269,8 +1269,9 @@ const UI = {
|
||||||
// Can't be clipping if viewport is scaled to fit
|
// Can't be clipping if viewport is scaled to fit
|
||||||
UI.forceSetting('view_clip', false);
|
UI.forceSetting('view_clip', false);
|
||||||
UI.rfb.clipViewport = false;
|
UI.rfb.clipViewport = false;
|
||||||
} else if (isIOS() || isAndroid()) {
|
} else if (!hasScrollbarGutter) {
|
||||||
// iOS and Android usually have shit scrollbars
|
// Some platforms have scrollbars that are difficult
|
||||||
|
// to use in our case, so we always use our own panning
|
||||||
UI.forceSetting('view_clip', true);
|
UI.forceSetting('view_clip', true);
|
||||||
UI.rfb.clipViewport = true;
|
UI.rfb.clipViewport = true;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -4,6 +4,8 @@
|
||||||
* Licensed under MPL 2.0 (see LICENSE.txt)
|
* Licensed under MPL 2.0 (see LICENSE.txt)
|
||||||
*
|
*
|
||||||
* See README.md for usage and integration instructions.
|
* See README.md for usage and integration instructions.
|
||||||
|
*
|
||||||
|
* Browser feature support detection
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as Log from './logging.js';
|
import * as Log from './logging.js';
|
||||||
|
@ -52,6 +54,38 @@ try {
|
||||||
}
|
}
|
||||||
export const supportsImageMetadata = _supportsImageMetadata;
|
export const supportsImageMetadata = _supportsImageMetadata;
|
||||||
|
|
||||||
|
let _hasScrollbarGutter = true;
|
||||||
|
try {
|
||||||
|
// Create invisible container
|
||||||
|
const container = document.createElement('div');
|
||||||
|
container.style.visibility = 'hidden';
|
||||||
|
container.style.overflow = 'scroll'; // forcing scrollbars
|
||||||
|
document.body.appendChild(container);
|
||||||
|
|
||||||
|
// Create a div and place it in the container
|
||||||
|
const child = document.createElement('div');
|
||||||
|
container.appendChild(child);
|
||||||
|
|
||||||
|
// Calculate the difference between the container's full width
|
||||||
|
// and the child's width - the difference is the scrollbars
|
||||||
|
const scrollbarWidth = (container.offsetWidth - child.offsetWidth);
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
container.parentNode.removeChild(container);
|
||||||
|
|
||||||
|
_hasScrollbarGutter = scrollbarWidth != 0;
|
||||||
|
} catch (exc) {
|
||||||
|
Log.Error("Scrollbar test exception: " + exc);
|
||||||
|
}
|
||||||
|
export const hasScrollbarGutter = _hasScrollbarGutter;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The functions for detection of platforms and browsers below are exported
|
||||||
|
* but the use of these should be minimized as much as possible.
|
||||||
|
*
|
||||||
|
* It's better to use feature detection than platform detection.
|
||||||
|
*/
|
||||||
|
|
||||||
export function isMac() {
|
export function isMac() {
|
||||||
return navigator && !!(/mac/i).exec(navigator.platform);
|
return navigator && !!(/mac/i).exec(navigator.platform);
|
||||||
}
|
}
|
||||||
|
@ -67,10 +101,6 @@ export function isIOS() {
|
||||||
!!(/ipod/i).exec(navigator.platform));
|
!!(/ipod/i).exec(navigator.platform));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isAndroid() {
|
|
||||||
return navigator && !!(/android/i).exec(navigator.userAgent);
|
|
||||||
}
|
|
||||||
|
|
||||||
export function isSafari() {
|
export function isSafari() {
|
||||||
return navigator && (navigator.userAgent.indexOf('Safari') !== -1 &&
|
return navigator && (navigator.userAgent.indexOf('Safari') !== -1 &&
|
||||||
navigator.userAgent.indexOf('Chrome') === -1);
|
navigator.userAgent.indexOf('Chrome') === -1);
|
||||||
|
|
Loading…
Reference in New Issue