--- /dev/null
+<h1>Hello %USER%!</h1>
+<p>Welcome to %MYSITE%.</p>
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2017 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import popcorn
+import popcorn::pop_templates
+
+class MyTemplateHandler
+ super Handler
+
+ # Template to render
+ var template = new TemplateString("""
+ <h1>Hello %USER%!</h1>
+ <p>Welcome to %MYSITE%.</p>
+ """)
+
+ redef fun get(req, res) do
+ # Values to add in the template
+ var values = new HashMap[String, String]
+ values["USER"] = "Morriar"
+ values["MYSITE"] = "My super website"
+
+ # Render it
+ res.template(template, values)
+ end
+end
+
+class MyTemplateStringHandler
+ super Handler
+
+ redef fun get(req, res) do
+ # Values to add in the template
+ var values = new HashMap[String, String]
+ values["USER"] = "Morriar"
+ values["MYSITE"] = "My super website"
+
+ # Render it with a shortcut
+ res.template_string("""
+ <h1>Hello %USER%!</h1>
+ <p>Welcome to %MYSITE%.</p>
+ """, values)
+ end
+end
+
+class MyTemplateFileHandler
+ super Handler
+
+ # Use template from external file
+ var tpl_file = "example_template.tpl"
+
+ redef fun get(req, res) do
+ # Values to add in the template
+ var values = new HashMap[String, String]
+ values["USER"] = "Morriar"
+ values["MYSITE"] = "My super website"
+
+ # Render it from an external file
+ res.template_file(tpl_file, values)
+ end
+end
+
+var app = new App
+app.use("/", new MyTemplateHandler)
+app.use("/string", new MyTemplateStringHandler)
+app.use("/file", new MyTemplateFileHandler)
+app.listen("localhost", 3000)
--- /dev/null
+
+[Client] curl -s localhost:*****/
+ <h1>Hello Morriar!</h1>
+ <p>Welcome to My super website.</p>
+
--- /dev/null
+
+[Client] curl -s localhost:*****/
+<h1>Hello Morriar!</h1>
+<p>Welcome to My super website.</p>
+
--- /dev/null
+
+[Client] curl -s localhost:*****/
+ <h1>Hello Morriar!</h1>
+ <p>Welcome to My super website.</p>
+
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2017 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module test_example_templates is test_suite
+
+import pop_tests
+intrude import example_templates
+
+class TestExampleTemplate
+ super TestPopcorn
+
+ redef fun client_test do
+ system "curl -s {host}:{port}/"
+ end
+
+ fun test_example_template do
+ var app = new App
+ app.use("/", new MyTemplateHandler)
+ run_test(app)
+ end
+end
+
+class TestExampleTemplateString
+ super TestPopcorn
+
+ redef fun client_test do
+ system "curl -s {host}:{port}/"
+ end
+
+ fun test_example_template_string do
+ var app = new App
+ app.use("/", new MyTemplateStringHandler)
+ run_test(app)
+ end
+end
+
+class TestExampleTemplateFile
+ super TestPopcorn
+
+ redef fun client_test do
+ system "curl -s {host}:{port}/"
+ end
+
+ fun test_example_template_file do
+ var app = new App
+ var handler = new MyTemplateFileHandler
+ handler.tpl_file = test_path / "../example_template.tpl"
+ app.use("/", handler)
+ run_test(app)
+ end
+end
--- /dev/null
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2017 Alexandre Terrasa <alexandre@moz-code.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+module pop_templates
+
+import popcorn::pop_handlers
+import template::macro
+
+redef class HttpResponse
+
+ # Render the TemplateString `tpl` with `values` and write it as html.
+ fun template(tpl: nullable TemplateString, values: nullable Map[String, nullable Writable], status: nullable Int) do
+ if tpl != null and values != null then
+ for k, v in values do
+ if not tpl.has_macro(k) or v == null then continue
+ tpl.replace(k, v)
+ end
+ end
+ html(tpl, status)
+ end
+
+ # Render `file` as a TemplateString with `values` and write it as html.
+ fun template_string(tpl_string: nullable String, values: nullable Map[String, nullable Writable], status: nullable Int) do
+ var tpl = new TemplateString(tpl_string or else "")
+ template(tpl, values, status)
+ end
+
+ # Render `file` as a TemplateString with `values` and write it as html.
+ fun template_file(file: String, values: nullable Map[String, nullable Writable], status: nullable Int) do
+ var tpl = new TemplateString.from_file(file)
+ template(tpl, values, status)
+ end
+end