diff options
author | Allan Wang <me@allanwang.ca> | 2017-12-11 17:52:24 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-11 17:52:24 -0500 |
commit | db262e95779e0a17275bdb94be2b0ac12819178e (patch) | |
tree | 42b89edf8796e85e362ca86dead1170cb38f6434 /app/src/main/kotlin/com/pitchedapps/frost/injectors | |
parent | 1d4380cee77fc049a54d280a27dcefa3fa6ff1fd (diff) | |
download | frost-db262e95779e0a17275bdb94be2b0ac12819178e.tar.gz frost-db262e95779e0a17275bdb94be2b0ac12819178e.tar.bz2 frost-db262e95779e0a17275bdb94be2b0ac12819178e.zip |
Feature/tab customization (#522)
* Add initial tab customizing view
* Add rest of content for now
* Delete project file backups
* Stash
* Support full tab customization
* Test activity animations
* Update kau and fix sound uri
* Try catch download, resolves #523
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/injectors')
3 files changed, 26 insertions, 12 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssHider.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssHider.kt index 5b26ebac..de268360 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssHider.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssHider.kt @@ -21,7 +21,10 @@ enum class CssHider(vararg val items: String) : InjectorContract { NON_RECENT("article:not([data-store*=actor_name])") ; - val injector: JsInjector by lazy { JsBuilder().css("${items.joinToString(separator = ",")}{display:none!important}").build() } + val injector: JsInjector by lazy { + JsBuilder().css("${items.joinToString(separator = ",")}{display:none !important}") + .single(name).build() + } override fun inject(webView: WebView, callback: ((String) -> Unit)?) { injector.inject(webView, callback) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt index 0e46225c..beb60293 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt @@ -19,7 +19,7 @@ enum class JsAssets : InjectorContract { var injector = lazyContext { try { val content = it.assets.open("js/$file").bufferedReader().use { it.readText() } - JsBuilder().js(singleInjector(content)).build() + JsBuilder().js(content).single(name).build() } catch (e: FileNotFoundException) { L.e(e, "JsAssets file not found") JsInjector(JsActions.EMPTY.function) @@ -30,12 +30,4 @@ enum class JsAssets : InjectorContract { injector(webView.context).inject(webView, callback) } - private fun singleInjector(content: String) = StringBuilder().apply { - val name = "_frost_$name" - append("if (!window.hasOwnProperty(\"$name\")) {") - append("console.log(\"Registering $name\");") - append("window.$name = true;") - append(content) - append("}") - }.toString() } 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 |