aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/kotlin/com/pitchedapps/frost/injectors
diff options
context:
space:
mode:
authorAllan Wang <me@allanwang.ca>2017-12-11 17:52:24 -0500
committerGitHub <noreply@github.com>2017-12-11 17:52:24 -0500
commitdb262e95779e0a17275bdb94be2b0ac12819178e (patch)
tree42b89edf8796e85e362ca86dead1170cb38f6434 /app/src/main/kotlin/com/pitchedapps/frost/injectors
parent1d4380cee77fc049a54d280a27dcefa3fa6ff1fd (diff)
downloadfrost-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')
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/CssHider.kt5
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt10
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsInjector.kt23
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