diff options
Diffstat (limited to 'mavigator-cockpit/src/main/scala/mavigator/util')
4 files changed, 62 insertions, 27 deletions
diff --git a/mavigator-cockpit/src/main/scala/mavigator/util/Application.scala b/mavigator-cockpit/src/main/scala/mavigator/util/Application.scala index 7cb6f27..68a39b1 100644 --- a/mavigator-cockpit/src/main/scala/mavigator/util/Application.scala +++ b/mavigator-cockpit/src/main/scala/mavigator/util/Application.scala @@ -4,6 +4,7 @@ package util import scala.scalajs.js.annotation.JSExport import scala.scalajs.js +import org.scalajs.dom.console import org.scalajs.dom.html trait Application { @@ -13,13 +14,18 @@ trait Application { @JSExport final def start(settings: js.Dynamic): Unit = { - val env = new StaticEnvironment( + console.info("Initializing environment,,,") + val env = new Environment( root = settings.root.asInstanceOf[html.Element], - assetsBase = settings.assetsBase.asInstanceOf[String] + styleRoot = settings.styleRoot.asInstanceOf[html.Element], + baseUrl = settings.baseUrl.asInstanceOf[String] ) - val args = settings.args.asInstanceOf[js.Dictionary[Any]].mapValues(_.toString).toMap + console.info("Reading arguments...") + val args: Map[String, String] = + settings.args.asInstanceOf[js.Dictionary[Any]].mapValues(_.toString).toMap + console.info("Entering main...") main(args)(env) } diff --git a/mavigator-cockpit/src/main/scala/mavigator/util/Environment.scala b/mavigator-cockpit/src/main/scala/mavigator/util/Environment.scala new file mode 100644 index 0000000..b1076fc --- /dev/null +++ b/mavigator-cockpit/src/main/scala/mavigator/util/Environment.scala @@ -0,0 +1,15 @@ +package mavigator +package util + +import org.scalajs.dom +import org.scalajs.dom.html + +/** Represents an application's environment + * @param root The application's root element. + * @param styleRoot An html 'style' tag to which app-specific styles are appended. + * @param baseUrl Base URL. */ +case class Environment( + root: html.Element, + styleRoot: html.Element, + baseUrl: String +) diff --git a/mavigator-cockpit/src/main/scala/mavigator/util/Page.scala b/mavigator-cockpit/src/main/scala/mavigator/util/Page.scala new file mode 100644 index 0000000..f8f0dee --- /dev/null +++ b/mavigator-cockpit/src/main/scala/mavigator/util/Page.scala @@ -0,0 +1,38 @@ +package mavigator +package util + +import org.scalajs.dom +import org.scalajs.dom.html + +/** Contents of a single-page app, consisting of styles and a main element. */ +trait Page { + + private var isAttached = false + private def attached[A](action: => A) = if (!isAttached) { + sys.error("Page has not been attached to an environment yet.") + } else { + action + } + + private var baseUrl: String = null + + def asset(path: String): String = attached { baseUrl + "/" + path } + + def styles: Seq[String] + + def elements: Seq[html.Element] + + /** Attach this page to a website. */ + def attach(env: Environment): Unit = { + baseUrl = env.baseUrl + isAttached = true + + val styleText = dom.document.createTextNode(styles.reduce(_ + _)) + env.styleRoot.appendChild(styleText) + + for (elem <- elements) { + env.root.appendChild(elem) + } + } + +} diff --git a/mavigator-cockpit/src/main/scala/mavigator/util/environment.scala b/mavigator-cockpit/src/main/scala/mavigator/util/environment.scala deleted file mode 100644 index 3d58c5a..0000000 --- a/mavigator-cockpit/src/main/scala/mavigator/util/environment.scala +++ /dev/null @@ -1,24 +0,0 @@ -package mavigator -package util - -import org.scalajs.dom.html - -/** Represents an application's environment */ -trait Environment { - - /** The application's root element. */ - def root: html.Element - - /** Retrieve an asset's URL based on its file location. */ - def asset(file: String): String - -} - -class StaticEnvironment( - override val root: html.Element, - assetsBase: String -) extends Environment { - - override def asset(file: String): String = assetsBase + "/" + file - -} |