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

os.web.angular.Angular.scala Maven / Gradle / Ivy

The newest version!
// Copyright AGPL3 2015 ~ Optersoft SL

package os.web.angular

import scala.annotation.StaticAnnotation
import scala.scalajs.js

trait Angular extends js.Object {

  def bootstrap(appComponentType: js.Object): Unit = js.native

  def bootstrap(appComponentType: js.Dynamic): Unit = js.native

  //--------------- DIRECTIVES -----------------
  def For: js.Object = js.native
  def If: js.Object = js.native
}

object Angular {
  import scala.reflect.macros.blackbox
  import scala.language.experimental.macros

  @inline final implicit class RichAngular(val self: Angular) extends AnyVal {

    @inline def bootstrapWith[T]: Unit = macro Macros.bootstrapWith[T]

  }

  class Macros(val c: blackbox.Context) extends JsBlackboxMacroTools {
    import c.universe._

    def bootstrapWith[T: c.WeakTypeTag] = {
      val t = selectGlobalDynamic[T]
      val angular = Select(c.prefix.tree, TermName("self"))
      val r =
        q"""$angular.bootstrap($t)"""
      r
    }

    private def registerAll(annottees: Map[String, Any]) =
      annottees.toSeq.map {
        case (_, tree: Tree) => tree
      }

    def jsClassOf[T: c.WeakTypeTag] = selectGlobalDynamic[T]
  }

  /**
   * Internally used to mark classes with companion objects that carry Angular annotations
   */
  class AngulateAnnotated(annotation: String) extends StaticAnnotation
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy