123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- // Copyright 2019-2023 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- ; (function () {
- function uid() {
- return window.crypto.getRandomValues(new Uint32Array(1))[0]
- }
- if (!window.__TAURI__) {
- Object.defineProperty(window, '__TAURI__', {
- value: {}
- })
- }
- window.__TAURI__.transformCallback = function transformCallback(
- callback,
- once
- ) {
- var identifier = uid()
- var prop = `_${identifier}`
- Object.defineProperty(window, prop, {
- value: (result) => {
- if (once) {
- Reflect.deleteProperty(window, prop)
- }
- return callback && callback(result)
- },
- writable: false,
- configurable: true
- })
- return identifier
- }
- const ipcQueue = []
- let isWaitingForIpc = false
- function waitForIpc() {
- if ('__TAURI_IPC__' in window) {
- for (const action of ipcQueue) {
- action()
- }
- } else {
- setTimeout(waitForIpc, 50)
- }
- }
- window.__TAURI_INVOKE__ = function invoke(cmd, args = {}) {
- return new Promise(function (resolve, reject) {
- var callback = window.__TAURI__.transformCallback(function (r) {
- resolve(r)
- delete window[`_${error}`]
- }, true)
- var error = window.__TAURI__.transformCallback(function (e) {
- reject(e)
- delete window[`_${callback}`]
- }, true)
- if (typeof cmd === 'string') {
- args.cmd = cmd
- } else if (typeof cmd === 'object') {
- args = cmd
- } else {
- return reject(new Error('Invalid argument type.'))
- }
- const action = () => {
- window.__TAURI_IPC__({
- ...args,
- callback,
- error: error
- })
- }
- if (window.__TAURI_IPC__) {
- action()
- } else {
- ipcQueue.push(action)
- if (!isWaitingForIpc) {
- waitForIpc()
- isWaitingForIpc = true
- }
- }
- })
- }
- // open <a href="..."> links with the Tauri API
- function __openLinks() {
- document.querySelector('body').addEventListener(
- 'click',
- function (e) {
- var target = e.target
- while (target != null) {
- if (target.matches('a')) {
- if (
- target.href &&
- (['http://', 'https://', 'mailto:', 'tel:'].some(v => target.href.startsWith(v))) &&
- target.target === '_blank'
- ) {
- window.__TAURI_INVOKE__('tauri', {
- __tauriModule: 'Shell',
- message: {
- cmd: 'open',
- path: target.href
- }
- })
- e.preventDefault()
- }
- break
- }
- target = target.parentElement
- }
- }
- )
- }
- if (
- document.readyState === 'complete' ||
- document.readyState === 'interactive'
- ) {
- __openLinks()
- } else {
- window.addEventListener(
- 'DOMContentLoaded',
- function () {
- __openLinks()
- },
- true
- )
- }
- // drag region
- document.addEventListener('mousedown', (e) => {
- if (e.target.hasAttribute('data-tauri-drag-region') && e.buttons === 1) {
- // prevents text cursor
- e.preventDefault()
- // fix #2549: double click on drag region edge causes content to maximize without window sizing change
- // https://github.com/tauri-apps/tauri/issues/2549#issuecomment-1250036908
- e.stopImmediatePropagation()
- // start dragging if the element has a `tauri-drag-region` data attribute and maximize on double-clicking it
- window.__TAURI_INVOKE__('tauri', {
- __tauriModule: 'Window',
- message: {
- cmd: 'manage',
- data: {
- cmd: {
- type: e.detail === 2 ? '__toggleMaximize' : 'startDragging'
- }
- }
- }
- })
- }
- })
- })()
|