From 7d997a3ce44bbec7eff2368a70895a4b7131aad5 Mon Sep 17 00:00:00 2001 From: Mark Polyakov Date: Thu, 11 Jan 2018 20:31:50 -0800 Subject: [PATCH] Web app guidelines and shit, offline support --- build/build.bash | 14 +++++++++----- package.json | 1 + public/{generated => }/.gitignore | 1 + public/favicon.ico | Bin 0 -> 152126 bytes public/icon-192.png | Bin 0 -> 4918 bytes public/icon-512.png | Bin 0 -> 12806 bytes public/index.html | 6 ++++-- public/manifest.json | 18 ++++++++++++++++++ public/robots.txt | 2 +- src/js/entry.js | 6 ++++++ 10 files changed, 40 insertions(+), 8 deletions(-) rename public/{generated => }/.gitignore (87%) create mode 100644 public/favicon.ico create mode 100644 public/icon-192.png create mode 100644 public/icon-512.png create mode 100644 public/manifest.json diff --git a/build/build.bash b/build/build.bash index dc905ea..089fd6b 100755 --- a/build/build.bash +++ b/build/build.bash @@ -2,17 +2,21 @@ # doesn't work with process substitution for some reason, so this will do echo 'Combining specs...' -node build/gen-specs.js specs /tmp/specs.js public/generated/sitemap.txt +node build/gen-specs.js specs /tmp/specs.js public/sitemap.txt [[ $1 == 'production' ]] && cssMini='csso' || cssMini='cat' echo 'Bundling scripts...' # TODO: maybe add --noparse /tmp/specs.js but last time i tried it didn't make a noticeable difference (but mithril did) -browserify -r /tmp/specs.js:spec-data --noparse mithril --debug src/js/entry.js > public/generated/bundle.js +browserify -r /tmp/specs.js:spec-data --noparse mithril --debug src/js/entry.js > public/bundle.js if [[ $1 == 'production' ]] then echo 'Compiling and minifying scripts...' - babel public/generated/bundle.js | uglifyjs --compress --mangle --screw-ie8 > /tmp/bundle.js - mv /tmp/bundle.js public/generated/bundle.js + # we have to write it to tmp first then move because doing it all at once causes babel to freak the fuck out + # the file is truncated before babel has fully read it + babel public/bundle.js | uglifyjs -cmo public/bundle.js + echo 'Generating service worker...' + sw-precache --root=public --sw-file=sw.js --static-file-globs='public/*' + uglifyjs -cmo public/sw.js public/sw.js 2> /dev/null fi echo 'Bundling styles...' -cat src/css/*.css | $cssMini > public/generated/all.css +cat src/css/*.css | $cssMini > public/all.css echo 'Build complete' diff --git a/package.json b/package.json index decc21d..2f42c96 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "js-yaml": "^3", "mithril": "^1", "natural-compare": "^1.4.0", + "sw-precache": "^5.2.0", "tap-spec": "*", "tape": "^4", "uglify-js": "^2" diff --git a/public/generated/.gitignore b/public/.gitignore similarity index 87% rename from public/generated/.gitignore rename to public/.gitignore index 292bee7..432d300 100644 --- a/public/generated/.gitignore +++ b/public/.gitignore @@ -2,3 +2,4 @@ all.css bundle.js specs.json sitemap.txt +sw.js diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a384f0d8bb3ef968915515db4cebc17bf55bd6eb GIT binary patch literal 152126 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 NqNbx-{_yGR{{b5?16=?B literal 0 HcmV?d00001 diff --git a/public/index.html b/public/index.html index 389d9d3..5413dd1 100644 --- a/public/index.html +++ b/public/index.html @@ -4,11 +4,13 @@ SpecDB — View and Compare Graphics Cards and CPUs + - + - + +
diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..fa5819d --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,18 @@ +{ + "name": "SpecDB", + "short_name": "SpecDB", + "description": "View and compare graphics cards, CPUs, and APUs manufactured by AMD", + "start_url": ".", + "theme_color": "#ff4545", + "background_color": "#eee", + "display": "standalone", + "icons": [{ + "src": "icon-192.png", + "type": "image/png", + "sizes": "192x192" + }, { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512" + }] +} \ No newline at end of file diff --git a/public/robots.txt b/public/robots.txt index dec05c9..282be97 100644 --- a/public/robots.txt +++ b/public/robots.txt @@ -1 +1 @@ -Sitemap: https://specdb.info/generated/sitemap.txt +Sitemap: https://specdb.info/sitemap.txt diff --git a/src/js/entry.js b/src/js/entry.js index eaa5432..9e919a7 100644 --- a/src/js/entry.js +++ b/src/js/entry.js @@ -10,4 +10,10 @@ m.mount(document.getElementById('part-selector'), require('./part-selector.js')) // extend part selector if no parts are selected on mobile if(hash.getList().length === 0) { document.getElementById('mobile-toggle').checked = true; +} + +// service worker registration +if('serviceWorker' in navigator) { + navigator.serviceWorker.register('sw.js') + .catch(() => console.log('Service worker registration failed, make sure you are in production mode')); } \ No newline at end of file