diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt index a29ff55e..4fed2db9 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt @@ -7,11 +7,14 @@ import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.subjects.SingleSubject import org.apache.commons.text.StringEscapeUtils +import java.util.* class JsBuilder { private val css = StringBuilder() private val js = StringBuilder() + private var tag: String? = null + fun css(css: String): JsBuilder { this.css.append(StringEscapeUtils.escapeEcmaScript(css)) return this @@ -22,6 +25,11 @@ class JsBuilder { return this } + fun single(tag: String): JsBuilder { + this.tag = tag + return this + } + fun build() = JsInjector(toString()) override fun toString(): String { @@ -32,8 +40,19 @@ class JsBuilder { } if (js.isNotBlank()) builder.append(js) - return builder.append("}()").toString() + var content = builder.append("}()").toString() + if (tag != null) content = singleInjector(tag!!, content) + return content } + + private fun singleInjector(tag: String, content: String) = StringBuilder().apply { + val name = "_frost_${tag.toLowerCase(Locale.CANADA)}" + append("if (!window.hasOwnProperty(\"$name\")) {") + append("console.log(\"Registering $name\");") + append("window.$name = true;") + append(content) + append("}") + }.toString() } /** @@ -72,4 +91,4 @@ class JsInjector(val function: String) : InjectorContract { override fun inject(webView: WebView, callback: ((String) -> Unit)?) { webView.evaluateJavascript(function, { value -> callback?.invoke(value) }) } -} +}
\ No newline at end of file |