Merge pull request #268 from eikek/pwa-manifest

Pwa manifest
This commit is contained in:
mergify[bot] 2020-09-19 07:49:59 +00:00 committed by GitHub
commit a5332890bc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 74 additions and 6 deletions

View File

@ -38,6 +38,7 @@ object RestServer {
"/api/doc" -> templates.doc,
"/app/assets" -> WebjarRoutes.appRoutes[F](pools.blocker),
"/app" -> templates.app,
"/sw.js" -> templates.serviceWorker,
"/" -> redirectTo("/app")
).orNotFound

View File

@ -21,11 +21,13 @@ import yamusca.imports._
object TemplateRoutes {
private[this] val logger = getLogger
val `text/html` = new MediaType("text", "html")
val `text/html` = new MediaType("text", "html")
val `application/javascript` = new MediaType("application", "javascript")
trait InnerRoutes[F[_]] {
def doc: HttpRoutes[F]
def app: HttpRoutes[F]
def serviceWorker: HttpRoutes[F]
}
def apply[F[_]: Effect](blocker: Blocker, cfg: Config)(implicit
@ -35,6 +37,7 @@ object TemplateRoutes {
loadResource("/index.html").flatMap(loadTemplate(_, blocker))
)
val docTemplate = memo(loadResource("/doc.html").flatMap(loadTemplate(_, blocker)))
val swTemplate = memo(loadResource("/sw.js").flatMap(loadTemplate(_, blocker)))
val dsl = new Http4sDsl[F] {}
import dsl._
@ -43,14 +46,31 @@ object TemplateRoutes {
HttpRoutes.of[F] { case GET -> Root =>
for {
templ <- docTemplate
resp <- Ok(DocData().render(templ), `Content-Type`(`text/html`))
resp <- Ok(
DocData().render(templ),
`Content-Type`(`text/html`, Charset.`UTF-8`)
)
} yield resp
}
def app =
HttpRoutes.of[F] { case GET -> _ =>
for {
templ <- indexTemplate
resp <- Ok(IndexData(cfg).render(templ), `Content-Type`(`text/html`))
resp <- Ok(
IndexData(cfg).render(templ),
`Content-Type`(`text/html`, Charset.`UTF-8`)
)
} yield resp
}
def serviceWorker =
HttpRoutes.of[F] { case GET -> _ =>
for {
templ <- swTemplate
resp <- Ok(
IndexData(cfg).render(templ),
`Content-Type`(`application/javascript`, Charset.`UTF-8`)
)
} yield resp
}
}

View File

@ -46,6 +46,13 @@
};
</script>
<script type="application/javascript" src="{{appExtraJs}}"></script>
<script>
if('serviceWorker' in navigator) {
navigator.serviceWorker
.register('/sw.js')
.then(function() { console.log("Service Worker Registered"); });
}
</script>
</body>
</html>

View File

@ -0,0 +1,37 @@
// use a cacheName for cache versioning
var cacheName = 'v1:static';
// during the install phase you usually want to cache static assets
self.addEventListener('install', function(e) {
// once the SW is installed, go ahead and fetch the resources to make this work offline
e.waitUntil(
caches.open(cacheName).then(function(cache) {
return cache.addAll([
{{# cssUrls }}
'{{.}}',
{{/ cssUrls }}
{{# jsUrls }}
'{{.}}',
{{/ jsUrls}}
'{{appExtraJs}}'
]).then(function() {
self.skipWaiting();
});
})
);
});
// when the browser fetches a url
self.addEventListener('fetch', function(event) {
// either respond with the cached object or go ahead and fetch the actual url
event.respondWith(
caches.match(event.request).then(function(response) {
if (response) {
// retrieve from cache
return response;
}
// fetch as normal
return fetch(event.request);
})
);
});

View File

@ -87,6 +87,7 @@ view current flags settings model =
, div
[ classList
[ ( "sixteen wide column", True )
, ( "hidden invisible", resultsBelowLimit settings model )
]
]
[ div [ class "ui basic center aligned segment" ]
@ -94,7 +95,6 @@ view current flags settings model =
[ classList
[ ( "ui basic tiny button", True )
, ( "disabled", not model.moreAvailable )
, ( "hidden invisible", resultsBelowLimit settings model )
]
, disabled (not model.moreAvailable || model.moreInProgress || model.searchInProgress)
, title "Load more items"

View File

@ -37,7 +37,7 @@
}
.default-layout {
background: #fff;
/* height: 100vh; */
height: 100%;
}
.default-layout .main-content {
@ -253,7 +253,10 @@ label span.muted {
.login-layout, .register-layout, .newinvite-layout {
background: #708090;
height: 101vh;
height: 100%;
}
.login-layout > .ui.footer, .register-layout > .ui.footer, .newinvite-layout > .ui.footer {
background: #708090;
}
.login-layout .login-view, .register-layout .register-view, .newinvite-view {