124 lines
4.3 KiB
JavaScript
124 lines
4.3 KiB
JavaScript
|
|
(function() {
|
|
var platform = window.pywebview.platform;
|
|
var disableText = '%(text_select)s' === 'False';
|
|
var disableTextCss = 'body {-webkit-user-select: none; -khtml-user-select: none; -ms-user-select: none; user-select: none; cursor: default;}'
|
|
|
|
if (platform == 'mshtml') {
|
|
window.alert = function(msg) {
|
|
window.external.alert(msg);
|
|
}
|
|
} else if (platform == 'edgechromium') {
|
|
window.alert = function (message) {
|
|
window.chrome.webview.postMessage(['_pywebviewAlert', pywebview.stringify(message), 'alert']);
|
|
}
|
|
} else if (platform == 'gtkwebkit2') {
|
|
window.alert = function (message) {
|
|
window.webkit.messageHandlers.jsBridge.postMessage(pywebview.stringify({funcName: '_pywebviewAlert', params: message, id: 'alert'}));
|
|
}
|
|
} else if (platform == 'cocoa') {
|
|
window.print = function() {
|
|
window.webkit.messageHandlers.browserDelegate.postMessage('print');
|
|
}
|
|
} else if (platform === 'qtwebengine') {
|
|
window.alert = function (message) {
|
|
window.pywebview._QWebChannel.objects.external.call('_pywebviewAlert', pywebview.stringify(message), 'alert');
|
|
}
|
|
} else if (platform === 'qtwebkit') {
|
|
window.alert = function (message) {
|
|
window.external.invoke(JSON.stringify(['_pywebviewAlert', message, 'alert']));
|
|
}
|
|
}
|
|
|
|
if (disableText) {
|
|
var css = document.createElement("style");
|
|
css.type = "text/css";
|
|
css.innerHTML = disableTextCss;
|
|
document.head.appendChild(css);
|
|
}
|
|
|
|
function disableTouchEvents() {
|
|
var initialX = 0;
|
|
var initialY = 0;
|
|
|
|
function onMouseMove(ev) {
|
|
var x = ev.screenX - initialX;
|
|
var y = ev.screenY - initialY;
|
|
window.pywebview._jsApiCallback('pywebviewMoveWindow', [x, y], 'move');
|
|
}
|
|
|
|
function onMouseUp() {
|
|
window.removeEventListener('mousemove', onMouseMove);
|
|
window.removeEventListener('mouseup', onMouseUp);
|
|
}
|
|
|
|
function onMouseDown(ev) {
|
|
if (
|
|
'%(drag_region_direct_target_only)s' === 'True' &&
|
|
!ev.target.matches('%(drag_selector)s')
|
|
) {
|
|
return
|
|
}
|
|
|
|
initialX = ev.clientX;
|
|
initialY = ev.clientY;
|
|
window.addEventListener('mouseup', onMouseUp);
|
|
window.addEventListener('mousemove', onMouseMove);
|
|
}
|
|
|
|
function onBodyMouseDown(event) {
|
|
var target = event.target;
|
|
var dragSelectorElements = document.querySelectorAll('%(drag_selector)s');
|
|
|
|
while (target && target !== document.body && target !== document.documentElement) {
|
|
if (target.nodeType === 1) {
|
|
// Check if target matches the drag selector
|
|
for (var i = 0; i < dragSelectorElements.length; i++) {
|
|
if (dragSelectorElements[i] === target) {
|
|
onMouseDown(event);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// If it doesn't match, continue up the DOM tree
|
|
target = target.parentNode;
|
|
}
|
|
}
|
|
|
|
document.body.addEventListener('mousedown', onBodyMouseDown);
|
|
|
|
// easy drag for edge chromium
|
|
if ('%(easy_drag)s' === 'True') {
|
|
window.addEventListener('mousedown', onMouseDown);
|
|
}
|
|
|
|
if ('%(zoomable)s' === 'False') {
|
|
document.body.addEventListener('touchstart', function(e) {
|
|
if ((e.touches.length > 1) || e.targetTouches.length > 1) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
e.stopImmediatePropagation();
|
|
}
|
|
}, {passive: false});
|
|
|
|
window.addEventListener('wheel', function (e) {
|
|
if (e.ctrlKey) {
|
|
e.preventDefault();
|
|
}
|
|
}, {passive: false});
|
|
}
|
|
|
|
// draggable
|
|
if ('%(draggable)s' === 'False') {
|
|
document.addEventListener('dragstart', function(e) {
|
|
if (e.target.tagName === 'IMG' || e.target.tagName === 'A') {
|
|
e.preventDefault();
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
disableTouchEvents();
|
|
})();
|