big mobile buttons on homepage

pull/713/head
Thibault Duplessis 2015-07-13 08:41:41 +02:00
parent acb0eb626e
commit 5bf9b87db3
6 changed files with 34 additions and 19 deletions

View File

@ -72,7 +72,7 @@ object Main extends LilaController {
def mobile = Open { implicit ctx =>
OptionOk(Prismic oneShotBookmark "mobile-apk") {
case (doc, resolver) => html.site.mobile(doc, resolver)
case (doc, resolver) => html.mobile.home(doc, resolver)
}
}
}

View File

@ -32,6 +32,13 @@
@trans.nbConnectedPlayers("<strong>?</strong>")
</div>
<div id="nb_games_in_play">@trans.nbGamesInPlay(s"<span>${nbRounds}</span>")</div>
@if(lila.common.HTTPRequest.isAndroid(ctx.req)) {
@mobile.googlePlayButton()
} else {
@if(lila.common.HTTPRequest.isIOS(ctx.req)) {
@mobile.appleStoreButton()
}
}
}
@moreJs = {

View File

@ -0,0 +1,6 @@
<a class="store" style="margin-top: 20px"
href="https://itunes.apple.com/us/app/lichess-free-online-chess/id968371784">
<img alt="Download on the Apple App Store"
width="172"
src="https://devimages.apple.com.edgekey.net/app-store/marketing/guidelines/images/badge-download-on-the-app-store.svg" />
</a>

View File

@ -0,0 +1,6 @@
<a class="store" style="margin-top: 30px"
href="https://play.google.com/store/apps/details?id=org.lichess.mobileapp">
<img alt="Android app on Google Play"
width="172"
src="https://developer.android.com/images/brand/en_app_rgb_wo_60.png" />
</a>

View File

@ -10,18 +10,8 @@ moreCss = cssTag("mobile.css")) {
</div>
<div class="left-side">
<h1>Play chess everywhere</h1>
<a class="store" style="margin-top: 30px"
href="https://play.google.com/store/apps/details?id=org.lichess.mobileapp">
<img alt="Android app on Google Play"
width="172"
src="https://developer.android.com/images/brand/en_app_rgb_wo_60.png" />
</a>
<a class="store" style="margin-top: 20px"
href="https://itunes.apple.com/us/app/lichess-free-online-chess/id968371784">
<img alt="Download on the Apple App Store"
width="172"
src="https://devimages.apple.com.edgekey.net/app-store/marketing/guidelines/images/badge-download-on-the-app-store.svg" />
</a>
@googlePlayButton()
@appleStoreButton()
<div class="apk" style="margin-top: 20px">
@Html(~apkDoc.getHtml("doc.content", resolver))
</div>

View File

@ -21,18 +21,24 @@ object HTTPRequest {
def userAgent(req: RequestHeader): Option[String] = req.headers get HeaderNames.USER_AGENT
val isAndroid = UaMatcher("""(?i).*android.+mobile.*""".r)
val isIOS = UaMatcher("""(?i).*(iphone|ipad|ipod).*""".r)
def referer(req: RequestHeader): Option[String] = req.headers get HeaderNames.REFERER
def sid(req: RequestHeader): Option[String] = req.session get "sid"
private val isBotPattern = {
"""(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub\.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum\.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|purebot|lingueebot|yandex\.com/bots|""" +
val isBot = UaMatcher {
("""(?i).*(googlebot|googlebot-mobile|googlebot-image|mediapartners-google|bingbot|slurp|java|wget|curl|commons-httpclient|python-urllib|libwww|httpunit|nutch|phpcrawl|msnbot|adidxbot|blekkobot|teoma|ia_archiver|gingercrawler|webmon|httrack|webcrawler|fast-webcrawler|fastenterprisecrawler|convera|biglotron|grub\.org|usinenouvellecrawler|antibot|netresearchserver|speedy|fluffy|jyxobot|bibnum\.bnf|findlink|exabot|gigabot|msrbot|seekbot|ngbot|panscient|yacybot|aisearchbot|ioi|ips-agent|tagoobot|mj12bot|dotbot|woriobot|yanga|buzzbot|mlbot|purebot|lingueebot|yandex\.com/bots|""" +
"""voyager|cyberpatrol|voilabot|baiduspider|citeseerxbot|spbot|twengabot|postrank|turnitinbot|scribdbot|page2rss|sitebot|linkdex|ezooms|dotbot|mail\.ru|discobot|zombie\.js|heritrix|findthatfile|europarchive\.org|nerdbynature\.bot|sistrixcrawler|ahrefsbot|aboundex|domaincrawler|wbsearchbot|summify|ccbot|edisterbot|seznambot|ec2linkfinder|gslfbot|aihitbot|intelium_bot|yeti|retrevopageanalyzer|lb-spider|sogou|lssbot|careerbot|wotbox|wocbot|ichiro|duckduckbot|lssrocketcrawler|drupact|webcompanycrawler|acoonbot|openindexspider|gnamgnamspider|web-archive-net\.com\.bot|backlinkcrawler|""" +
"""coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler\.com|siteexplorer\.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e\.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot|facebookexternalhit).*"""
}.r.pattern
"""coccoc|integromedb|contentcrawlerspider|toplistbot|seokicks-robot|it2media-domain-crawler|ip-web-crawler\.com|siteexplorer\.info|elisabot|proximic|changedetection|blexbot|arabot|wesee:search|niki-bot|crystalsemanticsbot|rogerbot|360spider|psbot|interfaxscanbot|lipperheyseoservice|ccmetadatascaper|g00g1e\.net|grapeshotcrawler|urlappendbot|brainobot|fr-crawler|binlar|simplecrawler|simplecrawler|livelapbot|twitterbot|cxensebot|smtbot|facebookexternalhit).*""").r
}
def isBot(req: RequestHeader): Boolean = userAgent(req) ?? { ua =>
isBotPattern.matcher(ua).matches
private def UaMatcher(regex: scala.util.matching.Regex): RequestHeader => Boolean = {
val pattern = regex.pattern
req => {
userAgent(req) ?? { ua => pattern.matcher(ua).matches }
}
}
def isHuman(req: RequestHeader) = !isBot(req)