123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- // 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__.promisified = function promisified(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)
- window.__TAURI_INVOKE_HANDLER__(_objectSpread({
- callback: callback,
- error: error
- }, args))
- })
- }
- window.__TAURI__.loadAsset = function loadAsset(assetName, assetType) {
- return this.promisified({
- cmd: 'loadAsset',
- asset: assetName,
- assetType: assetType || 'unknown'
- })
- }
- document.addEventListener('error', function (e) {
- var target = e.target
- while (target != null) {
- if (target.matches ? target.matches('img') : target.msMatchesSelector('img')) {
- window.__TAURI__.loadAsset(target.src, 'image')
- .then(function (img) {
- target.src = img
- })
- break
- }
- target = target.parentElement
- }
- }, 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 ? target.matches('a') : target.msMatchesSelector('a')) {
- if (target.href && target.href.startsWith('http') && target.target === '_blank') {
- window.__TAURI_INVOKE_HANDLER__({
- 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)
- }
- let permissionSettable = false
- let permissionValue = 'default'
- function isPermissionGranted() {
- if (window.Notification.permission !== 'default') {
- return Promise.resolve(window.Notification.permission === 'granted')
- }
- return window.__TAURI__.promisified({
- cmd: 'isNotificationPermissionGranted'
- })
- }
- function setNotificationPermission(value) {
- permissionSettable = true
- window.Notification.permission = value
- permissionSettable = false
- }
- function requestPermission() {
- return window.__TAURI__.promisified({
- 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__.promisified({
- 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_HANDLER__({
- cmd: 'messageDialog',
- message: message
- })
- }
- window.confirm = function (message) {
- return window.__TAURI__.promisified({
- cmd: 'askDialog',
- message: message
- })
- }
- })()
|