Listat.an
4 years ago
9 changed files with 166 additions and 32 deletions
@ -1,4 +1,4 @@
@@ -1,4 +1,4 @@
|
||||
REM SET REACT_APP_API_URL=http://localhost:1337 |
||||
SET REACT_APP_API_URL=http://8c9e8772f1e1.ngrok.io |
||||
SET REACT_APP_API_URL=http://localhost:1337 |
||||
REM SET REACT_APP_API_URL=http://8c9e8772f1e1.ngrok.io |
||||
|
||||
yarn start |
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
import React, { Component } from 'react'; |
||||
import detectPrivateMode from './detectPrivateMode'; |
||||
import './NotificationIsPrivateTab.scss'; |
||||
|
||||
class NotificationIsPrivateTab extends Component { |
||||
state = {is_private: false} |
||||
componentDidMount(){ |
||||
detectPrivateMode((is_private) => { |
||||
this.setState({is_private}) |
||||
}) |
||||
} |
||||
render() { |
||||
const {is_private} = this.state; |
||||
if(!is_private){ |
||||
return null; |
||||
} |
||||
return ( |
||||
<div className="NotificationIsPrivateTab"><i className="fal fa-exclamation-triangle"></i> В приватній вкладці програма буде працювати не коректно</div> |
||||
); |
||||
} |
||||
} |
||||
|
||||
export default NotificationIsPrivateTab; |
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
.NotificationIsPrivateTab{ |
||||
position: absolute; |
||||
z-index: 99999999; |
||||
padding: 10px; |
||||
background: #FFB818; |
||||
border: 5px; |
||||
left: 240px; |
||||
top: 10px; |
||||
color: white; |
||||
} |
@ -0,0 +1,95 @@
@@ -0,0 +1,95 @@
|
||||
function retry(isDone, next) { |
||||
var current_trial = 0, max_retry = 50, interval = 10, is_timeout = false; |
||||
var id = window.setInterval( |
||||
function() { |
||||
if (isDone()) { |
||||
window.clearInterval(id); |
||||
next(is_timeout); |
||||
} |
||||
if (current_trial++ > max_retry) { |
||||
window.clearInterval(id); |
||||
is_timeout = true; |
||||
next(is_timeout); |
||||
} |
||||
}, |
||||
10 |
||||
); |
||||
} |
||||
|
||||
function isIE10OrLater(user_agent) { |
||||
var ua = user_agent.toLowerCase(); |
||||
if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) { |
||||
return false; |
||||
} |
||||
var match = /(?:msie|rv:)\s?([\d\.]+)/.exec(ua); |
||||
if (match && parseInt(match[1], 10) >= 10) { |
||||
return true; |
||||
} |
||||
return false; |
||||
} |
||||
|
||||
export default function detectPrivateMode(callback) { |
||||
var is_private; |
||||
|
||||
if (window.webkitRequestFileSystem) { |
||||
window.webkitRequestFileSystem( |
||||
window.TEMPORARY, 1, |
||||
function() { |
||||
is_private = false; |
||||
}, |
||||
function(e) { |
||||
console.log(e); |
||||
is_private = true; |
||||
} |
||||
); |
||||
} else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) { |
||||
var db; |
||||
try { |
||||
db = window.indexedDB.open('test'); |
||||
} catch(e) { |
||||
is_private = true; |
||||
} |
||||
|
||||
if (typeof is_private === 'undefined') { |
||||
retry( |
||||
function isDone() { |
||||
return db.readyState === 'done' ? true : false; |
||||
}, |
||||
function next(is_timeout) { |
||||
if (!is_timeout) { |
||||
is_private = db.result ? false : true; |
||||
} |
||||
} |
||||
); |
||||
} |
||||
} else if (isIE10OrLater(window.navigator.userAgent)) { |
||||
is_private = false; |
||||
try { |
||||
if (!window.indexedDB) { |
||||
is_private = true; |
||||
}
|
||||
} catch (e) { |
||||
is_private = true; |
||||
} |
||||
} else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) { |
||||
try { |
||||
window.localStorage.setItem('test', 1); |
||||
} catch(e) { |
||||
is_private = true; |
||||
} |
||||
|
||||
if (typeof is_private === 'undefined') { |
||||
is_private = false; |
||||
window.localStorage.removeItem('test'); |
||||
} |
||||
} |
||||
|
||||
retry( |
||||
function isDone() { |
||||
return typeof is_private !== 'undefined' ? true : false; |
||||
}, |
||||
function next(is_timeout) { |
||||
callback(is_private); |
||||
} |
||||
); |
||||
} |
Loading…
Reference in new issue