aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt
diff options
context:
space:
mode:
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.kt23
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