From eccdc26636aeb48fb00a98bb9c9488c30d2099d5 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:44:56 +0100 Subject: [PATCH 1/9] Create JavascriptPage.scala --- .../controllers/stack/JavascriptPage.scala | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 sample/app/controllers/stack/JavascriptPage.scala diff --git a/sample/app/controllers/stack/JavascriptPage.scala b/sample/app/controllers/stack/JavascriptPage.scala new file mode 100644 index 0000000..09312be --- /dev/null +++ b/sample/app/controllers/stack/JavascriptPage.scala @@ -0,0 +1,53 @@ +package controllers.stack + +import jp.t2v.lab.play2.stackc.{RequestAttributeKey, RequestWithAttributes} +import play.api.mvc.Request +import play.twirl.api.{Html, HtmlFormat} + +object JavascriptPage { + + case class NonBlockingJs(uid: Int) extends RequestAttributeKey[Html] + protected object NonBlockingJsCount extends RequestAttributeKey[Int] + case class BlockingJs(uid: Int) extends RequestAttributeKey[Html] + protected object BlockingJsCount extends RequestAttributeKey[Int] + + def addNonBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { + request match { + case i: RequestWithAttributes[_] => + val uid = i.get(NonBlockingJsCount).getOrElse(0) + i.set(NonBlockingJs(uid), jscript) + i.set(NonBlockingJsCount,uid+1) + case _ => + } + + HtmlFormat.empty + } + + def addBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { + request match { + case i: RequestWithAttributes[_] => + val uid = i.get(BlockingJsCount).getOrElse(0) + i.set(BlockingJs(uid), jscript) + i.set(BlockingJsCount,uid+1) + case _ => + } + HtmlFormat.empty + } + + def getNonBlockingJs()(implicit request: Request[_]): Seq[Html] = { + request match { + case i: RequestWithAttributes[_] => + i.get(NonBlockingJsCount) match { + case Some(maxUid) => + (0 until maxUid).map { uid => + i.get(NonBlockingJs(uid)) match { + case None => HtmlFormat.empty + case Some(jscript) => jscript + } + } + case _ => Seq.empty[Html] + } + case _ => Seq.empty[Html] + } + } +} From 70f53d23361807f277254574c1604124effaacff Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:46:11 +0100 Subject: [PATCH 2/9] Update Application.scala --- sample/app/controllers/Application.scala | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sample/app/controllers/Application.scala b/sample/app/controllers/Application.scala index f5ee060..0197a68 100644 --- a/sample/app/controllers/Application.scala +++ b/sample/app/controllers/Application.scala @@ -21,5 +21,9 @@ object Application extends Controller with DBSessionElement with LoggingElement val messages = Message.findAll Ok(views.html.messages(messages)) } + + def javascriptLateBinding = StackAction { implicit req => + Ok(views.html.js) + } } From 3addfab487dc4b80a3f8680ad375012fb540b14a Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:47:25 +0100 Subject: [PATCH 3/9] Update routes --- sample/conf/routes | 1 + 1 file changed, 1 insertion(+) diff --git a/sample/conf/routes b/sample/conf/routes index b42987b..96c64d6 100644 --- a/sample/conf/routes +++ b/sample/conf/routes @@ -8,6 +8,7 @@ GET / controllers.Application.index GET /messages controllers.Application.messages GET /messages/:id controllers.Application.editMessage(id: Int) +GET /javascript controllers.Application.javascriptLateBinding # Map static resources from the /public folder to the /assets URL path GET /assets/*file controllers.Assets.at(path="/public", file) From 2737263338090029f0bd9bda3cd91dd268676bc9 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:49:22 +0100 Subject: [PATCH 4/9] Create js.scala.html --- sample/app/views/js.scala.html | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 sample/app/views/js.scala.html diff --git a/sample/app/views/js.scala.html b/sample/app/views/js.scala.html new file mode 100644 index 0000000..4887fa2 --- /dev/null +++ b/sample/app/views/js.scala.html @@ -0,0 +1,4 @@ +@(implicit request: Request[_]) +@main("Welcome to") { + @indexBody() +} From 06488d133c33209d8e7c1b1e97d056060f7719db Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:50:15 +0100 Subject: [PATCH 5/9] Create indexBody.scala.html --- sample/app/views/indexBody.scala.html | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sample/app/views/indexBody.scala.html diff --git a/sample/app/views/indexBody.scala.html b/sample/app/views/indexBody.scala.html new file mode 100644 index 0000000..d13ab9a --- /dev/null +++ b/sample/app/views/indexBody.scala.html @@ -0,0 +1,15 @@ +@import controllers.JavascriptPage + +@()(implicit request: Request[_]) + +@JavascriptPage.addNonBlockingJs { + +} + +@JavascriptPage.addNonBlockingJs { + +} From fe7b3a568017f4629f48466a06b0d046c198b518 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:50:55 +0100 Subject: [PATCH 6/9] Update main.scala.html --- sample/app/views/main.scala.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sample/app/views/main.scala.html b/sample/app/views/main.scala.html index 6c72d80..2bf19c2 100644 --- a/sample/app/views/main.scala.html +++ b/sample/app/views/main.scala.html @@ -11,5 +11,7 @@ @content + + @inlineNonBlockingJs() From f55c2e82d9ecf6357b08a36a97c691ada25ae353 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:51:46 +0100 Subject: [PATCH 7/9] Create inlineNonBlockingJs.scala.html --- sample/app/views/inlineNonBlockingJs.scala.html | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 sample/app/views/inlineNonBlockingJs.scala.html diff --git a/sample/app/views/inlineNonBlockingJs.scala.html b/sample/app/views/inlineNonBlockingJs.scala.html new file mode 100644 index 0000000..97c899a --- /dev/null +++ b/sample/app/views/inlineNonBlockingJs.scala.html @@ -0,0 +1,7 @@ +@import controllers.JavascriptPage + +@()(implicit request: Request[_]) + +@defining(JavascriptPage.getNonBlockingJs()) { scripts => + @scripts.map { item => @item } +} From c586b025f6dfc255ac594e6ab9945bb505f25955 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:52:32 +0100 Subject: [PATCH 8/9] Delete JavascriptPage.scala --- .../controllers/stack/JavascriptPage.scala | 53 ------------------- 1 file changed, 53 deletions(-) delete mode 100644 sample/app/controllers/stack/JavascriptPage.scala diff --git a/sample/app/controllers/stack/JavascriptPage.scala b/sample/app/controllers/stack/JavascriptPage.scala deleted file mode 100644 index 09312be..0000000 --- a/sample/app/controllers/stack/JavascriptPage.scala +++ /dev/null @@ -1,53 +0,0 @@ -package controllers.stack - -import jp.t2v.lab.play2.stackc.{RequestAttributeKey, RequestWithAttributes} -import play.api.mvc.Request -import play.twirl.api.{Html, HtmlFormat} - -object JavascriptPage { - - case class NonBlockingJs(uid: Int) extends RequestAttributeKey[Html] - protected object NonBlockingJsCount extends RequestAttributeKey[Int] - case class BlockingJs(uid: Int) extends RequestAttributeKey[Html] - protected object BlockingJsCount extends RequestAttributeKey[Int] - - def addNonBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { - request match { - case i: RequestWithAttributes[_] => - val uid = i.get(NonBlockingJsCount).getOrElse(0) - i.set(NonBlockingJs(uid), jscript) - i.set(NonBlockingJsCount,uid+1) - case _ => - } - - HtmlFormat.empty - } - - def addBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { - request match { - case i: RequestWithAttributes[_] => - val uid = i.get(BlockingJsCount).getOrElse(0) - i.set(BlockingJs(uid), jscript) - i.set(BlockingJsCount,uid+1) - case _ => - } - HtmlFormat.empty - } - - def getNonBlockingJs()(implicit request: Request[_]): Seq[Html] = { - request match { - case i: RequestWithAttributes[_] => - i.get(NonBlockingJsCount) match { - case Some(maxUid) => - (0 until maxUid).map { uid => - i.get(NonBlockingJs(uid)) match { - case None => HtmlFormat.empty - case Some(jscript) => jscript - } - } - case _ => Seq.empty[Html] - } - case _ => Seq.empty[Html] - } - } -} From 558152da63836003b90590c15de3119c164323d9 Mon Sep 17 00:00:00 2001 From: TimFoerster Date: Tue, 20 Dec 2016 12:53:49 +0100 Subject: [PATCH 9/9] Create JavascriptPage.scala --- sample/app/controllers/JavascriptPage.scala | 53 +++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 sample/app/controllers/JavascriptPage.scala diff --git a/sample/app/controllers/JavascriptPage.scala b/sample/app/controllers/JavascriptPage.scala new file mode 100644 index 0000000..fe78b81 --- /dev/null +++ b/sample/app/controllers/JavascriptPage.scala @@ -0,0 +1,53 @@ +package controllers + +import jp.t2v.lab.play2.stackc.{RequestAttributeKey, RequestWithAttributes} +import play.api.mvc.Request +import play.twirl.api.{Html, HtmlFormat} + +object JavascriptPage { + + case class NonBlockingJs(uid: Int) extends RequestAttributeKey[Html] + protected object NonBlockingJsCount extends RequestAttributeKey[Int] + case class BlockingJs(uid: Int) extends RequestAttributeKey[Html] + protected object BlockingJsCount extends RequestAttributeKey[Int] + + def addNonBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { + request match { + case i: RequestWithAttributes[_] => + val uid = i.get(NonBlockingJsCount).getOrElse(0) + i.set(NonBlockingJs(uid), jscript) + i.set(NonBlockingJsCount,uid+1) + case _ => + } + + HtmlFormat.empty + } + + def addBlockingJs(jscript: Html)(implicit request: Request[_]): Html = { + request match { + case i: RequestWithAttributes[_] => + val uid = i.get(BlockingJsCount).getOrElse(0) + i.set(BlockingJs(uid), jscript) + i.set(BlockingJsCount,uid+1) + case _ => + } + HtmlFormat.empty + } + + def getNonBlockingJs()(implicit request: Request[_]): Seq[Html] = { + request match { + case i: RequestWithAttributes[_] => + i.get(NonBlockingJsCount) match { + case Some(maxUid) => + (0 until maxUid).map { uid => + i.get(NonBlockingJs(uid)) match { + case None => HtmlFormat.empty + case Some(jscript) => jscript + } + } + case _ => Seq.empty[Html] + } + case _ => Seq.empty[Html] + } + } +}