tutanota/buildSrc/LaunchHtml.js

97 lines
4.1 KiB
JavaScript
Raw Normal View History

2017-08-15 13:54:22 +02:00
const Promise = require('bluebird')
const path = require("path")
const fs = Promise.Promise.promisifyAll(require("fs-extra"))
global.window = undefined
function getUrls(env) {
if (env.staticUrl) {
return env.staticUrl + " ws" + env.staticUrl.substring(4)
} else {
return ""
}
}
/**
* Renders the initial HTML page to bootstrap Tutanota for different environments
*/
module.exports.renderHtml = function (scripts, env) {
global.window = require("mithril/test-utils/browserMock")()
const m = require('mithril')
const render = require('mithril-node-render')
let html = '<!DOCTYPE html>\n' + render(
m("html", [
m("head", [
m("meta[charset=utf-8]"),
env.dist && env.mode === "App" ? m(`meta[http-equiv=Content-Security-Policy][content=default-src 'self'; img-src http: data: *; style-src 'unsafe-inline'; connect-src 'self' ${getUrls(env)};]`) : null,
2017-08-15 13:54:22 +02:00
m("meta[name=apple-mobile-web-app-capable][content=yes]"),
m("meta[name=mobile-web-app-capable][content=yes]"),
m("meta[name=referrer][content=no-referrer]"),
scripts.map(script => m(`script[src=${script}][defer]`)),
m.trust("<!-- TutanotaTags -->"), // everything from here to </head> is replaced at runtime for custom domains with defined metaTags
m("title", "Tutanota"),
m("meta[name=description][content=Secure email for everyone: Get your encrypted mailbox for free. Now you can show the online spies that you won&#39;t make it easy for them.]"),
m("link [rel=shortcut icon][type=image/x-icon][href=/images/logo-favicon-152.png]"),
2017-08-15 13:54:22 +02:00
m("meta[name=application-name][content=Tutanota]"),
m("link[rel=apple-touch-icon][sizes=152x152][href=/images/logo-favicon-152.png]"),
m("link[rel=icon][sizes=192x192][href=/images/logo-favicon-192.png]"),
m("meta[name=viewport][content=width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no]"),
// twitter
m("meta[name=twitter:card][content=summary]"),
m("meta[name=twitter:site][content=@TutanotaTeam]"),
m("meta[name=twitter:domain][content=tutanota.com]"),
m("meta[name=twitter:image][content=https://tutanota.com/images/share_image.png]"),
// facebook
m("meta[stream=og:site_name][content=Tutanota]"),
m("meta[stream=og:title][content=Secure Emails Become a Breeze]"),
m("meta[stream=og:description][content=Get your encrypted mailbox for free and show the Internet spies that you won&#39;t make it easy for them! Why? Because you simply can.]"),
m("meta[stream=og:locale][content=en_US]"),
m("meta[stream=og:url][content=https://tutanota.com/]"),
m("meta[stream=og:image][content=https://tutanota.com/images/share_image.png]"),
m("meta[stream=article:publisher][content=https://www.facebook.com/tutanota]"),
// google +
m("meta[itemprop=name][content=Secure Emails Become a Breeze.]"),
m("meta[itemprop=description][content=Get your encrypted mailbox for free and show the Internet spies that you won&#39;t make it easy for them! Why? Because you simply can.]"),
m("meta[itemprop=image][content=https://tutanota.com/images/share_image.png]"),
m("meta[name=apple-itunes-app][content=app-id=id922429609, affiliate-data=10lSfb]"),
]),
m("body")
])
)
global.window = undefined // we have to reset the window stream as it leads to problems with system js builder, otherwise
return html
}
module.exports.renderTestHtml = function (scripts) {
global.window = require("mithril/test-utils/browserMock")()
const m = require('mithril')
const render = require('mithril-node-render')
let html = '<!DOCTYPE html>\n' + render(
m("html", [
m("head", [
m("meta[charset=utf-8]"),
m("title", "Test"),
scripts.map(script => m(`script[src=${script}]`))
]),
m("body", "Open the console (F12) for test output!")
])
)
global.window = undefined // we have to reset the window stream as it leads to problems with system js builder, otherwise
return html
}
function _writeFile(targetFile, content) {
return fs.mkdirsAsync(path.dirname(targetFile)).then(() => fs.writeFileAsync(targetFile, content, 'utf-8'))
}
class ExternalScript {
constructor(url) {
this.url = url
}
}