All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hyperscala.ui.BasketJS.scala Maven / Gradle / Ivy

package org.hyperscala.ui

import org.hyperscala.module.Module
import org.powerscala.Version
import org.hyperscala.web.{Webpage, Website}
import org.hyperscala.html._
import scala.collection.mutable.ListBuffer
import org.hyperscala.javascript.JavaScriptString
import com.outr.net.http.session.Session


/**
 * @author Matt Hicks 
 */
object BasketJS extends Module {
  def name = "basketjs"

  def version = Version(0, 4, 0)

  override def init(website: Website) = {
    website.register("/js/basket.full.min.js", "basketjs/basket.full.min.js")
    website.register("/js/basket.full.map", "basketjs/basket.full.map")
  }

  override def load(webpage: Webpage) = {
    webpage.head.onBeforeRender {
      webpage.store("basketjs") = new BasketJSPage(webpage)
    }
  }
}

class BasketJSPage(page: Webpage) {
  val basketScriptURLS = ListBuffer.empty[String]
  val basketScriptContents = ListBuffer.empty[String]

  page.head.byTag[tag.Script].toList.foreach {              // Process and remove existing scripts
    case s => {
      if (s.src() == null || s.src().trim.isEmpty) {        // Body script
        basketScriptContents += s.scriptString
      } else {                                              // URL script
        basketScriptURLS += s.src()
      }
      s.removeFromParent()                                  // Remove the script from the parent
    }
  }

  page.head.contents += new tag.Script(mimeType = "text/javascript", src = "/js/basket.full.min.js")
  val scriptString =
    s"""
      |basket.require(
      |${basketScriptURLS.map(url => s"   { url: '$url' }").mkString(",\r\n")}
      |).then(function() {
      |${basketScriptContents.mkString("\r\n\r\n")}
      |});
    """.stripMargin
  page.head.contents += new tag.Script(content = JavaScriptString(scriptString))
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy