Skip to content

Commit

Permalink
Merge pull request #8 from JMaio/ui-rework
Browse files Browse the repository at this point in the history
Ui rework
  • Loading branch information
JMaio authored Mar 2, 2020
2 parents 562ebac + 269e7ee commit a51b418
Show file tree
Hide file tree
Showing 19 changed files with 1,036 additions and 304 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
"homepage": "https://jmaio.github.io/mandelbrot-maps/",
"dependencies": {
"@material-ui/core": "^4.4.2",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "^4.0.0-alpha.44",
"@mdi/js": "^4.4.95",
"complex.js": "^2.0.11",
"gl-matrix": "^3.1.0",
Expand Down Expand Up @@ -49,4 +51,4 @@
"jest-canvas-mock": "^2.2.0",
"jest-webgl-canvas-mock": "^0.2.3"
}
}
}
216 changes: 216 additions & 0 deletions public/clientDetect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
/**
* JavaScript Client Detection
* (C) viazenetti GmbH (Christian Ludwig)
*/
(function (window) {
var unknown = '-';

// screen
var screenSize = '';
if (screen.width) {
width = (screen.width) ? screen.width : '';
height = (screen.height) ? screen.height : '';
screenSize += '' + width + " x " + height;
}

// browser
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browser = navigator.appName;
var version = '' + parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion, 10);
var nameOffset, verOffset, ix;

// Opera
if ((verOffset = nAgt.indexOf('Opera')) != -1) {
browser = 'Opera';
version = nAgt.substring(verOffset + 6);
if ((verOffset = nAgt.indexOf('Version')) != -1) {
version = nAgt.substring(verOffset + 8);
}
}
// Opera Next
if ((verOffset = nAgt.indexOf('OPR')) != -1) {
browser = 'Opera';
version = nAgt.substring(verOffset + 4);
}
// Edge
else if ((verOffset = nAgt.indexOf('Edge')) != -1) {
browser = 'Microsoft Edge';
version = nAgt.substring(verOffset + 5);
}
// MSIE
else if ((verOffset = nAgt.indexOf('MSIE')) != -1) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(verOffset + 5);
}
// Chrome
else if ((verOffset = nAgt.indexOf('Chrome')) != -1) {
browser = 'Chrome';
version = nAgt.substring(verOffset + 7);
}
// Safari
else if ((verOffset = nAgt.indexOf('Safari')) != -1) {
browser = 'Safari';
version = nAgt.substring(verOffset + 7);
if ((verOffset = nAgt.indexOf('Version')) != -1) {
version = nAgt.substring(verOffset + 8);
}
}
// Firefox
else if ((verOffset = nAgt.indexOf('Firefox')) != -1) {
browser = 'Firefox';
version = nAgt.substring(verOffset + 8);
}
// MSIE 11+
else if (nAgt.indexOf('Trident/') != -1) {
browser = 'Microsoft Internet Explorer';
version = nAgt.substring(nAgt.indexOf('rv:') + 3);
}
// Other browsers
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
browser = nAgt.substring(nameOffset, verOffset);
version = nAgt.substring(verOffset + 1);
if (browser.toLowerCase() == browser.toUpperCase()) {
browser = navigator.appName;
}
}
// trim the version string
if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);

majorVersion = parseInt('' + version, 10);
if (isNaN(majorVersion)) {
version = '' + parseFloat(navigator.appVersion);
majorVersion = parseInt(navigator.appVersion, 10);
}

// mobile version
var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);

// cookie
var cookieEnabled = (navigator.cookieEnabled) ? true : false;

if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) {
document.cookie = 'testcookie';
cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
}

