tauri/examples/helloworld/public/__tauri.js
chip c88838aa76
feat: build without proc macros (#1226)
Co-authored-by: Lucas Nogueira <lucas@tauri.studio>
2021-03-12 22:10:19 -03:00

330 lines
7.5 KiB
JavaScript

// polyfills
if (!String.prototype.startsWith) {
String.prototype.startsWith = function (searchString, position) {
position = position || 0;
return this.substr(position, searchString.length) === searchString;
};
}
(function () {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
var uid = function () {
return (
s4() +
s4() +
"-" +
s4() +
"-" +
s4() +
"-" +
s4() +
"-" +
s4() +
s4() +
s4()
);
};
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly)
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(source, true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(
target,
Object.getOwnPropertyDescriptors(source)
);
} else {
ownKeys(source).forEach(function (key) {
Object.defineProperty(
target,
key,
Object.getOwnPropertyDescriptor(source, key)
);
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
if (!window.__TAURI__) {
window.__TAURI__ = {};
}
window.__TAURI__.transformCallback = function transformCallback(
callback,
once
) {
var identifier = uid();
window[identifier] = function (result) {
if (once) {
delete window[identifier];
}
return callback && callback(result);
};
return identifier;
};
window.__TAURI__.invoke = function invoke(cmd, args = {}) {
var _this = this;
return new Promise(function (resolve, reject) {
var callback = _this.transformCallback(function (r) {
resolve(r);
delete window[error];
}, true);
var error = _this.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."));
}
if (window.rpc) {
window.rpc.notify(
cmd,
_objectSpread(
{
callback: callback,
error: error,
},
args
)
);
} else {
window.addEventListener("DOMContentLoaded", function () {
window.rpc.notify(
cmd,
_objectSpread(
{
callback: callback,
error: error,
},
args
)
);
});
}
});
};
// 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 ? target.matches("a") : target.msMatchesSelector("a")
) {
if (
target.href &&
target.href.startsWith("http") &&
target.target === "_blank"
) {
window.__TAURI__.invoke('tauri', {
__tauriModule: "Shell",
message: {
cmd: "open",
uri: target.href,
},
});
e.preventDefault();
}
break;
}
target = target.parentElement;
}
},
true
);
}
if (
document.readyState === "complete" ||
document.readyState === "interactive"
) {
__openLinks();
} else {
window.addEventListener(
"DOMContentLoaded",
function () {
__openLinks();
},
true
);
}
window.__TAURI__.invoke('tauri', {
__tauriModule: "Event",
message: {
cmd: "listen",
event: "tauri://window-created",
handler: window.__TAURI__.transformCallback(function (event) {
if (event.payload) {
var windowLabel = event.payload.label;
window.__TAURI__.__windows.push({ label: windowLabel });
}
}),
},
});
let permissionSettable = false;
let permissionValue = "default";
function isPermissionGranted() {
if (window.Notification.permission !== "default") {
return Promise.resolve(window.Notification.permission === "granted");
}
return window.__TAURI__.invoke('tauri', {
__tauriModule: "Notification",
message: {
cmd: "isNotificationPermissionGranted",
},
});
}
function setNotificationPermission(value) {
permissionSettable = true;
window.Notification.permission = value;
permissionSettable = false;
}
function requestPermission() {
return window.__TAURI__
.invoke('tauri', {
__tauriModule: "Notification",
mainThread: true,
message: {
cmd: "requestNotificationPermission",
},
})
.then(function (permission) {
setNotificationPermission(permission);
return permission;
});
}
function sendNotification(options) {
if (typeof options === "object") {
Object.freeze(options);
}
isPermissionGranted().then(function (permission) {
if (permission) {
return window.__TAURI__.invoke('tauri', {
__tauriModule: "Notification",
message: {
cmd: "notification",
options:
typeof options === "string"
? {
title: options,
}
: options,
},
});
}
});
}
window.Notification = function (title, options) {
var opts = options || {};
sendNotification(
Object.assign(opts, {
title: title,
})
);
};
window.Notification.requestPermission = requestPermission;
Object.defineProperty(window.Notification, "permission", {
enumerable: true,
get: function () {
return permissionValue;
},
set: function (v) {
if (!permissionSettable) {
throw new Error("Readonly property");
}
permissionValue = v;
},
});
isPermissionGranted().then(function (response) {
if (response === null) {
setNotificationPermission("default");
} else {
setNotificationPermission(response ? "granted" : "denied");
}
});
window.alert = function (message) {
window.__TAURI__.invoke('tauri', {
__tauriModule: "Dialog",
mainThread: true,
message: {
cmd: "messageDialog",
message: message,
},
});
};
window.confirm = function (message) {
return window.__TAURI__.invoke('tauri', {
__tauriModule: "Dialog",
mainThread: true,
message: {
cmd: "askDialog",
message: message,
},
});
};
})();