Skip to content

Commit

Permalink
Refactor to expose less internal API
Browse files Browse the repository at this point in the history
 Without:    180,735
    With:    314,311
Increase:    133,576 (+74%)

  2,257,187 →   252,498 - bench-big (fast)
    458,880 →   117,304 - bench-big (full)
  • Loading branch information
japgolly committed Jun 15, 2016
1 parent c7e3ba4 commit b957efa
Show file tree
Hide file tree
Showing 75 changed files with 902 additions and 759 deletions.
1 change: 0 additions & 1 deletion bench/big/src/demo/Main.scala
Expand Up @@ -2,7 +2,6 @@ package demo

import scala.scalajs.js.annotation.JSExport
import scalacss.Defaults._
import scalacss.js._

@JSExport("Main")
object Main {
Expand Down
3 changes: 1 addition & 2 deletions bench/big/src/demo/Styles.scala
Expand Up @@ -2,7 +2,6 @@ package demo

import japgolly.univeq.UnivEq
import scalacss.Defaults._
import scalacss.{Pseudo, PseudoElement, StyleS}

sealed trait Live
case object Live extends Live
Expand Down Expand Up @@ -72,7 +71,7 @@ object Styles extends StyleSheet.Inline {
private def deadColumnLabel(live: Live) =
mixinIf(live == Dead)(textDecoration := ^.lineThrough)

private val hasTitle = Pseudo.Custom("[title]", PseudoElement)
private val hasTitle = Pseudo.Custom("[title]", PseudoType.Element)

private val hoverShowsInfo = hasTitle(cursor.help)

Expand Down
1 change: 0 additions & 1 deletion bench/react-with/src/demo.scala
@@ -1,5 +1,4 @@
import org.scalajs.dom.{console, document}
import scala.scalajs.js
import scala.scalajs.js.annotation.JSExport
import japgolly.scalajs.react._, vdom.prefix_<^._, ScalazReact._

Expand Down
14 changes: 0 additions & 14 deletions core/js/src/main/scala/scalacss/PlatformDefaults.scala

This file was deleted.

59 changes: 59 additions & 0 deletions core/js/src/main/scala/scalacss/defaults/PlatformExports.scala
@@ -0,0 +1,59 @@
package scalacss.defaults

import org.scalajs.dom.document
import org.scalajs.dom.raw.HTMLStyleElement
import scalacss.internal.mutable.{StyleSheet, StyleSheetRegistry}
import scalacss.internal.{Css, Env, Renderer}

// ================
// ==== ====
// ==== JS ====
// ==== ====
// ================

object PlatformExports {

def createStyleElement(styleStr: String): HTMLStyleElement = {
val e = document.createElement("style").asInstanceOf[HTMLStyleElement]
e.`type` = "text/css"
e appendChild document.createTextNode(styleStr)
e
}

def installStyle(style: HTMLStyleElement): Unit =
document.head appendChild style


class StyleElementRenderer(s: Renderer[String]) extends Renderer[HTMLStyleElement] {
override def apply(css: Css) =
createStyleElement(s(css))
}

final class StyleSheetInlineJsOps(private val ss: StyleSheet.Inline) extends AnyVal {
/** Turns this StyleSheet into a `&lt;style&gt;` and adds it to the document DOM. */
def addToDocument()(implicit s: Renderer[HTMLStyleElement], e: Env): Unit =
installStyle(ss.render[HTMLStyleElement])
}

final class StyleSheetRegistryJsOps(private val r: StyleSheetRegistry) extends AnyVal {
/** Registered StyleSheets are turned into a `&lt;style&gt;` and added to the document DOM. */
def addToDocumentOnRegistration()(implicit s: Renderer[String], e: Env): Unit =
r.onRegistrationN { ss =>
val styleStr = ss.map(_.render[String]).mkString("\n")
val style = createStyleElement(styleStr)
installStyle(style)
}
}
}

trait PlatformExports {

implicit def toStyleSheetInlineJsOps(s: StyleSheet.Inline): PlatformExports.StyleSheetInlineJsOps =
new PlatformExports.StyleSheetInlineJsOps(s)

implicit def toStyleSheetRegistryJsOps(s: StyleSheetRegistry): PlatformExports.StyleSheetRegistryJsOps =
new PlatformExports.StyleSheetRegistryJsOps(s)

implicit final def cssStyleElementRenderer(implicit s: Renderer[String]): Renderer[HTMLStyleElement] =
new PlatformExports.StyleElementRenderer(s)
}
24 changes: 24 additions & 0 deletions core/js/src/main/scala/scalacss/internal/Platform.scala
@@ -0,0 +1,24 @@
package scalacss.internal

import scala.annotation.elidable

// ================
// ==== ====
// ==== JS ====
// ==== ====
// ================

object Platform {

/**
* Use the scalac `-Xelide-below` flag to switch from development- to production-mode.
*/
@elidable(elidable.ASSERTION)
@inline def DevMode: Boolean =
true
// @inline def DevMode: Boolean =
// scalajs.LinkingInfo.developmentMode

implicit def env: Env =
Env.empty
}
@@ -1,14 +1,14 @@
package scalacss.mutable
package scalacss.internal.mutable

// ================
// ==== ====
// ==== JS ====
// ==== ====
// ================


final class Mutex {
@inline def apply[A](f: => A): A = f
@inline def apply[A](f: => A): A =
f
}

object Mutex {
Expand Down
@@ -1,7 +1,7 @@
package scalacss.js

import scalajs.js.UndefOr
import scalacss.Env
import scalacss.internal.Env
import Env._

/**
Expand All @@ -13,16 +13,15 @@ import Env._
* Platform(Some(Chrome),Some(Blink),Some(40.0.2214.115),Some(Chrome 40.0.2214.115 on Linux 64-bit),None,None,Some(Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36),Some(OS(Some(Bits64),Some(Linux),None)))
* Platform(Some(Firefox),Some(Gecko),Some(36.0),Some(Firefox 36.0 on Linux 64-bit),None,None,Some(Mozilla/5.0 (X11; Linux x86_64; rv:36.0) Gecko/20100101 Firefox/36.0),Some(OS(Some(Bits64),Some(Linux),None)))
*/
object JsEnv {

def value: Env =
Env.empty
// PlatformJs.value.fold(Env.empty)(p =>
// Env(platform(p), Media.empty(None)))
object PlatformJsEnv {

private implicit def undefToOption[A](a: UndefOr[A]): Option[A] =
a.toOption.flatMap(Option(_))

def value: Option[Env] =
PlatformJs.value.map(p =>
Env(platform(p), Media.empty(None)))

def platform(p: PlatformJs): Platform[Option] = {
val envOs =
p.os.map(i => OS[Option](
Expand Down
42 changes: 0 additions & 42 deletions core/js/src/main/scala/scalacss/js/package.scala

This file was deleted.

13 changes: 5 additions & 8 deletions core/js/src/test/scala/scalacss/js/PlatformJsTest.scala
@@ -1,22 +1,19 @@
package scalacss.js

import utest._
import scalacss._
import TestUtil._

import scala.scalajs.js.annotation.JSExport
import utest._

@JSExport("PlatformJsTest")
object PlatformJsTest extends TestSuite {

@JSExport("test")
def test: Unit = {
def test(): Unit = {
println(PlatformJs.value)
println(JsEnv.value.platform)
println(JsEnv.value.media)
println(PlatformJsEnv.value.map(_.platform))
println(PlatformJsEnv.value.map(_.media))
}

override val tests = TestSuite {
test
test()
}
}
@@ -1,14 +1,9 @@
package scalacss
package scalacss.defaults

// =================
// ==== ====
// ==== JVM ====
// ==== ====
// =================


trait PlatformDefaults {

implicit def env: Env =
Env.empty
}
trait PlatformExports
23 changes: 23 additions & 0 deletions core/jvm/src/main/scala/scalacss/internal/Platform.scala
@@ -0,0 +1,23 @@
package scalacss.internal

import scala.annotation.elidable

// =================
// ==== ====
// ==== JVM ====
// ==== ====
// =================

object Platform {

/**
* Use the scalac `-Xelide-below` flag to switch from development- to production-mode.
*/
@elidable(elidable.ASSERTION)
@inline def DevMode: Boolean =
true

implicit def env: Env =
Env.empty

}
@@ -1,14 +1,14 @@
package scalacss.mutable
package scalacss.internal.mutable

// =================
// ==== ====
// ==== JVM ====
// ==== ====
// =================


final class Mutex {
@inline def apply[A](f: => A): A = synchronized(f)
def apply[A](f: => A): A =
synchronized(f)
}

object Mutex {
Expand Down
81 changes: 0 additions & 81 deletions core/shared/src/main/scala/scalacss/Data.scala

This file was deleted.

0 comments on commit b957efa

Please sign in to comment.