From 5bf9b87db31579303c1da01b8a49472abf3886f4 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 13 Jul 2015 08:41:41 +0200 Subject: [PATCH] big mobile buttons on homepage --- app/controllers/Main.scala | 2 +- app/views/lobby/home.scala.html | 7 +++++++ app/views/mobile/appleStoreButton.scala.html | 6 ++++++ app/views/mobile/googlePlayButton.scala.html | 6 ++++++ .../home.scala.html} | 14 ++------------ modules/common/src/main/HTTPRequest.scala | 18 ++++++++++++------ 6 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 app/views/mobile/appleStoreButton.scala.html create mode 100644 app/views/mobile/googlePlayButton.scala.html rename app/views/{site/mobile.scala.html => mobile/home.scala.html} (77%) diff --git a/app/controllers/Main.scala b/app/controllers/Main.scala index 841c9b0eca..e32ec03ecd 100644 --- a/app/controllers/Main.scala +++ b/app/controllers/Main.scala @@ -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) } } } diff --git a/app/views/lobby/home.scala.html b/app/views/lobby/home.scala.html index d11a3de5ea..338eee94b4 100644 --- a/app/views/lobby/home.scala.html +++ b/app/views/lobby/home.scala.html @@ -32,6 +32,13 @@ @trans.nbConnectedPlayers("?")
@trans.nbGamesInPlay(s"${nbRounds}")
+@if(lila.common.HTTPRequest.isAndroid(ctx.req)) { +@mobile.googlePlayButton() +} else { +@if(lila.common.HTTPRequest.isIOS(ctx.req)) { +@mobile.appleStoreButton() +} +} } @moreJs = { diff --git a/app/views/mobile/appleStoreButton.scala.html b/app/views/mobile/appleStoreButton.scala.html new file mode 100644 index 0000000000..648a1a7759 --- /dev/null +++ b/app/views/mobile/appleStoreButton.scala.html @@ -0,0 +1,6 @@ + + Download on the Apple App Store + diff --git a/app/views/mobile/googlePlayButton.scala.html b/app/views/mobile/googlePlayButton.scala.html new file mode 100644 index 0000000000..ea46874978 --- /dev/null +++ b/app/views/mobile/googlePlayButton.scala.html @@ -0,0 +1,6 @@ + + Android app on Google Play + diff --git a/app/views/site/mobile.scala.html b/app/views/mobile/home.scala.html similarity index 77% rename from app/views/site/mobile.scala.html rename to app/views/mobile/home.scala.html index 06c8876aad..c18362f8a1 100644 --- a/app/views/site/mobile.scala.html +++ b/app/views/mobile/home.scala.html @@ -10,18 +10,8 @@ moreCss = cssTag("mobile.css")) {

Play chess everywhere

- - Android app on Google Play - - - Download on the Apple App Store - + @googlePlayButton() + @appleStoreButton()
@Html(~apkDoc.getHtml("doc.content", resolver))
diff --git a/modules/common/src/main/HTTPRequest.scala b/modules/common/src/main/HTTPRequest.scala index 5972562716..d642ed5b25 100644 --- a/modules/common/src/main/HTTPRequest.scala +++ b/modules/common/src/main/HTTPRequest.scala @@ -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)