Skip to content

Instantly share code, notes, and snippets.

@catap
Created December 22, 2019 01:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save catap/697cb5545c0eaebd3925fbed4ba4d255 to your computer and use it in GitHub Desktop.
Save catap/697cb5545c0eaebd3925fbed4ba4d255 to your computer and use it in GitHub Desktop.
class RawDynamicTranslationBinding[Key <: TranslationKey](
key: Key,
translator: Key => Future[Translated],
placeholder: Option[Element]
)(implicit lang: ReadableProperty[Lang]) extends Binding with CrossLogging {
override def applyTo(t: Element): Unit = {
var holder = Seq(placeholder.getOrElse(emptyStringNode()))
holder.foreach(t.appendChild)
def rebuild(): Unit = {
translator(key).onCompleteNow {
case Success(text) =>
val wrapper = document.createElement("div")
wrapper.innerHTML = text.string
val newHolder = wrapper.childNodes match {
case kids if kids.length == 0 =>
Seq(placeholder.getOrElse(emptyStringNode()))
case kids =>
(0 until kids.length).map(kids(_))
}
newHolder.foreach(t.insertBefore(_, holder.head))
holder.foreach(t.removeChild)
holder = newHolder
case Failure(ex) =>
logger.error(ex.getMessage)
}
}
propertyListeners += lang.listen(_ => rebuild(), initUpdate = true)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment