org.scalajs.dom.Event Scala Examples
The following examples show how to use org.scalajs.dom.Event.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: GroupedButtonsBinding.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.html.{Div, Input => JSInput} import org.scalajs.dom.{Event, Node} import scalatags.JsDom.all._ import scala.util.Random private[inputs] class GroupedButtonsBinding[T]( options: ReadableSeqProperty[T], decorator: Seq[(JSInput, T)] => Seq[Node], inputModifiers: Modifier* )( inputTpe: String, checkedIf: T => ReadableProperty[Boolean], refreshSelection: Seq[T] => Unit, onChange: (JSInput, T) => Event => Unit ) extends InputBinding[Div] { private val groupIdPrefix: Long = Random.nextLong private val buttons = div( produce(options) { opts => kill() refreshSelection(opts) decorator( opts.zipWithIndex.map { case (opt, idx) => val in = input( id := s"$groupIdPrefix-$idx", // default id, can be replaced by `inputModifiers` inputModifiers, tpe := inputTpe, value := idx.toString ).render val selected = checkedIf(opt) propertyListeners += selected.listen(in.checked = _, initUpdate = true) in.onchange = onChange(in, opt) (in, opt) } ) } ).render override def render: Div = buttons }
Example 2
Source File: UnconnectedOnOff.scala From akka-viz with MIT License | 5 votes |
package akkaviz.frontend.components import org.scalajs.dom.{Element, Event} import rx.Var import scalatags.JsDom.all._ class UnconnectedOnOff(status: Var[Boolean]) extends OnOffWithLabel with Component { lbl.innerHTML = "Show actors without any connections on graph" inp.onchange = { e: Event => status() = inp.checked } override def attach(parent: Element): Unit = { val elem = Seq[Frag]( div(`class` := "panel-body", stateBtn) ).render parent.appendChild(elem) } }
Example 3
Source File: MonitoringOnOff.scala From akka-viz with MIT License | 5 votes |
package akkaviz.frontend.components import org.scalajs.dom.{Event, _} import rx.{Ctx, Var} import scalatags.JsDom.all._ class MonitoringOnOff(status: Var[MonitoringStatus]) extends Component with OnOffWithLabel { inp.onchange = (d: Event) => { status() = Awaiting(Synced(inp.checked)) } val statusTrigger = status.foreach { case UnknownYet => lbl.innerHTML = "Awaiting server status" inp.disabled = true case Awaiting(s) => lbl.innerHTML = s"Awaiting server confirmation for $s" inp.disabled = true inp.checked = s.asBoolean case synced: Synced => inp.checked = synced.asBoolean inp.disabled = false lbl.innerHTML = s"Monitoring is <b>$synced</b>" } override def attach(parent: Element): Unit = { val elem = Seq[Frag]( div(`class` := "panel-body", stateBtn) ).render parent.appendChild(elem) } } sealed trait MonitoringStatus sealed trait Synced extends MonitoringStatus { def asBoolean: Boolean } object Synced { def apply(b: Boolean) = if (b) On else Off } case object On extends Synced { val asBoolean = true } case class Awaiting(target: Synced) extends MonitoringStatus case object Off extends Synced { val asBoolean = false } case object UnknownYet extends MonitoringStatus
Example 4
Source File: OnOneOffView.scala From scala-js-jquery with Apache License 2.0 | 5 votes |
package io.udash.demos.jquery.views.functions import io.udash.demos.jquery.views.FunctionView import io.udash.wrappers.jquery._ import org.scalajs.dom.html.Div import org.scalajs.dom.{Element, Event} object OnOneOffView extends FunctionView { import scalatags.JsDom.all._ val onCallback = (_: Element, _: JQueryEvent) => jQ("ul", content).append(li("This will be added on every click").render) val oneCallback = (_: Element, _: JQueryEvent) => jQ("ul", content).append(li("This will be added only once").render) override protected val content: Div = div( h3(".on() & .one() & .off()"), button(id := "click", disabled := "disabled")("Click me"), ul(), button( id := "off", disabled := "disabled", onclick := ((_: Event) => { jQ("#click", content) .off(EventName.click, onCallback) .off(EventName.click, oneCallback) false }) )("Off") ).render override protected def script = () => { jQ("#click", content) .on(EventName.click, onCallback) .one(EventName.click, oneCallback) jQ("button", content) .prop("disabled", "") } }
Example 5
Source File: AttrView.scala From scala-js-jquery with Apache License 2.0 | 5 votes |
package io.udash.demos.jquery.views.functions import io.udash.demos.jquery.views.FunctionView import io.udash.wrappers.jquery._ import org.scalajs.dom.html.Div import org.scalajs.dom.{Element, Event} object AttrView extends FunctionView { import scalatags.JsDom.all._ override protected val content: Div = div( h3(".attr() & .prop()"), input(id := "check1", tpe := "checkbox", checked := "checked"), label(`for` := "check1")("Check me"), p(), button(onclick := ((_: Event) => { jQ("input", content).attr("data-checked", "checked").trigger("change") false }))(".attr(\"data-checked\", \"checked\")"), button(onclick := ((_: Event) => { jQ("input", content).attr("data-checked", "").trigger("change") false }))(".attr(\"data-checked\", \"\")"), button(onclick := ((_: Event) => { jQ("input", content).attr("data-checked", null).trigger("change") false }))(".attr(\"data-checked\", null)"), br(), button(onclick := ((_: Event) => { jQ("input", content).prop("checked", true).trigger("change") false }))(".prop(\"checked\", true)"), button(onclick := ((_: Event) => { jQ("input", content).prop("checked", false).trigger("change") false }))(".prop(\"checked\", false)") ).render override protected def script = () => { jQ("input", content).on(EventName.change, (input: Element, _: JQueryEvent) => { jQ("p", content).html( s""".attr('data-checked'): ${jQ(input).attr("data-checked")}<br/> |.prop('checked'): ${jQ(input).prop("checked")}<br/> |.is(':checked'): ${jQ(input).is(":checked")}""".stripMargin ) }).trigger("change") } }
Example 6
Source File: DeferredView.scala From scala-js-jquery with Apache License 2.0 | 5 votes |
package io.udash.demos.jquery.views.functions import io.udash.demos.jquery.views.FunctionView import io.udash.wrappers.jquery._ import org.scalajs.dom.Event import scala.scalajs.js object DeferredView extends FunctionView { import scalatags.JsDom.all._ var deferred: JQueryDeferred[js.Function1[Int, js.Any], Int] = null override protected val content = div( h3("Deferred"), div( div(id := "deferred")("???"), button( id := "resolve", disabled := "disabled", onclick := ((ev: Event) => { deferred.resolve(5) }) )("Resolve(5)"), button( id := "reject", disabled := "disabled", onclick := ((ev: Event) => { deferred.reject(-5) }) )("Reject(-5)"), button( id := "notify", disabled := "disabled", onclick := ((ev: Event) => { deferred.notify(1) }) )("Notify(1)") ) ).render override protected def script = () => { jQ("button", content).prop("disabled", "") deferred = jQ.deferred[js.Function1[Int, js.Any], Int]() jQ("#deferred", content).text(s"Waiting...") deferred.done((i: Int) => jQ("#deferred", content).text(s"Done: $i")) deferred.fail((i: Int) => jQ("#deferred", content).text(s"Fail: $i")) deferred.progress((i: Int) => jQ("#deferred", content).text(s"Progress: $i")) } }
Example 7
Source File: FunctionView.scala From scala-js-jquery with Apache License 2.0 | 5 votes |
package io.udash.demos.jquery.views import org.scalajs.dom.{Element, Event} abstract class FunctionView { import scalatags.JsDom.all._ protected val content: Element protected def script: () => Any final def getTemplate: Modifier = div( content, h3(button( marginTop := 10.px, onclick := ((_: Event) => { script() false }) )("Run script")) ) }
Example 8
Source File: Container3D.scala From threejs-facade with Mozilla Public License 2.0 | 5 votes |
package org.denigma.threejs.extensions import org.denigma.threejs.extensions.controls.{ HoverControls, CameraControls } import org.denigma.threejs.extras.HtmlRenderer import org.denigma.threejs.{ Scene, WebGLRendererParameters, WebGLRenderer } import org.scalajs.dom.{ MouseEvent, Event } import scala.scalajs.js.{ Array, Dynamic } trait Container3D extends SceneContainer { container.style.width = width.toString container.style.height = height.toString container.style.position = "relative" override type RendererType = WebGLRenderer val absolute = "absolute" val positionZero = "0" protected def initRenderer() = { val params = Dynamic.literal( antialias = true, alpha = true // canvas = container ).asInstanceOf[WebGLRendererParameters] val vr = new WebGLRenderer(params) vr.domElement.style.position = absolute vr.domElement.style.top = positionZero vr.domElement.style.margin = positionZero vr.domElement.style.padding = positionZero vr.setSize(width, height) vr } val cssScene = new Scene() val cssRenderer: HtmlRenderer = this.initCSSRenderer protected def initCSSRenderer = { val rendererCSS = new HtmlRenderer() rendererCSS.setSize(width, height) rendererCSS.domElement.style.position = absolute rendererCSS.domElement.style.top = positionZero rendererCSS.domElement.style.margin = positionZero rendererCSS.domElement.style.padding = positionZero rendererCSS } val controls: CameraControls = new HoverControls(camera, this.container) container.appendChild(renderer.domElement) container.appendChild(cssRenderer.domElement) // cssRenderer.domElement.appendChild( renderer.domElement ) override def onEnterFrame(): Unit = { controls.update() renderer.render(scene, camera) cssRenderer.render(cssScene, camera) } }
Example 9
Source File: IndexedDb.scala From ledger-manager-chrome with MIT License | 5 votes |
package co.ledger.manager.web.core.idb import org.scalajs.dom.{ErrorEvent, Event, idb} import org.scalajs.dom.raw.IDBVersionChangeEvent import scala.concurrent.{Future, Promise} import scala.scalajs.js object IndexedDb { def open(databaseName: String, version: Option[Int] = Some(1))(upgradeHandler: (idb.Database, idb.Transaction) => Unit): Future[idb.Database] = { val promise = Promise[idb.Database]() val request = version match { case Some(v) => factory.open(databaseName, v) case None => factory.open(databaseName) } request.onupgradeneeded = {(event: IDBVersionChangeEvent) => val db = event.target.asInstanceOf[js.Dynamic].result.asInstanceOf[idb.Database] val transaction = event.currentTarget.asInstanceOf[js.Dynamic].transaction.asInstanceOf[idb.Transaction] upgradeHandler(db, transaction) } request.onblocked = {(event: Event) => } request.onsuccess = {(event: Event) => val db = event.target.asInstanceOf[js.Dynamic].result.asInstanceOf[idb.Database] promise.success(db) } request.onerror = {(event: ErrorEvent) => promise.failure(new Exception(event.message)) } promise.future } def delete(databaseName: String) = { factory.deleteDatabase(databaseName) } private def factory = js.Dynamic.global.indexedDB.asInstanceOf[idb.Factory] }
Example 10
Source File: SelectBinding.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.Event import org.scalajs.dom.html.Select import scalatags.JsDom.all._ private[inputs] class SelectBinding[T]( options: ReadableSeqProperty[T], label: T => Modifier, selectModifiers: Modifier* )( checkedIf: T => ReadableProperty[Boolean], refreshSelection: Seq[T] => Unit, onChange: Select => Event => Unit ) extends InputBinding[Select] { private val selector = select(selectModifiers)( produce(options) { opts => kill() refreshSelection(opts) opts.zipWithIndex.map { case (opt, idx) => val el = option(value := idx.toString, label(opt)).render val selected = checkedIf(opt) propertyListeners += selected.listen(el.selected = _, initUpdate = true) el } } ).render selector.onchange = onChange(selector) override def render: Select = selector }
Example 11
Source File: TextArea.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.html.TextArea import org.scalajs.dom.{Element, Event, KeyboardEvent} import scalatags.JsDom.all._ import scala.concurrent.duration.{Duration, DurationInt} def apply(value: Property[String], debounce: Duration = 20 millis)(textareaModifiers: Modifier*): InputBinding[TextArea] = new InputBinding[TextArea] { private val element = textarea( textareaModifiers, nestedInterceptor(new TextAreaModifier(value, Some(debounce))) ).render override def render: TextArea = element } private class TextAreaModifier(property: Property[String], debounce: Option[Duration]) extends TextInputsModifier(property, debounce) { override def elementValue(t: Element): String = t.asInstanceOf[TextArea].value override def setElementValue(t: Element, v: String): Unit = t.asInstanceOf[TextArea].value = v override def setElementKeyUp(t: Element, callback: KeyboardEvent => Unit): Unit = t.asInstanceOf[TextArea].onkeyup = callback override def setElementOnChange(t: Element, callback: Event => Unit): Unit = t.asInstanceOf[TextArea].onchange = callback override def setElementOnInput(t: Element, callback: Event => Unit): Unit = t.asInstanceOf[TextArea].oninput = callback override def setElementOnPaste(t: Element, callback: Event => Unit): Unit = t.asInstanceOf[TextArea].onpaste = callback } }
Example 12
Source File: RangeInput.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.Event import org.scalajs.dom.html.{Input => JSInput} import scalatags.JsDom.all._ def apply( property: Property[Double], minValue: ReadableProperty[Double] = 0d.toProperty, maxValue: ReadableProperty[Double] = 100d.toProperty, valueStep: ReadableProperty[Double] = 1d.toProperty )(inputModifiers: Modifier*): InputBinding[JSInput] = new InputBinding[JSInput] { private val element = input(inputModifiers, tpe := "range").render element.onchange = (_: Event) => property.set(element.valueAsNumber) propertyListeners += property.listen(element.valueAsNumber = _, initUpdate = true) propertyListeners += minValue.listen({ v => (min := v).applyTo(element) property.set(element.valueAsNumber) }, initUpdate = true) propertyListeners += maxValue.listen({ v => (max := v).applyTo(element) property.set(element.valueAsNumber) }, initUpdate = true) propertyListeners += valueStep.listen({ v => (step := v).applyTo(element) property.set(element.valueAsNumber) }, initUpdate = true) override def render: JSInput = element } }
Example 13
Source File: FileInput.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.html.{Input => JSInput} import org.scalajs.dom.{Event, File} import scalatags.JsDom.Modifier import scalatags.JsDom.all._ object FileInput { def apply( selectedFiles: SeqProperty[File], acceptMultipleFiles: ReadableProperty[Boolean] )(inputName: String, inputModifiers: Modifier*): InputBinding[JSInput] = { new InputBinding[JSInput] { private val in = input( inputModifiers, `type` := "file", name := inputName, nestedInterceptor((multiple := "multiple").attrIf(acceptMultipleFiles)) ).render in.onchange = (ev: Event) => { ev.preventDefault() selectedFiles.replace(0, selectedFiles.size, (0 until in.files.length).map { idx => in.files(idx) }: _*) } override def render: JSInput = in } } }
Example 14
Source File: Select.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import io.udash.properties.seq.SeqProperty import org.scalajs.dom.Event import org.scalajs.dom.html.Select import org.scalajs.dom.raw.HTMLOptionElement import scalatags.JsDom.all._ def apply[T, ElemType <: Property[T]]( selectedItems: SeqProperty[T, ElemType], options: ReadableSeqProperty[T] )(label: T => Modifier, selectModifiers: Modifier*): InputBinding[Select] = { new SelectBinding(options, label, selectModifiers :+ (multiple := true))( opt => selectedItems.transform(_.contains(opt)), opts => selectedItems.set(selectedItems.get.filter(opts.contains)), selector => (_: Event) => { val opts = options.get val selectedNodes = selector.querySelectorAll("option:checked") val selection = (0 until selectedNodes.length).map { idx => opts(selectedNodes(idx).asInstanceOf[HTMLOptionElement].value.toInt) } selectedItems.set(selection) } ) } }
Example 15
Source File: JsMessageBuilder.scala From iotchain with MIT License | 5 votes |
package jbok.network.http import java.nio.ByteBuffer import cats.effect.{Async, IO} import org.scalajs.dom.{Blob, Event, FileReader, UIEvent} import scala.concurrent.Promise import scala.scalajs.js.typedarray.TypedArrayBufferOps._ import scala.scalajs.js.typedarray._ import scala.scalajs.js.| trait JsMessageBuilder[F[_], P] { import JsMessageBuilder._ def responseType: String def pack(payload: P): Message def unpack(msg: Message): F[Option[P]] } object JsMessageBuilder { type Message = String | ArrayBuffer | Blob implicit def JsMessageBuilderString[F[_]](implicit F: Async[F]): JsMessageBuilder[F, String] = new JsMessageBuilder[F, String] { val responseType = "" def pack(payload: String): Message = payload def unpack(msg: Message): F[Option[String]] = (msg: Any) match { case s: String => F.pure(Some(s)) case b: Blob => readBlob[F, String, String](_.readAsText(b))(identity) case _ => F.pure(None) } } implicit def JsMessageBuilderByteBuffer[F[_]](implicit F: Async[F]): JsMessageBuilder[F, ByteBuffer] = new JsMessageBuilder[F, ByteBuffer] { val responseType = "arraybuffer" def pack(payload: ByteBuffer): Message = payload.arrayBuffer.slice(payload.position, payload.limit) def unpack(msg: Message): F[Option[ByteBuffer]] = (msg: Any) match { case a: ArrayBuffer => F.pure(Option(TypedArrayBuffer.wrap(a))) case b: Blob => readBlob[F, ArrayBuffer, ByteBuffer](_.readAsArrayBuffer(b))(TypedArrayBuffer.wrap(_)) case _ => F.pure(None) } } private def readBlob[F[_], R, W](doRead: FileReader => Unit)(conv: R => W)(implicit F: Async[F]): F[Option[W]] = { val promise = Promise[Option[W]]() val reader = new FileReader reader.onload = (_: UIEvent) => { val s = reader.result.asInstanceOf[R] promise.success(Option(conv(s))) } reader.onerror = (_: Event) => { promise.success(None) } doRead(reader) F.liftIO(IO.fromFuture(IO(promise.future))) } }
Example 16
Source File: CheckButtons.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import io.udash.properties.seq.SeqProperty import org.scalajs.dom.html.{Div, Input => JSInput} import org.scalajs.dom.{Event, Node} import scalatags.JsDom.all._ def apply[T]( selectedItems: SeqProperty[T, _ <: ReadableProperty[T]], options: ReadableSeqProperty[T] )(decorator: Seq[(JSInput, T)] => Seq[Node], inputModifiers: Modifier*): InputBinding[Div] = { new GroupedButtonsBinding(options, decorator, inputModifiers)( "checkbox", opt => selectedItems.transform(_.contains(opt)), opts => selectedItems.set(selectedItems.get.filter(opts.contains)), (in: JSInput, opt: T) => (_: Event) => { if (in.checked && !selectedItems.get.contains(opt)) selectedItems.append(opt) else selectedItems.remove(opt) } ) } }
Example 17
Source File: RadioButtons.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.bindings.inputs import io.udash._ import org.scalajs.dom.html.{Div, Input => JSInput} import org.scalajs.dom.{Event, Node} import scalatags.JsDom.all._ def apply[T]( selectedItem: Property[T], options: ReadableSeqProperty[T] )(decorator: Seq[(JSInput, T)] => Seq[Node], inputModifiers: Modifier*): InputBinding[Div] = { new GroupedButtonsBinding(options, decorator, inputModifiers)( "radio", opt => selectedItem.transform(_ == opt), opts => if (opts.nonEmpty && !opts.contains(selectedItem.get)) selectedItem.set(opts.head), (_: JSInput, opt: T) => (_: Event) => selectedItem.set(opt) ) } }
Example 18
Source File: NavbarDemo.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.web.guide.views.ext.demo.bootstrap import io.udash.properties.HasModelPropertyCreator import io.udash.web.guide.demos.AutoDemo import io.udash.web.guide.styles.partials.GuideStyles import scalatags.JsDom.all._ object NavbarDemo extends AutoDemo { trait NavbarPanel { def title: String def content: String } object NavbarPanel extends HasModelPropertyCreator[NavbarPanel] final case class DefaultNavbarPanel(override val title: String, override val content: String) extends NavbarPanel private val (rendered, source) = { import io.udash._ import io.udash.bootstrap.nav.{UdashNav, UdashNavbar} import io.udash.bootstrap.utils.BootstrapStyles._ import io.udash.css.CssView._ import org.scalajs.dom.Event import scalatags.JsDom.all._ val panels = SeqProperty[NavbarPanel]( DefaultNavbarPanel("Title 1", "Content of panel 1..."), DefaultNavbarPanel("Title 2", "Content of panel 2..."), DefaultNavbarPanel("Title 3", "Content of panel 3..."), DefaultNavbarPanel("Title 4", "Content of panel 4...") ) panels.append( DefaultNavbarPanel("Title 5", "Content of panel 5...") ) div( UdashNavbar()( _ => UdashNav(panels)( elemFactory = (panel, nested) => a( Navigation.link, href := "", onclick :+= ((_: Event) => true) )( nested(bind(panel.asModel.subProp(_.title))) ).render, isActive = el => el.transform(_.title.endsWith("1")), isDisabled = el => el.transform(_.title.endsWith("5")) ), span("Udash"), ) ).render }.withSourceCode override protected def demoWithSource(): (Modifier, Iterator[String]) = { import io.udash.css.CssView._ (rendered.setup(_.applyTags(GuideStyles.frame)), source.linesIterator) } }
Example 19
Source File: NavsDemo.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.web.guide.views.ext.demo.bootstrap import io.udash.properties.HasModelPropertyCreator import io.udash.web.guide.demos.AutoDemo import io.udash.web.guide.styles.partials.GuideStyles import scalatags.JsDom.all._ object NavsDemo extends AutoDemo { trait NavPanel { def title: String def content: String } object NavPanel extends HasModelPropertyCreator[NavPanel] final case class DefaultNavPanel(override val title: String, override val content: String) extends NavPanel private val (rendered, source) = { import io.udash._ import io.udash.bootstrap.nav.UdashNav import io.udash.bootstrap.utils.BootstrapStyles._ import io.udash.css.CssView._ import org.scalajs.dom.Event import scalatags.JsDom.all._ val panels = SeqProperty[NavPanel]( DefaultNavPanel("Title 1", "Content of panel 1..."), DefaultNavPanel("Title 2", "Content of panel 2..."), DefaultNavPanel("Title 3", "Content of panel 3..."), DefaultNavPanel("Title 4", "Content of panel 4...") ) val selected = Property(panels.elemProperties.head.get) panels.append(DefaultNavPanel("Title 5", "Content of panel 5...")) div( UdashNav(panels, justified = true.toProperty, tabs = true.toProperty)( elemFactory = (panel, nested) => a( Navigation.link, href := "", onclick :+= ((_: Event) => selected.set(panel.get), true) )(nested(bind(panel.asModel.subProp(_.title)))).render, isActive = panel => panel.combine(selected)((panel, selected) => panel.title == selected.title ) ), div(Card.card, Card.body, Background.color(Color.Light))( bind(selected.asModel.subProp(_.content)) ) ).render }.withSourceCode override protected def demoWithSource(): (Modifier, Iterator[String]) = { import io.udash.css.CssView._ (rendered.setup(_.applyTags(GuideStyles.frame)), source.linesIterator) } }
Example 20
Source File: DynamicRemoteTranslationsDemo.scala From udash-core with Apache License 2.0 | 5 votes |
package io.udash.web.guide.views.ext.demo import io.udash.properties.single.Property import io.udash.web.guide.demos.AutoDemo import io.udash.web.guide.styles.partials.GuideStyles import scalatags.JsDom.all._ object DynamicRemoteTranslationsDemo extends AutoDemo { private val (rendered, source) = { import io.udash.bootstrap.utils.BootstrapStyles._ import io.udash.css.CssView._ import io.udash.i18n._ import io.udash.web.guide.Context.serverRpc import io.udash.web.guide.demos.i18n.Translations import org.scalajs.dom.Event import org.scalajs.dom.ext.LocalStorage import scalatags.JsDom.all._ import scala.concurrent.duration.DurationInt implicit val translationProvider: RemoteTranslationProvider = new RemoteTranslationProvider( serverRpc.demos.translations, Some(LocalStorage), 6.hours ) implicit val lang: Property[Lang] = Property(Lang("en")) div( button( Button.btn, Button.color(Color.Primary) )(id := "enButton", onclick := ((_: Event) => lang.set(Lang("en"))))("EN"), " ", button( Button.btn, Button.color(Color.Primary) )(id := "plButton", onclick := ((_: Event) => lang.set(Lang("pl"))))("PL"), div(Card.card, Card.body, Background.color(Color.Light), Spacing.margin( side = Side.Top, size = SpacingSize.Normal ))(ul( li( "auth.loginLabel: ", Translations.auth.loginLabel.translatedDynamic() ), li( "auth.passwordLabel: ", Translations.auth.passwordLabel.translatedDynamic() ), li( "auth.login.buttonLabel: ", Translations.auth.login.buttonLabel.translatedDynamic() ), li( "auth.login.retriesLeft: ", Translations.auth.login.retriesLeft(3).translatedDynamic() ), li( "auth.login.retriesLeftOne: ", Translations.auth.login.retriesLeftOne.translatedDynamic() ), li( "auth.register.buttonLabel: ", Translations.auth.register.buttonLabel.translatedDynamic() ) )) ) }.withSourceCode override protected def demoWithSource(): (Modifier, Iterator[String]) = { import io.udash.css.CssView._ ( div( id := "dynamic-rpc-translations-demo", GuideStyles.frame, GuideStyles.useBootstrap )(rendered), source.linesIterator ) } }
Example 21
Source File: WebSocket.scala From outwatch with Apache License 2.0 | 5 votes |
package outwatch.util import cats.effect.IO import outwatch.helpers._ import colibri._ import org.scalajs.dom.{Event, MessageEvent} object WebSocket { implicit def toObserver(socket: WebSocket): IO[Observer[String]] = socket.observer implicit def toObservable(socket: WebSocket): Observable[MessageEvent] = socket.observable } final case class WebSocket private(url: String) { val ws = new org.scalajs.dom.WebSocket(url) lazy val observable:Observable[MessageEvent] = Observable.create[MessageEvent](observer => { ws.onmessage = (e: MessageEvent) => observer.onNext(e) ws.onerror = (e: Event) => observer.onError(new Exception(s"Error in WebSocket: $e")) Cancelable(() => ws.close()) }) lazy val observer:IO[Observer[String]] = { IO { new Observer[String] { override def onNext(elem: String): Unit = ws.send(elem) override def onError(ex: Throwable): Unit = OutwatchTracing.errorSubject.onNext(ex) } } } }
Example 22
Source File: TabPane.scala From scalajs-react-bootstrap with MIT License | 5 votes |
package com.acework.js.components.bootstrap import com.acework.js.utils.{TransitionEvent, Mappable, Mergeable} import japgolly.scalajs.react._ import japgolly.scalajs.react.vdom.prefix_<^._ import org.scalajs.dom.Event import scala.scalajs.js import scala.scalajs.js.{UndefOr, undefined} import Utils._ object TabPane extends BootstrapComponent { override type P = TabPane override type S = State override type B = Backend override type N = TopNode override def defaultProps = TabPane() case class TabPane(active: Boolean = false, animation: Boolean = true, tab: UndefOr[String] = undefined, eventKey: UndefOr[String] = undefined, onAnimateOutEnd: UndefOr[() => Unit] = undefined, bsStyle: UndefOr[Styles.Value] = Styles.default, addClasses: String = "") extends MergeableProps[TabPane] { def merge(t: Map[String, Any]): TabPane = implicitly[Mergeable[TabPane]].merge(this, t) def asMap: Map[String, Any] = implicitly[Mappable[TabPane]].toMap(this) def apply(children: ReactNode*) = component(this, children) def apply() = component(this) } case class State(animateIn: Boolean, animateOut: Boolean) class Backend(scope: BackendScope[TabPane, State]) { def onComponentWillReceiveProps(nextProps: TabPane) = { if (scope.props.animation) { if (!scope.state.animateIn && nextProps.active && !scope.props.active) scope.modState(_.copy(animateIn = true)) else if (!scope.state.animateIn && !nextProps.active && scope.props.active) scope.modState(_.copy(animateOut = true)) } } def onComponentDidUpdate() = { if (scope.state.animateIn) js.timers.setTimeout(0)(startAnimateIn()) if (scope.state.animateOut) TransitionEvent.addEndEventListener( scope.getDOMNode(), (_: Event) => stopAnimateOut() ) } def startAnimateIn() = { if (scope.isMounted()) scope.modState(_.copy(animateIn = false)) } def stopAnimateOut() = { if (scope.isMounted()) scope.modState(_.copy(animateOut = false)) if (scope.props.onAnimateOutEnd.isDefined) scope.props.onAnimateOutEnd.get() } } override val component = ReactComponentB[TabPane]("TabPane") .initialState(State(animateIn = false, animateOut = false)) .backend(new Backend(_)) .render((P, C, S, B) => { val classes = Map( "active" -> (P.active || S.animateOut), "in" -> (P.active && !S.animateIn) ) // FIXME spread props <.div(^.classSet1M("tab-pane fade", classes), C) }) .componentWillReceiveProps((scope, nextProps) => { scope.backend.onComponentWillReceiveProps(nextProps) }) .componentDidUpdate((scope, prevProps, prevState) => scope.backend.onComponentDidUpdate()) .build }
Example 23
Source File: Notification.scala From iotchain with MIT License | 5 votes |
package jbok.app.components import com.thoughtworks.binding import com.thoughtworks.binding.Binding import org.scalajs.dom.{Element, Event, Node} object Notification { @binding.dom def renderInfo(content: Binding[Node], onClick: Event => Unit = (_: Event) => ()): Binding[Element] = <div class="notification info"> <span class="close" onclick={onClick}>×</span> <strong>Info:</strong> <div class="content">{content.bind}</div> </div> @binding.dom def renderSuccess(content: Binding[Element], onClick: Event => Unit = (_: Event) => ()): Binding[Element] = <div class="notification success"> <span class="close" onclick={onClick}>×</span> <strong>Success:</strong> <div class="content">{content.bind}</div> </div> @binding.dom def renderError(content: Binding[Element], onClick: Event => Unit = (_: Event) => ()): Binding[Element] = <div class="notification error"> <span class="close" onclick={onClick}>×</span> <strong>Error:</strong> <div class="content">{content.bind}</div> </div> @binding.dom def renderWarning(content: Binding[Node], onClick: Event => Unit = (_: Event) => ()): Binding[Element] = <div class="notification warning"> <span class="close" onclick={onClick}>×</span> <strong>Warning:</strong> <div class="content">{content.bind}</div> </div> }
Example 24
Source File: RegisterView.scala From iotchain with MIT License | 5 votes |
package jbok.app.views import cats.implicits._ import com.thoughtworks.binding import com.thoughtworks.binding.Binding import com.thoughtworks.binding.Binding.Var import fastparse.Parsed.Failure import jbok.app.{AppState, Contract} import jbok.app.components.{Input, Notification} import jbok.app.helper.InputValidator import jbok.core.models.Address import jbok.evm.solidity.SolidityParser import org.scalajs.dom.{Element, Event} import scodec.bits.ByteVector final case class RegisterView(state: AppState) { val currentId = state.activeNode.value val contractAddress = Input("Address", "address", validator = InputValidator.isValidAddress) val contractCode = Input( "Code", """pragma solidity ^0.4.0; | |contract SimpleStorage { | uint storedData; | | function set(uint x) public { | storedData = x; | } | | function get() public view returns (uint) { | return storedData; | } |} """.stripMargin, `type` = "textarea" ) val statusMessage: Var[Option[String]] = Var(None) def checkAndGenerateInput() = { statusMessage.value = None for { address <- if (contractAddress.isValid) Right(contractAddress.value) else Left("not valid contract address.") code <- if (contractCode.isValid) Right(contractCode.value) else Left("not valid contract code.") } yield _submit(address, code) } def _submit(address: String, code: String) = { val parseResult = SolidityParser.parseSource(code) val contractAddress = Address(ByteVector.fromValidHex(address)) parseResult.fold( (s, i, e) => { val msg = s match { case "" => "Position " + e.input.prettyIndex(i) + ", found " + Failure.formatTrailing(e.input, i) case s => Failure.formatMsg(e.input, List(s -> i), i) } statusMessage.value = Some(s"parse error: ${msg}") }, (r, i) => currentId.foreach(id => { state.nodes.value.get(id).foreach(_.contractsABI.value += contractAddress -> Contract(contractAddress, r.ABI.last.methods)) statusMessage.value = Some("register success.") }) ) } val registerOnClick = (_: Event) => checkAndGenerateInput().leftMap(error => statusMessage.value = Some(error)) @binding.dom def render: Binding[Element] = <div> <div> <label for="address"><b>Address</b></label> {contractAddress.render.bind} </div> <div> <label for="code"><b>Address</b></label> {contractCode.render.bind} </div> { val onclose = (_: Event) => statusMessage.value = None @binding.dom def content(status: String):Binding[Element] = <div style="padding-left: 10px">{status}</div> statusMessage.bind match { case None => <div/> case Some(status) if status =="register success." => Notification.renderSuccess(content(status), onclose).bind case Some(status) => Notification.renderWarning(content(status), onclose).bind } } <div> <button id="register-contract" onclick={registerOnClick} style={"width: 100%"} >register</button> </div> </div> }
Example 25
Source File: StxsView.scala From iotchain with MIT License | 5 votes |
package jbok.app.views import com.thoughtworks.binding import com.thoughtworks.binding.Binding import com.thoughtworks.binding.Binding.{Constants, Var} import jbok.app.AppState import jbok.app.helper.{ContractAddress, TableRenderHelper} import jbok.core.api.HistoryTransaction import jbok.core.models.{Address, UInt256} import org.scalajs.dom.{Element, Event} final case class StxsView(state: AppState, stxs: Var[List[HistoryTransaction]]) { val header: List[String] = List("Tx Hash", "From", "To", "Value") val tableRenderHelper = TableRenderHelper(header) @binding.dom def renderTable(stxs: List[HistoryTransaction]): Binding[Element] = <table class="table-view"> {tableRenderHelper.renderTableHeader.bind} <tbody> { for (tx <- Constants(stxs: _*)) yield { <tr> <td> <a onclick={(e: Event) => state.searchTxHash(tx.txHash.toHex)}> {tx.txHash.toHex} </a> </td> <td> { val senderAddress = tx.fromAddress.toString <a onclick={(e: Event) => state.searchAccount(senderAddress)}> {senderAddress} </a> } </td> <td> { if (tx.toAddress == Address.empty) { val contractAddress = ContractAddress.getContractAddress(tx.fromAddress, UInt256(tx.nonce)).toString <p>Create Contract: <a onclick={(e: Event) => state.searchAccount(contractAddress)}>{contractAddress}</a></p> } else { <a onclick={(e: Event) => state.searchAccount(tx.toAddress.toString)}>{tx.toAddress.toString}</a> } } </td> <td> {tx.value.toString} </td> </tr> } } </tbody> </table> @binding.dom def render: Binding[Element] = <div> { val history = stxs.bind if (history.nonEmpty) { renderTable(history).bind } else { tableRenderHelper.renderEmptyTable.bind } } </div> }
Example 26
Source File: SearchBar.scala From iotchain with MIT License | 5 votes |
package jbok.app.views import com.thoughtworks.binding import com.thoughtworks.binding.Binding import jbok.app.AppState import org.scalajs.dom.{Event, _} import org.scalajs.dom.ext.KeyCode import org.scalajs.dom.raw.HTMLInputElement final case class SearchBar(state: AppState, onPressEnter: Event => Unit) { val keyDownHandler = { event: KeyboardEvent => (event.currentTarget, event.keyCode) match { case (input: HTMLInputElement, KeyCode.Enter) => onPressEnter(event) input.value.trim match { case "" => case text if text.startsWith("#") => val blockNumber = text.substring(1) state.searchBlockNumber(blockNumber) case text if text.startsWith("0x") => val input = text.substring(2) if (input.length <= 40) { state.searchAccount(input) } else { state.searchBlockHash(input) } } case _ => } } @binding.dom def render: Binding[Element] = <input type="search" placeholder="Search.." class="searchbar-input" onkeydown={keyDownHandler}></input> }
Example 27
Source File: TxView.scala From iotchain with MIT License | 5 votes |
package jbok.app.views import com.thoughtworks.binding import com.thoughtworks.binding.Binding import jbok.app.AppState import jbok.core.models.SignedTransaction import org.scalajs.dom.{Element, Event} object TxView { @binding.dom def render(state: AppState, tx: SignedTransaction): Binding[Element] = <div> <h3>{s"Transaction (${tx.hash.toHex})"}</h3> <table class="table-view"> <tbody> <tr> <th>amount</th> <td>{tx.value.toString()}</td> </tr> <tr> <th>from</th> <td> { val senderAddress = tx.senderAddress.getOrElse("error address").toString <a onclick={(e: Event) => state.searchAccount(senderAddress)}>{senderAddress}</a> } </td> </tr> <tr> <th>to</th> <td><a onclick={(e: Event) => state.searchAccount(tx.receivingAddress.toString)}>{tx.receivingAddress.toString}</a></td> </tr> <tr> <th>send data</th> <td>{tx.payload.toHex}</td> </tr> </tbody> </table> </div> }