// system
var os = unknown;
var clientStrings = [
{s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
{s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
{s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
{s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
{s:'Windows Vista', r:/Windows NT 6.0/},
{s:'Windows Server 2003', r:/Windows NT 5.2/},
{s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
{s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
{s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
{s:'Windows 98', r:/(Windows 98|Win98)/},
{s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
{s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
{s:'Windows CE', r:/Windows CE/},
{s:'Windows 3.11', r:/Win16/},
{s:'Android', r:/Android/},
{s:'Open BSD', r:/OpenBSD/},
{s:'Sun OS', r:/SunOS/},
{s:'Chrome OS', r:/CrOS/},
{s:'Linux', r:/(Linux|X11(?!.*CrOS))/},
{s:'iOS', r:/(iPhone|iPad|iPod)/},
{s:'Mac OS X', r:/Mac OS X/},
{s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
{s:'QNX', r:/QNX/},
{s:'UNIX', r:/UNIX/},
{s:'BeOS', r:/BeOS/},
{s:'OS/2', r:/OS\/2/},
{s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}
];
for (var id in clientStrings) {
var cs = clientStrings[id];
if (cs.r.test(nAgt)) {
os = cs.s;
break;
}
}

var osVersion = unknown;

if (/Windows/.test(os)) {
osVersion = /Windows (.*)/.exec(os)[1];
os = 'Windows';
}

switch (os) {
case 'Mac OS X':
osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;

case 'Android':
osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
break;

case 'iOS':
osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
break;

default:
break;
}

// user agent string manipulation to obtain device model
var system = nAgt.substring(nAgt.indexOf('(') + 1, nAgt.indexOf(')'));
var device = system.substring(system.lastIndexOf(';') + 1);

// use JavaScript to detect GPU used from within your browser - by cvan
// https://gist.github.com/cvan/042b2448fcecefafbb6a91469484cdf8
var canvas = document.createElement('canvas');
var gl;
var debugInfo;
var gpuVendor;
var renderer;

try {
gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl');
} catch (e) {}

if (gl) {
debugInfo = gl.getExtension('WEBGL_debug_renderer_info');
gpuVendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);
}
// ----------------------------------------------------------------

window.jscd = {
browser: browser,
browserVersion: majorVersion,
browserRelease: version,
// vendor: navigator.vendor,
device: device,
os: os,
osVersion: osVersion,
mobile: mobile,
platform: navigator.platform,
screen: screenSize,
dpr: +window.devicePixelRatio.toFixed(3),
gpu: renderer,
gpuVendor: gpuVendor,
userAgent: navigator.userAgent,
// cookies: cookieEnabled,
// flashVersion: flashVersion
};
}(this));

// alert(
// 'OS: ' + jscd.os +' '+ jscd.osVersion + '\n' +
// 'Browser: ' + jscd.browser +' '+ jscd.browserMajorVersion +
// ' (' + jscd.browserVersion + ')\n' +
// 'Mobile: ' + jscd.mobile + '\n' +
// 'Flash: ' + jscd.flashVersion + '\n' +
// 'Cookies: ' + jscd.cookies + '\n' +
// 'Screen Size: ' + jscd.screen + '\n\n' +
// 'Full User Agent: ' + navigator.userAgent
// );
Binary file added public/favicon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon-256.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/favicon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 10 additions & 3 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,22 @@

gtag('config', 'UA-25811690-6');
</script>
<script src="clientDetect.js"></script>

<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon-192.png" />
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="theme-color" content="#0e4273" />

<meta property="og:title" content="Mandelbrot Maps - Fractal Explorer in WebGL" />
<meta property="og:description" content="Mandelbrot Maps is an interactive fractal explorer built using React and WebGL. Come see the pretty side of mathematics!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://jmaio.github.io/mandelbrot-maps/" />
<meta property="og:image" content="https://jmaio.github.io/mandelbrot-maps/logo-512.png">
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
<!--
Notice the use of %PUBLIC_URL% in the tags above.
It will be replaced with the URL of the `public` folder during the build.
Expand Down
Binary file added public/logo-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/logo-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 13 additions & 7 deletions public/manifest.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
{
"short_name": "React App",
"name": "Create React App Sample",
"short_name": "Mandelbrot Maps",
"name": "Mandelbrot Maps - Fractal Explorer in WebGL",
"description": "Mandelbrot Maps is an interactive fractal explorer built using React and WebGL.",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
"src": "favicon-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "favicon-512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
"theme_color": "#0e4273",
"background_color": "#0e4273"
}
Loading

0 comments on commit a51b418

Please sign in to comment.