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

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

The newest version!
package org.hyperscala.ui

import org.hyperscala.html._
import org.hyperscala.module.Module
import org.powerscala.Version
import org.hyperscala.realtime.Realtime
import org.hyperscala.web.{Website, Webpage}
import org.hyperscala.javascript.JavaScriptString
import org.powerscala.event.{Listenable, Intercept}
import org.powerscala.property.Property
import com.outr.net.http.session.Session

/**
 * WindowSize maintains the webpage window size when required on a webpage.
 *
 * @author Matt Hicks 
 */
object WindowSize extends Module with Listenable {
  val name = "windowSize"
  val version = Version(1)

  override def dependencies = List(WindowSized, Realtime)

  /**
   * Should always reflect the width of the webpage window.
   */
  def width[S <: Session](webpage: Webpage[S]) = webpage.store.getOrSet("windowWidth", new Property[Int]())

  /**
   * Should always reflect the height of the webpage window.
   */
  def height[S <: Session](webpage: Webpage[S]) = webpage.store.getOrSet("windowHeight", new Property[Int]())

  override def init[S <: Session](website: Website[S]) = {}

  override def load[S <: Session](webpage: Webpage[S]) = {
    webpage.body.eventReceived.on {
      case evt => if (evt.event == "window_size") {
        val width = evt.json.int("width")
        val height = evt.json.int("height")

        this.width(webpage) := width
        this.height(webpage) := height

        Intercept.Stop
      } else {
        Intercept.Continue
      }
    }
    val js =
      """
        |groupedSend('windowSizeChange', 250, 'window_size', null, {
        | width: windowWidth,
        | height: windowHeight
        |});
      """.stripMargin
    WindowSized.resized(webpage, JavaScriptString(js))
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy