aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--app/src/main/assets/.babelrc9
-rw-r--r--app/src/main/assets/.gitignore2
-rw-r--r--app/src/main/assets/css/components/round_icons.css (renamed from app/src/main/assets/css/components/round_icons.compact.css)0
-rw-r--r--app/src/main/assets/css/core/core.css (renamed from app/src/main/assets/css/core/core.compact.css)7
-rw-r--r--app/src/main/assets/css/core/core.scss4
-rw-r--r--app/src/main/assets/css/themes/custom.css (renamed from app/src/main/assets/css/themes/custom.compact.css)18
-rw-r--r--app/src/main/assets/css/themes/material_amoled.css (renamed from app/src/main/assets/css/themes/material_amoled.compact.css)18
-rw-r--r--app/src/main/assets/css/themes/material_dark.css (renamed from app/src/main/assets/css/themes/material_dark.compact.css)18
-rw-r--r--app/src/main/assets/css/themes/material_glass.css (renamed from app/src/main/assets/css/themes/material_glass.compact.css)18
-rw-r--r--app/src/main/assets/css/themes/material_light.css (renamed from app/src/main/assets/css/themes/material_light.compact.css)18
-rw-r--r--app/src/main/assets/js/click-debugger.js13
-rw-r--r--app/src/main/assets/js/click-debugger.min.js6
-rw-r--r--app/src/main/assets/js/click_a.coffee48
-rw-r--r--app/src/main/assets/js/click_a.js69
-rw-r--r--app/src/main/assets/js/click_a.min.js22
-rw-r--r--app/src/main/assets/js/click_debugger.coffee14
-rw-r--r--app/src/main/assets/js/click_debugger.js20
-rw-r--r--app/src/main/assets/js/context_a.coffee59
-rw-r--r--app/src/main/assets/js/context_a.js98
-rw-r--r--app/src/main/assets/js/context_a.min.js36
-rw-r--r--app/src/main/assets/js/header_badges.coffee4
-rw-r--r--app/src/main/assets/js/header_badges.js17
-rw-r--r--app/src/main/assets/js/header_badges.min.js2
-rw-r--r--app/src/main/assets/js/media.coffee29
-rw-r--r--app/src/main/assets/js/media.js41
-rw-r--r--app/src/main/assets/js/media.min.js21
-rw-r--r--app/src/main/assets/js/menu.coffee42
-rw-r--r--app/src/main/assets/js/menu.js75
-rw-r--r--app/src/main/assets/js/menu.min.js33
-rw-r--r--app/src/main/assets/js/menu_debug.coffee42
-rw-r--r--app/src/main/assets/js/menu_debug.js75
-rw-r--r--app/src/main/assets/js/menu_debug.min.js34
-rw-r--r--app/src/main/assets/js/notif_msg.coffee22
-rw-r--r--app/src/main/assets/js/notif_msg.js40
-rw-r--r--app/src/main/assets/js/notif_msg.min.js17
-rw-r--r--app/src/main/assets/js/search.js19
-rw-r--r--app/src/main/assets/js/search.min.js15
-rw-r--r--app/src/main/assets/js/search_query.js10
-rw-r--r--app/src/main/assets/js/textarea_listener.coffee22
-rw-r--r--app/src/main/assets/js/textarea_listener.js54
-rw-r--r--app/src/main/assets/js/textarea_listener.min.js12
-rw-r--r--app/src/main/assets/package-lock.json986
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAssets.kt60
-rw-r--r--app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt35
45 files changed, 1674 insertions, 532 deletions
diff --git a/.travis.yml b/.travis.yml
index 2145ebae..696cce55 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -12,6 +12,8 @@ android:
- extra-google-m2repository
licenses:
- ".+"
+before_install:
+- yes | sdkmanager "platforms;android-27"
after_success:
- chmod +x ./generate-apk-release.sh; ./generate-apk-release.sh
script:
diff --git a/app/src/main/assets/.babelrc b/app/src/main/assets/.babelrc
new file mode 100644
index 00000000..7302f727
--- /dev/null
+++ b/app/src/main/assets/.babelrc
@@ -0,0 +1,9 @@
+{
+ "presets": [
+ ["env",{
+ "targets": {
+ "browsers": ["android >= 36", "chrome >= 51"]
+ }
+ }]
+ ]
+} \ No newline at end of file
diff --git a/app/src/main/assets/.gitignore b/app/src/main/assets/.gitignore
index 0d3aee97..1fe1b00e 100644
--- a/app/src/main/assets/.gitignore
+++ b/app/src/main/assets/.gitignore
@@ -1,2 +1,2 @@
.idea/
-js/search_query.min.js
+node_modules/
diff --git a/app/src/main/assets/css/components/round_icons.compact.css b/app/src/main/assets/css/components/round_icons.css
index 98c05584..98c05584 100644
--- a/app/src/main/assets/css/components/round_icons.compact.css
+++ b/app/src/main/assets/css/components/round_icons.css
diff --git a/app/src/main/assets/css/core/core.compact.css b/app/src/main/assets/css/core/core.css
index c489b1f0..3b505c57 100644
--- a/app/src/main/assets/css/core/core.compact.css
+++ b/app/src/main/assets/css/core/core.css
@@ -70,24 +70,17 @@ a, ._5fpq { color: #d59ed5 !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: rgba(199, 70, 70, 0.35); }
100% { background: rgba(255, 0, 255, 0.02); } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: rgba(199, 70, 70, 0.35); }
100% { background: rgba(255, 0, 255, 0.02); } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: rgba(199, 70, 70, 0.35); }
100% { background: rgba(255, 0, 255, 0.02); } }
-
@keyframes highlightFade { 0%, 50% { background: rgba(199, 70, 70, 0.35); }
100% { background: rgba(255, 0, 255, 0.02); } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: rgba(255, 0, 255, 0.02); }
50% { background: rgba(199, 70, 70, 0.35); } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: rgba(255, 0, 255, 0.02); }
50% { background: rgba(199, 70, 70, 0.35); } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: rgba(255, 0, 255, 0.02); }
50% { background: rgba(199, 70, 70, 0.35); } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: rgba(255, 0, 255, 0.02); }
50% { background: rgba(199, 70, 70, 0.35); } }
diff --git a/app/src/main/assets/css/core/core.scss b/app/src/main/assets/css/core/core.scss
index dd7a9078..745ca671 100644
--- a/app/src/main/assets/css/core/core.scss
+++ b/app/src/main/assets/css/core/core.scss
@@ -170,7 +170,6 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e {
color: $text !important;
}
-
//these are links
a,
._5fpq {
@@ -196,9 +195,8 @@ a,
}
}
-
@include keyframes(chatHighlightAnimation) {
- 0%,100% {
+ 0%, 100% {
background: $bg_transparent;
}
diff --git a/app/src/main/assets/css/themes/custom.compact.css b/app/src/main/assets/css/themes/custom.css
index 64e8d61b..bbceca76 100644
--- a/app/src/main/assets/css/themes/custom.compact.css
+++ b/app/src/main/assets/css/themes/custom.css
@@ -1,6 +1,8 @@
#viewport { background: $B$ !important; }
-body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1 { background: $BT$ !important; }
+body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, ._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { background: $BT$ !important; }
+
+._31nf { background: $BT$ !important; }
._cv_, ._2sq8 { background-color: $BT$ !important; }
@@ -12,7 +14,7 @@ body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9
button:not([style*=image]), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, ._590n, ._4g8h, ._2cpp, article._55wo, .timeline .timelinePublisher, .touched, .sharerAttachment, .item a.primary.touched .primarywrap, ._38nq, ._537a, ._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, .excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, ._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._2b06, ._14v5 ._14v8, ._4qax, .aclb, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .acbk { background: $BBT$ !important; }
-[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: $T$ !important; }
+[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: $T$ !important; }
strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: $A$ !important; }
@@ -26,7 +28,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: $A$ !important; }
._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, ._2pbp, ._5rou:first-child, ._egf:first-child, ._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, ._3u9t, ._55fj, ._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { border-top: 1px solid $D$ !important; }
-._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid $D$ !important; }
+._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._301x, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid $D$ !important; }
.item a.primary.touched .primarywrap, ._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq { border-top: 1px solid $D$ !important; border-bottom: 1px solid $D$ !important; }
@@ -36,7 +38,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: $A$ !important; }
._4o58::after, .acr, ._t21, .acw, .aclb, ._4qax, ._5h8f { border-color: $D$ !important; }
-._220g, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: $D$ !important; }
+._220g, ._1_y8:after, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: $D$ !important; }
._56bf, .touch .btn { border-radius: 0 !important; border: 0 !important; }
@@ -68,28 +70,20 @@ a, ._5fpq { color: $TT$ !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: $BBT$; }
100% { background: $BT$; } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: $BBT$; }
100% { background: $BT$; } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: $BBT$; }
100% { background: $BT$; } }
-
@keyframes highlightFade { 0%, 50% { background: $BBT$; }
100% { background: $BT$; } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: $BT$; }
50% { background: $BBT$; } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: $BT$; }
50% { background: $BBT$; } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: $BT$; }
50% { background: $BBT$; } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: $BT$; }
50% { background: $BBT$; } }
-
._50uu { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='$T$' viewBox='0 -10 50 50'%3E%3Ccircle cx='25' cy='23' r='3.2'/%3E%3Cpath d='M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3Cpath fill='none' d='M13 11h24v24H13z'/%3E%3C/svg%3E") no-repeat !important; }
._50uw { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='$T$' viewBox='0 0 50 50'%3E%3Cpath fill='none' d='M13 26h24v24H13z'/%3E%3Cpath d='M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z'/%3E%3C/svg%3E") no-repeat !important; }
diff --git a/app/src/main/assets/css/themes/material_amoled.compact.css b/app/src/main/assets/css/themes/material_amoled.css
index 2dbae161..100dbd17 100644
--- a/app/src/main/assets/css/themes/material_amoled.compact.css
+++ b/app/src/main/assets/css/themes/material_amoled.css
@@ -1,6 +1,8 @@
#viewport { background: #000 !important; }
-body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1 { background: #000 !important; }
+body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, ._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { background: #000 !important; }
+
+._31nf { background: #000 !important; }
._cv_, ._2sq8 { background-color: #000 !important; }
@@ -12,7 +14,7 @@ body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9
button:not([style*=image]), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, ._590n, ._4g8h, ._2cpp, article._55wo, .timeline .timelinePublisher, .touched, .sharerAttachment, .item a.primary.touched .primarywrap, ._38nq, ._537a, ._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, .excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, ._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._2b06, ._14v5 ._14v8, ._4qax, .aclb, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .acbk { background: rgba(89, 89, 89, 0.35) !important; }
-[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
+[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
@@ -26,7 +28,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, ._2pbp, ._5rou:first-child, ._egf:first-child, ._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, ._3u9t, ._55fj, ._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; }
-._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
+._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._301x, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
.item a.primary.touched .primarywrap, ._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
@@ -36,7 +38,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._4o58::after, .acr, ._t21, .acw, .aclb, ._4qax, ._5h8f { border-color: rgba(255, 255, 255, 0.3) !important; }
-._220g, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
+._220g, ._1_y8:after, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
._56bf, .touch .btn { border-radius: 0 !important; border: 0 !important; }
@@ -68,28 +70,20 @@ a, ._5fpq { color: #eee !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: #000; } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: #000; } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: #000; } }
-
@keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: #000; } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: #000; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: #000; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: #000; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: #000; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
._50uu { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 -10 50 50'%3E%3Ccircle cx='25' cy='23' r='3.2'/%3E%3Cpath d='M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3Cpath fill='none' d='M13 11h24v24H13z'/%3E%3C/svg%3E") no-repeat !important; }
._50uw { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 50 50'%3E%3Cpath fill='none' d='M13 26h24v24H13z'/%3E%3Cpath d='M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z'/%3E%3C/svg%3E") no-repeat !important; }
diff --git a/app/src/main/assets/css/themes/material_dark.compact.css b/app/src/main/assets/css/themes/material_dark.css
index 98b9bebd..dcd51b65 100644
--- a/app/src/main/assets/css/themes/material_dark.compact.css
+++ b/app/src/main/assets/css/themes/material_dark.css
@@ -1,6 +1,8 @@
#viewport { background: #303030 !important; }
-body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1 { background: #303030 !important; }
+body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, ._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { background: #303030 !important; }
+
+._31nf { background: #303030 !important; }
._cv_, ._2sq8 { background-color: #303030 !important; }
@@ -12,7 +14,7 @@ body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9
button:not([style*=image]), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, ._590n, ._4g8h, ._2cpp, article._55wo, .timeline .timelinePublisher, .touched, .sharerAttachment, .item a.primary.touched .primarywrap, ._38nq, ._537a, ._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, .excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, ._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._2b06, ._14v5 ._14v8, ._4qax, .aclb, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .acbk { background: rgba(137, 137, 137, 0.35) !important; }
-[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
+[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
@@ -26,7 +28,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, ._2pbp, ._5rou:first-child, ._egf:first-child, ._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, ._3u9t, ._55fj, ._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; }
-._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
+._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._301x, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
.item a.primary.touched .primarywrap, ._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
@@ -36,7 +38,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._4o58::after, .acr, ._t21, .acw, .aclb, ._4qax, ._5h8f { border-color: rgba(255, 255, 255, 0.3) !important; }
-._220g, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
+._220g, ._1_y8:after, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
._56bf, .touch .btn { border-radius: 0 !important; border: 0 !important; }
@@ -68,28 +70,20 @@ a, ._5fpq { color: #eee !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: rgba(137, 137, 137, 0.35); }
100% { background: #303030; } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: rgba(137, 137, 137, 0.35); }
100% { background: #303030; } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: rgba(137, 137, 137, 0.35); }
100% { background: #303030; } }
-
@keyframes highlightFade { 0%, 50% { background: rgba(137, 137, 137, 0.35); }
100% { background: #303030; } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: #303030; }
50% { background: rgba(137, 137, 137, 0.35); } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: #303030; }
50% { background: rgba(137, 137, 137, 0.35); } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: #303030; }
50% { background: rgba(137, 137, 137, 0.35); } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: #303030; }
50% { background: rgba(137, 137, 137, 0.35); } }
-
._50uu { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 -10 50 50'%3E%3Ccircle cx='25' cy='23' r='3.2'/%3E%3Cpath d='M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3Cpath fill='none' d='M13 11h24v24H13z'/%3E%3C/svg%3E") no-repeat !important; }
._50uw { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 50 50'%3E%3Cpath fill='none' d='M13 26h24v24H13z'/%3E%3Cpath d='M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z'/%3E%3C/svg%3E") no-repeat !important; }
diff --git a/app/src/main/assets/css/themes/material_glass.compact.css b/app/src/main/assets/css/themes/material_glass.css
index 23624457..726fcca7 100644
--- a/app/src/main/assets/css/themes/material_glass.compact.css
+++ b/app/src/main/assets/css/themes/material_glass.css
@@ -1,6 +1,8 @@
#viewport { background: rgba(0, 0, 0, 0.3) !important; }
-body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1 { background: transparent !important; }
+body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, ._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { background: transparent !important; }
+
+._31nf { background: transparent !important; }
._cv_, ._2sq8 { background-color: transparent !important; }
@@ -12,7 +14,7 @@ body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9
button:not([style*=image]), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, ._590n, ._4g8h, ._2cpp, article._55wo, .timeline .timelinePublisher, .touched, .sharerAttachment, .item a.primary.touched .primarywrap, ._38nq, ._537a, ._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, .excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, ._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._2b06, ._14v5 ._14v8, ._4qax, .aclb, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .acbk { background: rgba(89, 89, 89, 0.35) !important; }
-[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
+[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #fff !important; }
strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
@@ -26,7 +28,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, ._2pbp, ._5rou:first-child, ._egf:first-child, ._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, ._3u9t, ._55fj, ._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; }
-._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
+._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._301x, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
.item a.primary.touched .primarywrap, ._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq { border-top: 1px solid rgba(255, 255, 255, 0.3) !important; border-bottom: 1px solid rgba(255, 255, 255, 0.3) !important; }
@@ -36,7 +38,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #5d86dd !important; }
._4o58::after, .acr, ._t21, .acw, .aclb, ._4qax, ._5h8f { border-color: rgba(255, 255, 255, 0.3) !important; }
-._220g, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
+._220g, ._1_y8:after, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(255, 255, 255, 0.3) !important; }
._56bf, .touch .btn { border-radius: 0 !important; border: 0 !important; }
@@ -68,28 +70,20 @@ a, ._5fpq { color: #eee !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: transparent; } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: transparent; } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: transparent; } }
-
@keyframes highlightFade { 0%, 50% { background: rgba(89, 89, 89, 0.35); }
100% { background: transparent; } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: transparent; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: transparent; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: transparent; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: transparent; }
50% { background: rgba(89, 89, 89, 0.35); } }
-
._50uu { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 -10 50 50'%3E%3Ccircle cx='25' cy='23' r='3.2'/%3E%3Cpath d='M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3Cpath fill='none' d='M13 11h24v24H13z'/%3E%3C/svg%3E") no-repeat !important; }
._50uw { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 50 50'%3E%3Cpath fill='none' d='M13 26h24v24H13z'/%3E%3Cpath d='M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z'/%3E%3C/svg%3E") no-repeat !important; }
diff --git a/app/src/main/assets/css/themes/material_light.compact.css b/app/src/main/assets/css/themes/material_light.css
index 9ecd9732..1076f734 100644
--- a/app/src/main/assets/css/themes/material_light.compact.css
+++ b/app/src/main/assets/css/themes/material_light.css
@@ -1,6 +1,8 @@
#viewport { background: #fff !important; }
-body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1 { background: #fff !important; }
+body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9, ._5pz4, ._5lp4, ._5lp5, .container, .subpage, ._5n_f, #static_templates, ._22_8, ._1t4h, ._uoq, ._6-l ._2us7, ._6-l ._6-p, ._333v, ._55wo, ._1g05, .acy, ._51-g, ._533c, ._ib-, .sharerAttachmentEmpty, .sharerBottomWrapper, ._3bg5 ._56do, ._5hfh, ._52e-, .mQuestionsPollResultsBar, ._5hoc, ._5oxw, ._32_4, ._1hiz, .tlBody, #timelineBody, .timelineX, .timeline, .feed, .tlPrelude, .tlFeedPlaceholder, ._4_d0, .al, ._1gkq, ._5c5b, ._1qxg, ._5luf, ._2new, ._cld, ._3zvb, ._2nk0, .btnD, .btnI, ._11ub, ._5p7j, ._55wm, ._5rgs, ._5xuj, ._1sv1, ._45fu, ._18qg, ._1_ac, ._5w3g, ._3e18, ._10c_, ._2jl2, ._5q_r, ._5yt8, ._idb, ._2ip_, ._f6s, ._2l5v, ._8i2, ._kr5, ._2q7u, ._2q7v, ._d4i, ._577z, ._2u4w, ._3u9p, ._3u9t, ._2v9s, ._cw4, ._5_y-, ._5_y_, ._5_z3, ._cwy, ._5_z0, ._5_z1, ._5_z2, ._2mtc, ._206a, ._1_-1, ._1ybg, .appCenterCategorySelectorButton, ._5c9u, div._5y57::before, ._59f6._55so::before, .structuredPublisher, ._94v, ._vqv, ._5lp5, ._55wm, ._2om3, ._2ol-, ._1f9d, ._vee, ._31a-, ._3r8b, ._3r9d, .acw, ._4_xl, ._1p70, ._1p70, ._1ih_, ._51v6, ._u2c, ._484w, ._3ils, ._rm7, ._32qk, ._d01, ._2y60, ._5fu3, ._2foa, ._2y5_, ._38o9, ._1kb, .mAppCenterFatLabel, ._3f50, .mentions-placeholder, .mentions, .mentions-shadow, .mentions-measurer, .acg, ._59tu, ._52z5, ._4l9b, ._4gj3, .groupChromeView, ._i3g, ._3jcf, ._uww, textarea, ._15n_, ._skt, ._5f28, ._14_j, ._3bg5, ._53_-, ._52x1, ._35au, ._cwy, ._1rfn ._1rfk ._4vc-, ._1rfk, ._1rfk ._2v9s, ._301x { background: #fff !important; }
+
+._31nf { background: #fff !important; }
._cv_, ._2sq8 { background-color: #fff !important; }
@@ -12,7 +14,7 @@ body, #root, #header, [style*="background-color"], ._1upc, input, ._2f9r, ._59e9
button:not([style*=image]), button::before, .touch ._56bt, ._56be::before, .btnS, .touch::before, ._590n, ._4g8h, ._2cpp, article._55wo, .timeline .timelinePublisher, .touched, .sharerAttachment, .item a.primary.touched .primarywrap, ._38nq, ._537a, ._5xo2, ._5u5a::before, ._4u3j, ._15ks, ._5hua, ._59tt, ._41ft, .jx-tokenizer, ._55fj, .excessItem, .acr, ._5-lx, ._3g9-, ._55ws, ._4e8n, ._5pxa._3uj9, ._5n_5, ._u2d, ._56bu::before, ._5h8f, ._d00, ._2066, ._2k51, ._10sb li.selected, ._2z4j, ._ib-, ._1bhl, ._2b06, ._14v5 ._14v8, ._4qax, .aclb, ._4756, ._w34, ._56bv::before, ._5769, ._34iv, ._z-w, ._t21, .mToken, #addMembersTypeahead .mToken.mTokenWeakReference, .acbk { background: rgba(166, 166, 166, 0.35) !important; }
-[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #000 !important; }
+[style*="color"], body, input, ._42rv, ._4qau, ._dwm .descArea, ._eu5, ._1tcc, ._3g9-, ._29z_, ._3xz7, ._ib-, ._3bg5 ._56dq, ._477i, ._2vxk, .touched *, ._1_yj, ._1_yl, ._4pj9, ._z-z, ._z-v, ._1e8d, ._36nl, ._36nm, ._2_11, ._2_rf, ._2ip_, ._403p, ._5xu2, ._3ml8, ._3mla, ._50vk, ._1m2u, ._31y7, ._4kcb, ._1lf6, ._1lf5, ._1lf4, ._1hiz, ._xod, ._5ag5, ._43mh, .touch .btn, p, span, .fcg, button, ._52j9, ._52jb, ._52ja, ._5j35, ._rnk, ._24u0, ._1g06, ._14ye, .fcb, ._56cz._56c_, ._1gk_, ._55fj, ._45fu, ._18qg, ._1_ac, ._5aga, ._5ag9, ._537a, .acy, ._5ro_, ._6-l ._2us7, ._4mp, ._2b08, ._14v5 ._14v8, ._1440, ._1442, ._1448, ._4ks_, textarea, ._24pi, ._4en9, ._1kb, ._5p7j, ._2klz, ._5780, ._5781, ._5782, ._3u9u, ._3u9_, ._3u9s, ._1hcx, ._2066, ._1_-1, ._cv_, ._1nbx, ._2cuh, ._4ms9, ._4ms5, ._4ms6, ._31b4, ._31b5, ._5q_r, ._idb, ._27vp, ._4nwe, ._4nw9, ._27vi, .appCenterAppInfo, .appCenterPermissions, ._3c9l, ._3c9m, ._4jn_, ._32qt, ._3mom, ._3moo, ._-7o, ._d00, ._d01, ._559g, ._2new, .appCenterCategorySelectorButton, .mentions-input, .mentions-placeholder, .largeStatusBox .placeHolder, .fcw, ._5-7t, .fcl, ._4qas, .thread-title, .title, ._46pa, ._336p, ._1rrd, ._2om4, ._3m1m, ._2om2, ._5n_e, .appListExplanation, ._5yt8, ._8he, ._2luw, ._5rgs, h1, h2, h3, h4, h5, h6 { color: #000 !important; }
strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #3b5998 !important; }
@@ -26,7 +28,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #3b5998 !important; }
._1mx0, ._1rbr, ._5yt8, ._idb, ._cld, ._1e8h, ._z-w, ._1ha, ._1n8h ._1oby, ._5f99, ._2t39, ._2pbp, ._5rou:first-child, ._egf:first-child, ._15n_, ._3-2-, ._27ve, ._2s20, ._gui, ._2s21 > *::after, ._32qk, ._d00, ._d01, ._38o9, ._3u9t, ._55fj, ._52x1, ._3wjp, ._usq, ._2cul:before, ._13e_, .jewel .flyout, ._3bg5 ._52x6, ._56d8, .al { border-top: 1px solid rgba(0, 0, 0, 0.3) !important; }
-._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(0, 0, 0, 0.3) !important; }
+._15ny::after, ._z-w, ._8i2, ._2nk0, ._22_8, ._1t4h, ._37fd, ._1ha, ._3bg5 ._56do, ._8he, ._400s, ._5hoc, ._1bhn, ._5ag6, ._301x, ._577z:not(:last-child) ._ygd, ._3u9u, ._3mgz, ._52x6, ._2066, ._5luf, .mAppCenterFatLabel, .appCenterCategorySelectorButton, ._1q6v, ._5q_r, ._5yt8, ._ap1, ._52x1, ._59tu, ._usq, ._13e_, ._59f6._55so::before, ._4gj3, .jx-result, ._1f9d, ._vef, ._55x2 > *, .al, ._44qk, ._5rgs, ._5xuj, ._1sv1, ._idb, ._5lp5, ._3-2-, ._3to6, ._ir5, ._4nw6, ._4nwh, ._27ve, div._51v6::before, ._3c9h::before, ._2s20, ._gui, ._5jku, ._2foa, ._2y60, ._5fu3, ._4en9, ._1kb:not(:last-child) ._1kc, ._5pz4, ._5lp4, ._5lp5, ._5h6z, ._5h6x, ._2om4, ._5fjw > div, ._5fjv > :first-child, ._5fjw > :first-child { border-bottom: 1px solid rgba(0, 0, 0, 0.3) !important; }
.item a.primary.touched .primarywrap, ._5fjv, ._3on6, ._2u4w, ._2om3, ._2ol-, ._5fjw, ._4z83, ._1gkq { border-top: 1px solid rgba(0, 0, 0, 0.3) !important; border-bottom: 1px solid rgba(0, 0, 0, 0.3) !important; }
@@ -36,7 +38,7 @@ strong > a, ._15ks ._2q8z._2q8z, ._1e3e { color: #3b5998 !important; }
._4o58::after, .acr, ._t21, .acw, .aclb, ._4qax, ._5h8f { border-color: rgba(0, 0, 0, 0.3) !important; }
-._220g, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(0, 0, 0, 0.3) !important; }
+._220g, ._1_y8:after, ._2zh4::before, ._2ip_ ._2zh4::before, ._2ip_ ._15kk::before, ._2ip_ ._15kk + ._4u3j::before, ._58a0:before, ._43mh::before, ._43mh::after, ._1_-1::before, ._1kmv:after, ._1_ac:before { background: rgba(0, 0, 0, 0.3) !important; }
._56bf, .touch .btn { border-radius: 0 !important; border: 0 !important; }
@@ -68,28 +70,20 @@ a, ._5fpq { color: #111 !important; }
@-webkit-keyframes highlightFade { 0%, 50% { background: rgba(166, 166, 166, 0.35); }
100% { background: #fff; } }
-
@-moz-keyframes highlightFade { 0%, 50% { background: rgba(166, 166, 166, 0.35); }
100% { background: #fff; } }
-
@-ms-keyframes highlightFade { 0%, 50% { background: rgba(166, 166, 166, 0.35); }
100% { background: #fff; } }
-
@keyframes highlightFade { 0%, 50% { background: rgba(166, 166, 166, 0.35); }
100% { background: #fff; } }
-
@-webkit-keyframes chatHighlightAnimation { 0%, 100% { background: #fff; }
50% { background: rgba(166, 166, 166, 0.35); } }
-
@-moz-keyframes chatHighlightAnimation { 0%, 100% { background: #fff; }
50% { background: rgba(166, 166, 166, 0.35); } }
-
@-ms-keyframes chatHighlightAnimation { 0%, 100% { background: #fff; }
50% { background: rgba(166, 166, 166, 0.35); } }
-
@keyframes chatHighlightAnimation { 0%, 100% { background: #fff; }
50% { background: rgba(166, 166, 166, 0.35); } }
-
._50uu { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 -10 50 50'%3E%3Ccircle cx='25' cy='23' r='3.2'/%3E%3Cpath d='M22 13l-1.83 2H17c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V17c0-1.1-.9-2-2-2h-3.17L28 13h-6zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5z'/%3E%3Cpath fill='none' d='M13 11h24v24H13z'/%3E%3C/svg%3E") no-repeat !important; }
._50uw { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' viewBox='0 0 50 50'%3E%3Cpath fill='none' d='M13 26h24v24H13z'/%3E%3Cpath d='M30 31.5V28c0-.55-.45-1-1-1H17c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z'/%3E%3C/svg%3E") no-repeat !important; }
diff --git a/app/src/main/assets/js/click-debugger.js b/app/src/main/assets/js/click-debugger.js
deleted file mode 100644
index 702a62c9..00000000
--- a/app/src/main/assets/js/click-debugger.js
+++ /dev/null
@@ -1,13 +0,0 @@
-//for desktop only
-var _frostAContext = function(e) {
- /*
- * Commonality; check for valid target
- */
- var element = e.target || e.currentTarget || e.srcElement;
- if (!element) return;
- console.log("Clicked element:");
- console.log(element.tagName);
- console.log(element.className);
-}
-
-document.addEventListener('contextmenu', _frostAContext, true);
diff --git a/app/src/main/assets/js/click-debugger.min.js b/app/src/main/assets/js/click-debugger.min.js
deleted file mode 100644
index 0f986b07..00000000
--- a/app/src/main/assets/js/click-debugger.min.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var _frostAContext=function(e){
-var t=e.target||e.currentTarget||e.srcElement
-;t&&(console.log("Clicked element:"),
-console.log(t.tagName),console.log(t.className))
-}
-;document.addEventListener("contextmenu",_frostAContext,!0); \ No newline at end of file
diff --git a/app/src/main/assets/js/click_a.coffee b/app/src/main/assets/js/click_a.coffee
new file mode 100644
index 00000000..e032b4ad
--- /dev/null
+++ b/app/src/main/assets/js/click_a.coffee
@@ -0,0 +1,48 @@
+prevented = false
+
+_frostAClick = (e) ->
+
+ ###
+ # Commonality; check for valid target
+ ###
+ element = e.target or e.srcElement
+ if element.tagName != "A"
+ element = element.parentNode
+ # Notifications is two layers under
+ if element.tagName != "A"
+ element = element.parentNode
+ if element.tagName == "A"
+ if !prevented
+ url = element.getAttribute("href")
+ console.log "Click Intercept #{url}"
+ # if frost is injected, check if loading the url through an overlay works
+ if Frost?.loadUrl(url) == true
+ e.stopPropagation()
+ e.preventDefault()
+ else
+ console.log "Click Intercept Prevented"
+ return
+
+###
+# On top of the click event, we must stop it for long presses
+# Since that will conflict with the context menu
+# Note that we only override it on conditions where the context menu
+# Will occur
+###
+
+_frostPreventClick = ->
+ console.log "Click prevented"
+ prevented = true
+ return
+
+document.addEventListener "click", _frostAClick, true
+clickTimeout = undefined
+document.addEventListener "touchstart", ((e) ->
+ clickTimeout = setTimeout(_frostPreventClick, 400)
+ return
+), true
+document.addEventListener "touchend", ((e) ->
+ prevented = false
+ clearTimeout clickTimeout
+ return
+), true
diff --git a/app/src/main/assets/js/click_a.js b/app/src/main/assets/js/click_a.js
index 1ced820a..e3ea7f31 100644
--- a/app/src/main/assets/js/click_a.js
+++ b/app/src/main/assets/js/click_a.js
@@ -1,57 +1,60 @@
-// we will handle click events
-if (!window.hasOwnProperty('frost_click_a')) {
- console.log('Registering frost_click_a');
- window.frost_click_a = true;
+"use strict";
- var prevented = false;
+(function () {
- var _frostAClick = function(e) {
+ /*
+ * On top of the click event, we must stop it for long presses
+ * Since that will conflict with the context menu
+ * Note that we only override it on conditions where the context menu
+ * Will occur
+ */
+ var _frostAClick, _frostPreventClick, clickTimeout, prevented;
+ prevented = false;
+ _frostAClick = function _frostAClick(e) {
/*
* Commonality; check for valid target
*/
- var element = e.target || e.srcElement;
-
- if (element.tagName !== 'A') element = element.parentNode;
- //Notifications is two layers under
- if (element.tagName !== 'A') element = element.parentNode;
- if (element.tagName === 'A') {
+ var element, url;
+ element = e.target || e.srcElement;
+ if (element.tagName !== "A") {
+ element = element.parentNode;
+ }
+ // Notifications is two layers under
+ if (element.tagName !== "A") {
+ element = element.parentNode;
+ }
+ if (element.tagName === "A") {
if (!prevented) {
- var url = element.getAttribute('href');
- console.log('Click Intercept', url);
+ url = element.getAttribute("href");
+ console.log("Click Intercept " + url);
// if frost is injected, check if loading the url through an overlay works
- if (typeof Frost !== 'undefined' && Frost.loadUrl(url)) {
- e.stopPropagation();
- e.preventDefault();
+ if ((typeof Frost !== "undefined" && Frost !== null ? Frost.loadUrl(url) : void 0) === true) {
+ e.stopPropagation();
+ e.preventDefault();
}
} else {
- console.log('Click Intercept Prevented');
+ console.log("Click Intercept Prevented");
}
}
- }
+ };
- /*
- * On top of the click event, we must stop it for long presses
- * Since that will conflict with the context menu
- * Note that we only override it on conditions where the context menu
- * Will occur
- */
- var _frostPreventClick = function() {
- console.log('Click prevented')
+ _frostPreventClick = function _frostPreventClick() {
+ console.log("Click prevented");
prevented = true;
- }
+ };
- document.addEventListener('click', _frostAClick, true);
+ document.addEventListener("click", _frostAClick, true);
- var clickTimeout;
+ clickTimeout = void 0;
- document.addEventListener('touchstart', function _frostStart(e) {
+ document.addEventListener("touchstart", function (e) {
clickTimeout = setTimeout(_frostPreventClick, 400);
}, true);
- document.addEventListener('touchend', function _frostEnd(e) {
+ document.addEventListener("touchend", function (e) {
prevented = false;
clearTimeout(clickTimeout);
}, true);
-}
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/click_a.min.js b/app/src/main/assets/js/click_a.min.js
deleted file mode 100644
index 7abaaac6..00000000
--- a/app/src/main/assets/js/click_a.min.js
+++ /dev/null
@@ -1,22 +0,0 @@
-if(!window.hasOwnProperty("frost_click_a")){
-console.log("Registering frost_click_a"),
-window.frost_click_a=!0
-;var prevented=!1,_frostAClick=function(e){
-var t=e.target||e.srcElement
-;if("A"!==t.tagName&&(t=t.parentNode),"A"!==t.tagName&&(t=t.parentNode),
-"A"===t.tagName)if(prevented)console.log("Click Intercept Prevented");else{
-var o=t.getAttribute("href")
-;console.log("Click Intercept",o),"undefined"!=typeof Frost&&Frost.loadUrl(o)&&(e.stopPropagation(),
-e.preventDefault())
-}
-},_frostPreventClick=function(){
-console.log("Click prevented"),prevented=!0
-}
-;document.addEventListener("click",_frostAClick,!0)
-;var clickTimeout
-;document.addEventListener("touchstart",function(e){
-clickTimeout=setTimeout(_frostPreventClick,400)
-},!0),document.addEventListener("touchend",function(e){
-prevented=!1,clearTimeout(clickTimeout)
-},!0)
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/click_debugger.coffee b/app/src/main/assets/js/click_debugger.coffee
new file mode 100644
index 00000000..057bb207
--- /dev/null
+++ b/app/src/main/assets/js/click_debugger.coffee
@@ -0,0 +1,14 @@
+# for desktop only
+
+_frostAContext = (e) ->
+
+ ###
+ # Commonality; check for valid target
+ ###
+ element = e.target or e.currentTarget or e.srcElement
+ if !element
+ return
+ console.log "Clicked element: #{element.tagName} #{element.className}"
+ return
+
+document.addEventListener 'contextmenu', _frostAContext, true
diff --git a/app/src/main/assets/js/click_debugger.js b/app/src/main/assets/js/click_debugger.js
new file mode 100644
index 00000000..71db586a
--- /dev/null
+++ b/app/src/main/assets/js/click_debugger.js
@@ -0,0 +1,20 @@
+'use strict';
+
+(function () {
+ // for desktop only
+ var _frostAContext;
+
+ _frostAContext = function _frostAContext(e) {
+ /*
+ * Commonality; check for valid target
+ */
+ var element;
+ element = e.target || e.currentTarget || e.srcElement;
+ if (!element) {
+ return;
+ }
+ console.log('Clicked element: ' + element.tagName + ' ' + element.className);
+ };
+
+ document.addEventListener('contextmenu', _frostAContext, true);
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/context_a.coffee b/app/src/main/assets/js/context_a.coffee
new file mode 100644
index 00000000..0dca1b7f
--- /dev/null
+++ b/app/src/main/assets/js/context_a.coffee
@@ -0,0 +1,59 @@
+# context menu for links
+# largely mimics click_a.js
+# we will also bind a listener here to notify the activity not to deal with viewpager scrolls
+longClick = false
+
+_frostAContext = (e) ->
+ Frost?.longClick true
+ longClick = true
+
+ ###
+ # Commonality; check for valid target
+ ###
+
+ element = e.target or e.currentTarget or e.srcElement
+ if !element
+ return
+ if element.tagName != "A"
+ element = element.parentNode
+ #Notifications is two layers under
+ if element.tagName != "A"
+ element = element.parentNode
+ if element.tagName == "A" and element.getAttribute("href") != "#"
+ url = element.getAttribute("href")
+ if !url
+ return
+ text = element.parentNode.innerText
+ # check if image item exists, first in children and then in parent
+ image = element.querySelector("[style*=\"background-image: url(\"]")
+ if !image
+ image = element.parentNode.querySelector("[style*=\"background-image: url(\"]")
+ if image
+ imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1)
+ console.log "Context image: #{imageUrl}"
+ Frost?.loadImage imageUrl, text
+ e.stopPropagation()
+ e.preventDefault()
+ return
+ # check if true img exists
+ img = element.querySelector("img[src*=scontent]")
+ if img
+ imgUrl = img.src
+ console.log "Context img #{imgUrl}"
+ Frost?.loadImage imgUrl, text
+ e.stopPropagation()
+ e.preventDefault()
+ return
+ console.log "Context Content #{url} #{text}"
+ Frost?.contextMenu url, text
+ e.stopPropagation()
+ e.preventDefault()
+ return
+
+document.addEventListener "contextmenu", _frostAContext, true
+document.addEventListener "touchend", ((e) ->
+ if longClick
+ Frost?.longClick false
+ longClick = false
+ return
+), true
diff --git a/app/src/main/assets/js/context_a.js b/app/src/main/assets/js/context_a.js
index dfc75a80..b39a6542 100644
--- a/app/src/main/assets/js/context_a.js
+++ b/app/src/main/assets/js/context_a.js
@@ -1,67 +1,83 @@
-//context menu for links
-//largely mimics click_a.js
-//we will also bind a listener here to notify the activity not to deal with viewpager scrolls
-//since the long press is also associated witho
-if (!window.hasOwnProperty('frost_context_a')) {
- console.log('frost_context_a frost_click_a');
- window.frost_context_a = true;
+"use strict";
- var longClick = false;
+(function () {
+ // context menu for links
+ // largely mimics click_a.js
+ // we will also bind a listener here to notify the activity not to deal with viewpager scrolls
+ var _frostAContext, longClick;
- var _frostAContext = function(e) {
- if (typeof Frost !== 'undefined') Frost.longClick(true);
- longClick = true;
+ longClick = false;
+ _frostAContext = function _frostAContext(e) {
/*
* Commonality; check for valid target
*/
- var element = e.target || e.currentTarget || e.srcElement;
- if (!element) return;
- if (element.tagName !== 'A') element = element.parentNode;
+ var element, image, imageUrl, img, imgUrl, text, url;
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.longClick(true);
+ }
+ longClick = true;
+ element = e.target || e.currentTarget || e.srcElement;
+ if (!element) {
+ return;
+ }
+ if (element.tagName !== "A") {
+ element = element.parentNode;
+ }
//Notifications is two layers under
- if (element.tagName !== 'A') element = element.parentNode;
- if (element.tagName === 'A' && element.getAttribute('href') !== '#') {
- var url = element.getAttribute('href');
- if (!url) return;
- var text = element.parentNode.innerText;
-
- //check if image item exists, first in children and then in parent
- var image = element.querySelector('[style*="background-image: url("]');
- if (!image) image = element.parentNode.querySelector('[style*="background-image: url("]');
+ if (element.tagName !== "A") {
+ element = element.parentNode;
+ }
+ if (element.tagName === "A" && element.getAttribute("href") !== "#") {
+ url = element.getAttribute("href");
+ if (!url) {
+ return;
+ }
+ text = element.parentNode.innerText;
+ // check if image item exists, first in children and then in parent
+ image = element.querySelector("[style*=\"background-image: url(\"]");
+ if (!image) {
+ image = element.parentNode.querySelector("[style*=\"background-image: url(\"]");
+ }
if (image) {
- var imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1);
- console.log('Context image: ' + imageUrl);
- if (typeof Frost !== 'undefined') Frost.loadImage(imageUrl, text);
+ imageUrl = window.getComputedStyle(image, null).backgroundImage.trim().slice(4, -1);
+ console.log("Context image: " + imageUrl);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.loadImage(imageUrl, text);
+ }
e.stopPropagation();
e.preventDefault();
return;
}
-
- //check if true img exists
- var img = element.querySelector('img[src*=scontent]')
+ // check if true img exists
+ img = element.querySelector("img[src*=scontent]");
if (img) {
- var imgUrl = img.src;
- console.log('Context img', imgUrl);
- if (typeof Frost !== 'undefined') Frost.loadImage(imgUrl, text);
+ imgUrl = img.src;
+ console.log("Context img " + imgUrl);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.loadImage(imgUrl, text);
+ }
e.stopPropagation();
e.preventDefault();
return;
}
-
- console.log('Context Content', url, text);
- if (typeof Frost !== 'undefined') Frost.contextMenu(url, text);
-
+ console.log("Context Content " + url + " " + text);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.contextMenu(url, text);
+ }
e.stopPropagation();
e.preventDefault();
}
- }
+ };
- document.addEventListener('contextmenu', _frostAContext, true);
+ document.addEventListener("contextmenu", _frostAContext, true);
- document.addEventListener('touchend', function _frostEnd(e) {
+ document.addEventListener("touchend", function (e) {
if (longClick) {
- if (typeof Frost !== 'undefined') Frost.longClick(false);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.longClick(false);
+ }
longClick = false;
}
}, true);
-}
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/context_a.min.js b/app/src/main/assets/js/context_a.min.js
deleted file mode 100644
index 260b41ff..00000000
--- a/app/src/main/assets/js/context_a.min.js
+++ /dev/null
@@ -1,36 +0,0 @@
-if(!window.hasOwnProperty("frost_context_a")){
-console.log("frost_context_a frost_click_a"),
-window.frost_context_a=!0
-;var longClick=!1,_frostAContext=function(e){
-"undefined"!=typeof Frost&&Frost.longClick(!0),
-longClick=!0
-;var t=e.target||e.currentTarget||e.srcElement
-;if(t&&("A"!==t.tagName&&(t=t.parentNode),
-"A"!==t.tagName&&(t=t.parentNode),"A"===t.tagName&&"#"!==t.getAttribute("href"))){
-var o=t.getAttribute("href")
-;if(!o)return
-;var n=t.parentNode.innerText,r=t.querySelector('[style*="background-image: url("]')
-;if(r||(r=t.parentNode.querySelector('[style*="background-image: url("]')),
-r){
-var a=window.getComputedStyle(r,null).backgroundImage.trim().slice(4,-1)
-;return console.log("Context image: "+a),
-"undefined"!=typeof Frost&&Frost.loadImage(a,n),
-e.stopPropagation(),void e.preventDefault()
-}
-var i=t.querySelector("img[src*=scontent]")
-;if(i){
-var l=i.src
-;return console.log("Context img",l),"undefined"!=typeof Frost&&Frost.loadImage(l,n),
-e.stopPropagation(),
-void e.preventDefault()
-}
-console.log("Context Content",o,n),"undefined"!=typeof Frost&&Frost.contextMenu(o,n),
-e.stopPropagation(),
-e.preventDefault()
-}
-}
-;document.addEventListener("contextmenu",_frostAContext,!0),document.addEventListener("touchend",function(e){
-longClick&&("undefined"!=typeof Frost&&Frost.longClick(!1),
-longClick=!1)
-},!0)
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/header_badges.coffee b/app/src/main/assets/js/header_badges.coffee
new file mode 100644
index 00000000..e9702751
--- /dev/null
+++ b/app/src/main/assets/js/header_badges.coffee
@@ -0,0 +1,4 @@
+# bases the header contents if it exists
+header = document.getElementById("mJewelNav")
+if header != null
+ Frost?.handleHeader header.outerHTML
diff --git a/app/src/main/assets/js/header_badges.js b/app/src/main/assets/js/header_badges.js
index 26315a5f..13447229 100644
--- a/app/src/main/assets/js/header_badges.js
+++ b/app/src/main/assets/js/header_badges.js
@@ -1,3 +1,14 @@
-//bases the header contents if it exists
-var header = document.getElementById('mJewelNav');
-if (header !== null) Frost.handleHeader(header.outerHTML);
+"use strict";
+
+(function () {
+ // bases the header contents if it exists
+ var header;
+
+ header = document.getElementById("mJewelNav");
+
+ if (header !== null) {
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.handleHeader(header.outerHTML);
+ }
+ }
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/header_badges.min.js b/app/src/main/assets/js/header_badges.min.js
deleted file mode 100644
index 7d5b45ea..00000000
--- a/app/src/main/assets/js/header_badges.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-var header=document.getElementById("mJewelNav");
-if(header!==null)Frost.handleHeader(header.outerHTML); \ No newline at end of file
diff --git a/app/src/main/assets/js/media.coffee b/app/src/main/assets/js/media.coffee
new file mode 100644
index 00000000..810c09b7
--- /dev/null
+++ b/app/src/main/assets/js/media.coffee
@@ -0,0 +1,29 @@
+# we will handle media events
+_frostMediaClick = (e) ->
+
+ ###
+ # Commonality; check for valid target
+ ###
+
+ element = e.target or e.srcElement
+ if !element.hasAttribute("data-sigil") or !element.getAttribute("data-sigil").toLowerCase().includes("inlinevideo")
+ return
+ console.log "Found inline video"
+ element = element.parentNode
+ if !element.hasAttribute("data-store")
+ return
+ dataStore = undefined
+ try
+ dataStore = JSON.parse(element.getAttribute("data-store"))
+ catch e
+ return
+ if !dataStore.src
+ return
+ console.log "Inline video #{dataStore.src}"
+ Frost?.loadVideo dataStore.src, dataStore.animatedGifVideo
+ e.stopPropagation()
+ e.preventDefault()
+ return
+
+document.addEventListener "click", _frostMediaClick, true
+
diff --git a/app/src/main/assets/js/media.js b/app/src/main/assets/js/media.js
index f1a5ac3c..5ec7f472 100644
--- a/app/src/main/assets/js/media.js
+++ b/app/src/main/assets/js/media.js
@@ -1,31 +1,40 @@
-// we will media events
-if (!window.hasOwnProperty('frost_media')) {
- console.log('Registering frost_media');
- window.frost_media = true;
+"use strict";
- var _frostMediaClick = function(e) {
+(function () {
+ // we will handle media events
+ var _frostMediaClick;
+ _frostMediaClick = function _frostMediaClick(e) {
/*
* Commonality; check for valid target
*/
- var element = e.target || e.srcElement;
- if (!element.hasAttribute("data-sigil") || !element.getAttribute("data-sigil").toLowerCase().includes("inlinevideo")) return;
+ var dataStore, element;
+ element = e.target || e.srcElement;
+ if (!element.hasAttribute("data-sigil") || !element.getAttribute("data-sigil").toLowerCase().includes("inlinevideo")) {
+ return;
+ }
console.log("Found inline video");
element = element.parentNode;
- if (!element.hasAttribute("data-store")) return;
- var dataStore;
+ if (!element.hasAttribute("data-store")) {
+ return;
+ }
+ dataStore = void 0;
try {
dataStore = JSON.parse(element.getAttribute("data-store"));
- } catch (e) {
+ } catch (error) {
+ e = error;
+ return;
+ }
+ if (!dataStore.src) {
return;
}
- if (!dataStore.src) return;
console.log("Inline video " + dataStore.src);
- if (typeof Frost !== 'undefined') Frost.loadVideo(dataStore.src, dataStore.animatedGifVideo);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.loadVideo(dataStore.src, dataStore.animatedGifVideo);
+ }
e.stopPropagation();
e.preventDefault();
- return;
- }
+ };
- document.addEventListener('click', _frostMediaClick, true);
-}
+ document.addEventListener("click", _frostMediaClick, true);
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/media.min.js b/app/src/main/assets/js/media.min.js
deleted file mode 100644
index 767b8a36..00000000
--- a/app/src/main/assets/js/media.min.js
+++ /dev/null
@@ -1,21 +0,0 @@
-if(!window.hasOwnProperty("frost_media")){
-console.log("Registering frost_media"),
-window.frost_media=!0
-;var _frostMediaClick=function(e){
-var t=e.target||e.srcElement
-;if(t.hasAttribute("data-sigil")&&t.getAttribute("data-sigil").toLowerCase().includes("inlinevideo")&&(console.log("Found inline video"),
-t=t.parentNode,
-t.hasAttribute("data-store"))){
-var i
-;try{
-i=JSON.parse(t.getAttribute("data-store"))
-}catch(e){
-return
-}
-i.src&&(console.log("Inline video "+i.src),"undefined"!=typeof Frost&&Frost.loadVideo(i.src,i.animatedGifVideo),
-e.stopPropagation(),
-e.preventDefault())
-}
-}
-;document.addEventListener("click",_frostMediaClick,!0)
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/menu.coffee b/app/src/main/assets/js/menu.coffee
new file mode 100644
index 00000000..8072eeab
--- /dev/null
+++ b/app/src/main/assets/js/menu.coffee
@@ -0,0 +1,42 @@
+# click menu and move contents to main view
+viewport = document.querySelector("#viewport")
+root = document.querySelector("#root")
+if !viewport
+ console.log "Menu.js: viewport is null"
+if !root
+ console.log "Menu.js: root is null"
+y = new MutationObserver((mutations) ->
+ viewport.removeAttribute "style"
+ root.removeAttribute "style"
+ return
+)
+y.observe viewport, attributes: true
+y.observe root, attributes: true
+x = new MutationObserver((mutations) ->
+ menu = document.querySelector(".mSideMenu")
+ if menu != null
+ x.disconnect()
+ console.log "Found side menu"
+ while root.firstChild
+ root.removeChild root.firstChild
+ while menu.childNodes.length
+ console.log "append"
+ viewport.appendChild menu.childNodes[0]
+ Frost?.emit 0
+ setTimeout (->
+ y.disconnect()
+ console.log "Unhook styler"
+ return
+ ), 500
+ return
+)
+jewel = document.querySelector("#mJewelNav")
+if !jewel
+ console.log "Menu.js: jewel is null"
+x.observe jewel,
+ childList: true
+ subtree: true
+menuA = document.querySelector("#bookmarks_jewel").querySelector("a")
+if !menuA
+ console.log "Menu.js: jewel is null"
+menuA.click() \ No newline at end of file
diff --git a/app/src/main/assets/js/menu.js b/app/src/main/assets/js/menu.js
index a43b1820..49534c7e 100644
--- a/app/src/main/assets/js/menu.js
+++ b/app/src/main/assets/js/menu.js
@@ -1,46 +1,73 @@
-//click menu and move contents to main view
-if (!window.hasOwnProperty('frost_menu')) {
- console.log('Registering frost_menu');
- window.frost_menu = true;
- var viewport = document.querySelector('#viewport');
- var root = document.querySelector('#root');
- if (!viewport) console.log('Menu.js: viewport is null');
- if (!root) console.log('Menu.js: root is null');
- var y = new MutationObserver(function(mutations) {
- viewport.removeAttribute('style');
- root.removeAttribute('style');
+"use strict";
+
+(function () {
+ // click menu and move contents to main view
+ var jewel, menuA, root, viewport, x, y;
+
+ viewport = document.querySelector("#viewport");
+
+ root = document.querySelector("#root");
+
+ if (!viewport) {
+ console.log("Menu.js: viewport is null");
+ }
+
+ if (!root) {
+ console.log("Menu.js: root is null");
+ }
+
+ y = new MutationObserver(function (mutations) {
+ viewport.removeAttribute("style");
+ root.removeAttribute("style");
});
+
y.observe(viewport, {
attributes: true
});
+
y.observe(root, {
attributes: true
});
- var x = new MutationObserver(function(mutations) {
- var menu = document.querySelector('.mSideMenu');
+
+ x = new MutationObserver(function (mutations) {
+ var menu;
+ menu = document.querySelector(".mSideMenu");
if (menu !== null) {
x.disconnect();
- console.log('Found side menu');
- while (root.firstChild)
+ console.log("Found side menu");
+ while (root.firstChild) {
root.removeChild(root.firstChild);
+ }
while (menu.childNodes.length) {
- console.log('append');
+ console.log("append");
viewport.appendChild(menu.childNodes[0]);
}
- if (typeof Frost !== 'undefined') Frost.emit(0);
- setTimeout(function() {
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.emit(0);
+ }
+ setTimeout(function () {
y.disconnect();
- console.log('Unhook styler');
+ console.log("Unhook styler");
}, 500);
}
});
- var jewel = document.querySelector('#mJewelNav');
- if (!jewel) console.log('Menu.js: jewel is null');
+
+ jewel = document.querySelector("#mJewelNav");
+
+ if (!jewel) {
+ console.log("Menu.js: jewel is null");
+ }
+
x.observe(jewel, {
childList: true,
subtree: true
});
- var menuA = document.querySelector('#bookmarks_jewel').querySelector('a');
- if (!menuA) console.log('Menu.js: jewel is null')
+
+ menuA = document.querySelector("#bookmarks_jewel").querySelector("a");
+
+ if (!menuA) {
+ console.log("Menu.js: jewel is null");
+ }
+
menuA.click();
-}
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/menu.min.js b/app/src/main/assets/js/menu.min.js
deleted file mode 100644
index 5b65ac9b..00000000
--- a/app/src/main/assets/js/menu.min.js
+++ /dev/null
@@ -1,33 +0,0 @@
-if(!window.hasOwnProperty("frost_menu")){
-console.log("Registering frost_menu"),window.frost_menu=!0
-;var viewport=document.querySelector("#viewport"),root=document.querySelector("#root")
-;viewport||console.log("Menu.js: viewport is null"),
-root||console.log("Menu.js: root is null")
-;var y=new MutationObserver(function(e){
-viewport.removeAttribute("style"),root.removeAttribute("style")
-})
-;y.observe(viewport,{
-attributes:!0
-}),y.observe(root,{
-attributes:!0
-})
-;var x=new MutationObserver(function(e){
-var o=document.querySelector(".mSideMenu")
-;if(null!==o){
-for(x.disconnect(),console.log("Found side menu");root.firstChild;)root.removeChild(root.firstChild)
-;for(;o.childNodes.length;)console.log("append"),
-viewport.appendChild(o.childNodes[0])
-;"undefined"!=typeof Frost&&Frost.emit(0),setTimeout(function(){
-y.disconnect(),console.log("Unhook styler")
-},500)
-}
-}),jewel=document.querySelector("#mJewelNav")
-;jewel||console.log("Menu.js: jewel is null"),
-x.observe(jewel,{
-childList:!0,
-subtree:!0
-})
-;var menuA=document.querySelector("#bookmarks_jewel").querySelector("a")
-;menuA||console.log("Menu.js: jewel is null"),
-menuA.click()
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/menu_debug.coffee b/app/src/main/assets/js/menu_debug.coffee
new file mode 100644
index 00000000..54b265f4
--- /dev/null
+++ b/app/src/main/assets/js/menu_debug.coffee
@@ -0,0 +1,42 @@
+# click menu and move contents to main view
+viewport = document.querySelector("#viewport")
+root = document.querySelector("#root")
+if !viewport
+ console.log "Menu.js: viewport is null"
+if !root
+ console.log "Menu.js: root is null"
+y = new MutationObserver((mutations) ->
+ viewport.removeAttribute "style"
+ root.removeAttribute "style"
+ return
+)
+y.observe viewport, attributes: true
+y.observe root, attributes: true
+x = new MutationObserver((mutations) ->
+ menu = document.querySelector(".mSideMenu")
+ if menu != null
+ x.disconnect()
+ console.log "Found side menu"
+ while root.firstChild
+ root.removeChild root.firstChild
+ while menu.childNodes.length
+ console.log "append"
+ viewport.appendChild menu.childNodes[0]
+ Frost?.handleHtml viewport.outerHTML
+ setTimeout (->
+ y.disconnect()
+ console.log "Unhook styler"
+ return
+ ), 500
+ return
+)
+jewel = document.querySelector("#mJewelNav")
+if !jewel
+ console.log "Menu.js: jewel is null"
+x.observe jewel,
+ childList: true
+ subtree: true
+menuA = document.querySelector("#bookmarks_jewel").querySelector("a")
+if !menuA
+ console.log "Menu.js: jewel is null"
+menuA.click()
diff --git a/app/src/main/assets/js/menu_debug.js b/app/src/main/assets/js/menu_debug.js
index 552dc909..7ecbf276 100644
--- a/app/src/main/assets/js/menu_debug.js
+++ b/app/src/main/assets/js/menu_debug.js
@@ -1,46 +1,73 @@
-//click menu and move contents to main view
-if (!window.hasOwnProperty('frost_menu')) {
- console.log('Registering frost_menu');
- window.frost_menu = true;
- var viewport = document.querySelector('#viewport');
- var root = document.querySelector('#root');
- if (!viewport) console.log('Menu.js: viewport is null');
- if (!root) console.log('Menu.js: root is null');
- var y = new MutationObserver(function(mutations) {
- viewport.removeAttribute('style');
- root.removeAttribute('style');
+"use strict";
+
+(function () {
+ // click menu and move contents to main view
+ var jewel, menuA, root, viewport, x, y;
+
+ viewport = document.querySelector("#viewport");
+
+ root = document.querySelector("#root");
+
+ if (!viewport) {
+ console.log("Menu.js: viewport is null");
+ }
+
+ if (!root) {
+ console.log("Menu.js: root is null");
+ }
+
+ y = new MutationObserver(function (mutations) {
+ viewport.removeAttribute("style");
+ root.removeAttribute("style");
});
+
y.observe(viewport, {
attributes: true
});
+
y.observe(root, {
attributes: true
});
- var x = new MutationObserver(function(mutations) {
- var menu = document.querySelector('.mSideMenu');
+
+ x = new MutationObserver(function (mutations) {
+ var menu;
+ menu = document.querySelector(".mSideMenu");
if (menu !== null) {
x.disconnect();
- console.log('Found side menu');
- while (root.firstChild)
+ console.log("Found side menu");
+ while (root.firstChild) {
root.removeChild(root.firstChild);
+ }
while (menu.childNodes.length) {
- console.log('append');
+ console.log("append");
viewport.appendChild(menu.childNodes[0]);
}
- if (typeof Frost !== 'undefined') Frost.handleHtml(viewport.outerHTML);
- setTimeout(function() {
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.handleHtml(viewport.outerHTML);
+ }
+ setTimeout(function () {
y.disconnect();
- console.log('Unhook styler');
+ console.log("Unhook styler");
}, 500);
}
});
- var jewel = document.querySelector('#mJewelNav');
- if (!jewel) console.log('Menu.js: jewel is null');
+
+ jewel = document.querySelector("#mJewelNav");
+
+ if (!jewel) {
+ console.log("Menu.js: jewel is null");
+ }
+
x.observe(jewel, {
childList: true,
subtree: true
});
- var menuA = document.querySelector('#bookmarks_jewel').querySelector('a');
- if (!menuA) console.log('Menu.js: jewel is null')
+
+ menuA = document.querySelector("#bookmarks_jewel").querySelector("a");
+
+ if (!menuA) {
+ console.log("Menu.js: jewel is null");
+ }
+
menuA.click();
-}
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/menu_debug.min.js b/app/src/main/assets/js/menu_debug.min.js
deleted file mode 100644
index df51c13b..00000000
--- a/app/src/main/assets/js/menu_debug.min.js
+++ /dev/null
@@ -1,34 +0,0 @@
-if(!window.hasOwnProperty("frost_menu")){
-console.log("Registering frost_menu"),window.frost_menu=!0
-;var viewport=document.querySelector("#viewport"),root=document.querySelector("#root")
-;viewport||console.log("Menu.js: viewport is null"),
-root||console.log("Menu.js: root is null")
-;var y=new MutationObserver(function(e){
-viewport.removeAttribute("style"),root.removeAttribute("style")
-})
-;y.observe(viewport,{
-attributes:!0
-}),y.observe(root,{
-attributes:!0
-})
-;var x=new MutationObserver(function(e){
-var o=document.querySelector(".mSideMenu")
-;if(null!==o){
-for(x.disconnect(),console.log("Found side menu");root.firstChild;)root.removeChild(root.firstChild)
-;for(;o.childNodes.length;)console.log("append"),
-viewport.appendChild(o.childNodes[0])
-;"undefined"!=typeof Frost&&Frost.handleHtml(viewport.outerHTML),
-setTimeout(function(){
-y.disconnect(),console.log("Unhook styler")
-},500)
-}
-}),jewel=document.querySelector("#mJewelNav")
-;jewel||console.log("Menu.js: jewel is null"),
-x.observe(jewel,{
-childList:!0,
-subtree:!0
-})
-;var menuA=document.querySelector("#bookmarks_jewel").querySelector("a")
-;menuA||console.log("Menu.js: jewel is null"),
-menuA.click()
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/notif_msg.coffee b/app/src/main/assets/js/notif_msg.coffee
new file mode 100644
index 00000000..1c3f8e38
--- /dev/null
+++ b/app/src/main/assets/js/notif_msg.coffee
@@ -0,0 +1,22 @@
+# binds callbacks to an invisible webview to take in the search events
+finished = false
+x = new MutationObserver((mutations) ->
+ _f_thread = document.querySelector("#threadlist_rows")
+ if !_f_thread
+ return
+ console.log "Found message threads #{_f_thread.outerHTML}"
+ Frost?.handleHtml _f_thread.outerHTML
+ finished = true
+ x.disconnect()
+ return
+)
+x.observe document,
+ childList: true
+ subtree: true
+setTimeout (->
+ if !finished
+ finished = true
+ console.log "Message thread timeout cancellation"
+ Frost?.handleHtml ""
+ return
+), 20000
diff --git a/app/src/main/assets/js/notif_msg.js b/app/src/main/assets/js/notif_msg.js
index 83405f39..134ad4f0 100644
--- a/app/src/main/assets/js/notif_msg.js
+++ b/app/src/main/assets/js/notif_msg.js
@@ -1,25 +1,37 @@
-//binds callbacks to an invisible webview to take in the search events
-if (!window.hasOwnProperty('frost_notif_msg')) {
- console.log('Registering frost_notif_msg');
- window.frost_notif_msg = true;
- var finished = false;
- var x = new MutationObserver(function(mutations) {
- var _f_thread = document.querySelector('#threadlist_rows');
- if (!_f_thread) return;
- console.log('Found message threads', _f_thread.outerHTML);
- if (typeof Frost !== 'undefined') Frost.handleHtml(_f_thread.outerHTML);
+"use strict";
+
+(function () {
+ // binds callbacks to an invisible webview to take in the search events
+ var finished, x;
+
+ finished = false;
+
+ x = new MutationObserver(function (mutations) {
+ var _f_thread;
+ _f_thread = document.querySelector("#threadlist_rows");
+ if (!_f_thread) {
+ return;
+ }
+ console.log("Found message threads " + _f_thread.outerHTML);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.handleHtml(_f_thread.outerHTML);
+ }
finished = true;
x.disconnect();
});
+
x.observe(document, {
childList: true,
subtree: true
});
- setTimeout(function() {
+
+ setTimeout(function () {
if (!finished) {
finished = true;
- console.log('Message thread timeout cancellation')
- if (typeof Frost !== 'undefined') Frost.handleHtml("");
+ console.log("Message thread timeout cancellation");
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.handleHtml("");
+ }
}
}, 20000);
-}
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/notif_msg.min.js b/app/src/main/assets/js/notif_msg.min.js
deleted file mode 100644
index cb965d02..00000000
--- a/app/src/main/assets/js/notif_msg.min.js
+++ /dev/null
@@ -1,17 +0,0 @@
-if(!window.hasOwnProperty("frost_notif_msg")){
-console.log("Registering frost_notif_msg"),
-window.frost_notif_msg=!0
-;var finished=!1,x=new MutationObserver(function(e){
-var o=document.querySelector("#threadlist_rows")
-;o&&(console.log("Found message threads",o.outerHTML),
-"undefined"!=typeof Frost&&Frost.handleHtml(o.outerHTML),
-finished=!0,x.disconnect())
-})
-;x.observe(document,{
-childList:!0,
-subtree:!0
-}),setTimeout(function(){
-finished||(finished=!0,console.log("Message thread timeout cancellation"),
-"undefined"!=typeof Frost&&Frost.handleHtml(""))
-},2e4)
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/search.js b/app/src/main/assets/js/search.js
deleted file mode 100644
index 0a8954ef..00000000
--- a/app/src/main/assets/js/search.js
+++ /dev/null
@@ -1,19 +0,0 @@
-//binds callbacks to an invisible webview to take in the search events
-if (!window.hasOwnProperty('frost_search')) {
- console.log('Registering frost_search');
- window.frost_search = true;
- var _f_page = document.querySelector('#page');
- // var _f_input = document.querySelector('#main-search-input')
- if (!_f_page) Frost.emit(1);
- else {
- Frost.emit(0);
- var x = new MutationObserver(function(mutations) {
- Frost.handleHtml(page.innerHTML);
- Frost.emit(2);
- });
- x.observe(_f_page, {
- childList: true,
- subtree: true
- });
- }
-}
diff --git a/app/src/main/assets/js/search.min.js b/app/src/main/assets/js/search.min.js
deleted file mode 100644
index 109bfb13..00000000
--- a/app/src/main/assets/js/search.min.js
+++ /dev/null
@@ -1,15 +0,0 @@
-if(!window.hasOwnProperty("frost_search")){
-console.log("Registering frost_search"),
-window.frost_search=!0
-;var _f_page=document.querySelector("#page")
-;if(_f_page){
-Frost.emit(0)
-;var x=new MutationObserver(function(e){
-Frost.handleHtml(page.innerHTML),Frost.emit(2)
-})
-;x.observe(_f_page,{
-childList:!0,
-subtree:!0
-})
-}else Frost.emit(1)
-} \ No newline at end of file
diff --git a/app/src/main/assets/js/search_query.js b/app/src/main/assets/js/search_query.js
deleted file mode 100644
index 806519de..00000000
--- a/app/src/main/assets/js/search_query.js
+++ /dev/null
@@ -1,10 +0,0 @@
-var e = document.getElementById('main-search-input');
-if (e) {
- e.value = '$input';
- var n = new Event('input', {
- bubbles: !0,
- cancelable: !0
- });
- e.dispatchEvent(n);
- e.dispatchEvent(new Event('focus'));
-} else console.log('Input field not found')
diff --git a/app/src/main/assets/js/textarea_listener.coffee b/app/src/main/assets/js/textarea_listener.coffee
new file mode 100644
index 00000000..950f663e
--- /dev/null
+++ b/app/src/main/assets/js/textarea_listener.coffee
@@ -0,0 +1,22 @@
+# focus listener for textareas
+# since swipe to refresh is quite sensitive, we will disable it
+# when we detect a user typing
+# note that this extends passed having a keyboard opened,
+# as a user may still be reviewing his/her post
+# swiping should automatically be reset on refresh
+
+_frostFocus = (e) ->
+ element = e.target or e.srcElement
+ console.log "Frost focus", element.tagName
+ if element.tagName == "TEXTAREA"
+ Frost?.disableSwipeRefresh true
+ return
+
+_frostBlur = (e) ->
+ element = e.target or e.srcElement
+ console.log "Frost blur", element.tagName
+ Frost?.disableSwipeRefresh false
+ return
+
+document.addEventListener "focus", _frostFocus, true
+document.addEventListener "blur", _frostBlur, true
diff --git a/app/src/main/assets/js/textarea_listener.js b/app/src/main/assets/js/textarea_listener.js
index e6951411..41d77159 100644
--- a/app/src/main/assets/js/textarea_listener.js
+++ b/app/src/main/assets/js/textarea_listener.js
@@ -1,27 +1,35 @@
-//focus listener for textareas
-//since swipe to refresh is quite sensitive, we will disable it
-//when we detect a user typing
-//note that this extends passed having a keyboard opened,
-//as a user may still be reviewing his/her post
-//swiping should automatically be reset on refresh
-if (!window.hasOwnProperty('frost_textarea_listener')) {
- console.log('Registering frost_textarea_listener');
- window.frost_textarea_listener = true;
+"use strict";
- var _frostFocus = function(e) {
- var element = e.target || e.srcElement;
- console.log('Frost focus', element.tagName);
- if (element.tagName === 'TEXTAREA')
- if (typeof Frost !== 'undefined') Frost.disableSwipeRefresh(true);
- }
+(function () {
+ // focus listener for textareas
+ // since swipe to refresh is quite sensitive, we will disable it
+ // when we detect a user typing
+ // note that this extends passed having a keyboard opened,
+ // as a user may still be reviewing his/her post
+ // swiping should automatically be reset on refresh
+ var _frostBlur, _frostFocus;
- var _frostBlur = function(e) {
- var element = e.target || e.srcElement;
- console.log('Frost blur', element.tagName);
- if (typeof Frost !== 'undefined') Frost.disableSwipeRefresh(false);
- }
+ _frostFocus = function _frostFocus(e) {
+ var element;
+ element = e.target || e.srcElement;
+ console.log("Frost focus", element.tagName);
+ if (element.tagName === "TEXTAREA") {
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.disableSwipeRefresh(true);
+ }
+ }
+ };
- document.addEventListener('focus', _frostFocus, true);
- document.addEventListener('blur', _frostBlur, true);
+ _frostBlur = function _frostBlur(e) {
+ var element;
+ element = e.target || e.srcElement;
+ console.log("Frost blur", element.tagName);
+ if (typeof Frost !== "undefined" && Frost !== null) {
+ Frost.disableSwipeRefresh(false);
+ }
+ };
-}
+ document.addEventListener("focus", _frostFocus, true);
+
+ document.addEventListener("blur", _frostBlur, true);
+}).call(undefined); \ No newline at end of file
diff --git a/app/src/main/assets/js/textarea_listener.min.js b/app/src/main/assets/js/textarea_listener.min.js
deleted file mode 100644
index 44ae9ceb..00000000
--- a/app/src/main/assets/js/textarea_listener.min.js
+++ /dev/null
@@ -1,12 +0,0 @@
-if(!window.hasOwnProperty("frost_textarea_listener")){
-console.log("Registering frost_textarea_listener"),
-window.frost_textarea_listener=!0
-;var _frostFocus=function(e){
-var t=e.target||e.srcElement
-;console.log("Frost focus",t.tagName),"TEXTAREA"===t.tagName&&"undefined"!=typeof Frost&&Frost.disableSwipeRefresh(!0)
-},_frostBlur=function(e){
-var t=e.target||e.srcElement
-;console.log("Frost blur",t.tagName),"undefined"!=typeof Frost&&Frost.disableSwipeRefresh(!1)
-}
-;document.addEventListener("focus",_frostFocus,!0),document.addEventListener("blur",_frostBlur,!0)
-} \ No newline at end of file
diff --git a/app/src/main/assets/package-lock.json b/app/src/main/assets/package-lock.json
new file mode 100644
index 00000000..9bea5fd3
--- /dev/null
+++ b/app/src/main/assets/package-lock.json
@@ -0,0 +1,986 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "babel-code-frame": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+ "dev": true,
+ "requires": {
+ "chalk": "1.1.3",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "babel-core": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz",
+ "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-generator": "6.26.0",
+ "babel-helpers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-register": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "convert-source-map": "1.5.1",
+ "debug": "2.6.9",
+ "json5": "0.5.1",
+ "lodash": "4.17.4",
+ "minimatch": "3.0.4",
+ "path-is-absolute": "1.0.1",
+ "private": "0.1.8",
+ "slash": "1.0.0",
+ "source-map": "0.5.7"
+ }
+ },
+ "babel-generator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
+ "dev": true,
+ "requires": {
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "detect-indent": "4.0.0",
+ "jsesc": "1.3.0",
+ "lodash": "4.17.4",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ }
+ },
+ "babel-helper-builder-binary-assignment-operator-visitor": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
+ "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=",
+ "dev": true,
+ "requires": {
+ "babel-helper-explode-assignable-expression": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-call-delegate": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",
+ "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-define-map": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",
+ "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-explode-assignable-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz",
+ "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
+ "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",
+ "dev": true,
+ "requires": {
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-get-function-arity": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",
+ "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-hoist-variables": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",
+ "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-optimise-call-expression": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",
+ "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-regex": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz",
+ "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-helper-remap-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helper-replace-supers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",
+ "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-helpers": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",
+ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-messages": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",
+ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-check-es2015-constants": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",
+ "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-syntax-async-functions": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz",
+ "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
+ "dev": true
+ },
+ "babel-plugin-syntax-exponentiation-operator": {
+ "version": "6.13.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
+ "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
+ "dev": true
+ },
+ "babel-plugin-syntax-trailing-function-commas": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
+ "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
+ "dev": true
+ },
+ "babel-plugin-transform-async-to-generator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
+ "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=",
+ "dev": true,
+ "requires": {
+ "babel-helper-remap-async-to-generator": "6.24.1",
+ "babel-plugin-syntax-async-functions": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-arrow-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
+ "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoped-functions": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",
+ "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-block-scoping": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",
+ "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-plugin-transform-es2015-classes": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",
+ "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",
+ "dev": true,
+ "requires": {
+ "babel-helper-define-map": "6.26.0",
+ "babel-helper-function-name": "6.24.1",
+ "babel-helper-optimise-call-expression": "6.24.1",
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-computed-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",
+ "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-destructuring": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",
+ "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-duplicate-keys": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz",
+ "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-for-of": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",
+ "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-function-name": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",
+ "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",
+ "dev": true,
+ "requires": {
+ "babel-helper-function-name": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",
+ "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-amd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz",
+ "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-commonjs": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz",
+ "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-strict-mode": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-systemjs": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz",
+ "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=",
+ "dev": true,
+ "requires": {
+ "babel-helper-hoist-variables": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-modules-umd": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz",
+ "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=",
+ "dev": true,
+ "requires": {
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-object-super": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",
+ "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",
+ "dev": true,
+ "requires": {
+ "babel-helper-replace-supers": "6.24.1",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-parameters": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",
+ "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",
+ "dev": true,
+ "requires": {
+ "babel-helper-call-delegate": "6.24.1",
+ "babel-helper-get-function-arity": "6.24.1",
+ "babel-runtime": "6.26.0",
+ "babel-template": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-shorthand-properties": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",
+ "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-spread": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",
+ "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-sticky-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz",
+ "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-template-literals": {
+ "version": "6.22.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",
+ "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-typeof-symbol": {
+ "version": "6.23.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz",
+ "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-es2015-unicode-regex": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz",
+ "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=",
+ "dev": true,
+ "requires": {
+ "babel-helper-regex": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "regexpu-core": "2.0.0"
+ }
+ },
+ "babel-plugin-transform-exponentiation-operator": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz",
+ "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=",
+ "dev": true,
+ "requires": {
+ "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1",
+ "babel-plugin-syntax-exponentiation-operator": "6.13.0",
+ "babel-runtime": "6.26.0"
+ }
+ },
+ "babel-plugin-transform-regenerator": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
+ "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=",
+ "dev": true,
+ "requires": {
+ "regenerator-transform": "0.10.1"
+ }
+ },
+ "babel-plugin-transform-strict-mode": {
+ "version": "6.24.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
+ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0"
+ }
+ },
+ "babel-preset-env": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz",
+ "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-check-es2015-constants": "6.22.0",
+ "babel-plugin-syntax-trailing-function-commas": "6.22.0",
+ "babel-plugin-transform-async-to-generator": "6.24.1",
+ "babel-plugin-transform-es2015-arrow-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
+ "babel-plugin-transform-es2015-block-scoping": "6.26.0",
+ "babel-plugin-transform-es2015-classes": "6.24.1",
+ "babel-plugin-transform-es2015-computed-properties": "6.24.1",
+ "babel-plugin-transform-es2015-destructuring": "6.23.0",
+ "babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
+ "babel-plugin-transform-es2015-for-of": "6.23.0",
+ "babel-plugin-transform-es2015-function-name": "6.24.1",
+ "babel-plugin-transform-es2015-literals": "6.22.0",
+ "babel-plugin-transform-es2015-modules-amd": "6.24.1",
+ "babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
+ "babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
+ "babel-plugin-transform-es2015-modules-umd": "6.24.1",
+ "babel-plugin-transform-es2015-object-super": "6.24.1",
+ "babel-plugin-transform-es2015-parameters": "6.24.1",
+ "babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
+ "babel-plugin-transform-es2015-spread": "6.22.0",
+ "babel-plugin-transform-es2015-sticky-regex": "6.24.1",
+ "babel-plugin-transform-es2015-template-literals": "6.22.0",
+ "babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
+ "babel-plugin-transform-es2015-unicode-regex": "6.24.1",
+ "babel-plugin-transform-exponentiation-operator": "6.24.1",
+ "babel-plugin-transform-regenerator": "6.26.0",
+ "browserslist": "2.10.0",
+ "invariant": "2.2.2",
+ "semver": "5.4.1"
+ }
+ },
+ "babel-register": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
+ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
+ "dev": true,
+ "requires": {
+ "babel-core": "6.26.0",
+ "babel-runtime": "6.26.0",
+ "core-js": "2.5.2",
+ "home-or-tmp": "2.0.0",
+ "lodash": "4.17.4",
+ "mkdirp": "0.5.1",
+ "source-map-support": "0.4.18"
+ }
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.5.2",
+ "regenerator-runtime": "0.11.1"
+ }
+ },
+ "babel-template": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",
+ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-traverse": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-traverse": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",
+ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
+ "dev": true,
+ "requires": {
+ "babel-code-frame": "6.26.0",
+ "babel-messages": "6.23.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "babylon": "6.18.0",
+ "debug": "2.6.9",
+ "globals": "9.18.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.4"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "dev": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz",
+ "integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==",
+ "dev": true,
+ "requires": {
+ "caniuse-lite": "1.0.30000782",
+ "electron-to-chromium": "1.3.28"
+ }
+ },
+ "caniuse-lite": {
+ "version": "1.0.30000782",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000782.tgz",
+ "integrity": "sha1-W4K4w4XyU0h0XEccpRMgr7G38lQ=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "2.2.1",
+ "escape-string-regexp": "1.0.5",
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz",
+ "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=",
+ "dev": true
+ },
+ "core-js": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.2.tgz",
+ "integrity": "sha1-vEZIZW59ydyA19PHu8Fy2W50TmM=",
+ "dev": true
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "detect-indent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",
+ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
+ "dev": true,
+ "requires": {
+ "repeating": "2.0.1"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.28",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz",
+ "integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "globals": {
+ "version": "9.18.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
+ "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
+ "dev": true
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "home-or-tmp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
+ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
+ "dev": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "invariant": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz",
+ "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.3.1"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
+ "dev": true
+ },
+ "jsesc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
+ "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
+ "dev": true
+ },
+ "json5": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
+ "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+ "dev": true
+ },
+ "lodash": {
+ "version": "4.17.4",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz",
+ "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=",
+ "dev": true
+ },
+ "loose-envify": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz",
+ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=",
+ "dev": true,
+ "requires": {
+ "js-tokens": "3.0.2"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "1.1.8"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
+ "dev": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
+ "dev": true
+ },
+ "private": {
+ "version": "0.1.8",
+ "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
+ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "dev": true
+ },
+ "regenerate": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz",
+ "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==",
+ "dev": true
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
+ "dev": true
+ },
+ "regenerator-transform": {
+ "version": "0.10.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz",
+ "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
+ "private": "0.1.8"
+ }
+ },
+ "regexpu-core": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz",
+ "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=",
+ "dev": true,
+ "requires": {
+ "regenerate": "1.3.3",
+ "regjsgen": "0.2.0",
+ "regjsparser": "0.1.5"
+ }
+ },
+ "regjsgen": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz",
+ "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz",
+ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=",
+ "dev": true,
+ "requires": {
+ "jsesc": "0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
+ "dev": true
+ }
+ }
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "1.0.2"
+ }
+ },
+ "semver": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz",
+ "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==",
+ "dev": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",
+ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",
+ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
+ "dev": true,
+ "requires": {
+ "source-map": "0.5.7"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ }
+ }
+}
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAssets.kt b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAssets.kt
index 3155b11a..d9542cba 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAssets.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/CssAssets.kt
@@ -2,6 +2,7 @@ package com.pitchedapps.frost.injectors
import android.graphics.Color
import android.webkit.WebView
+import ca.allanwang.kau.kotlin.lazyContext
import ca.allanwang.kau.utils.*
import com.pitchedapps.frost.utils.L
import com.pitchedapps.frost.utils.Prefs
@@ -17,42 +18,41 @@ enum class CssAssets(val folder: String = "themes") : InjectorContract {
MATERIAL_LIGHT, MATERIAL_DARK, MATERIAL_AMOLED, MATERIAL_GLASS, CUSTOM, ROUND_ICONS("components")
;
- var file = "${name.toLowerCase(Locale.CANADA)}.compact.css"
- var injector: JsInjector? = null
-
- override fun inject(webView: WebView, callback: ((String) -> Unit)?) {
- if (injector == null) {
- try {
- var content = webView.context.assets.open("css/$folder/$file").bufferedReader().use { it.readText() }
- if (this == CUSTOM) {
- val bt: String
- if (Color.alpha(Prefs.bgColor) == 255) {
- bt = Prefs.bgColor.toRgbaString()
- } else {
- bt = "transparent"
- }
- content = content
- .replace("\$T\$", Prefs.textColor.toRgbaString())
- .replace("\$TT\$", Prefs.textColor.colorToBackground(0.05f).toRgbaString())
- .replace("\$A\$", Prefs.accentColor.toRgbaString())
- .replace("\$B\$", Prefs.bgColor.toRgbaString())
- .replace("\$BT\$", bt)
- .replace("\$BBT\$", Prefs.bgColor.withAlpha(51).colorToForeground(0.35f).toRgbaString())
- .replace("\$O\$", Prefs.bgColor.withAlpha(255).toRgbaString())
- .replace("\$OO\$", Prefs.bgColor.withAlpha(255).colorToForeground(0.35f).toRgbaString())
- .replace("\$D\$", Prefs.textColor.adjustAlpha(0.3f).toRgbaString())
+ var file = "${name.toLowerCase(Locale.CANADA)}.css"
+ var injector = lazyContext {
+ try {
+ var content = it.assets.open("css/$folder/$file").bufferedReader().use { it.readText() }
+ if (this == CUSTOM) {
+ val bt: String
+ if (Color.alpha(Prefs.bgColor) == 255) {
+ bt = Prefs.bgColor.toRgbaString()
+ } else {
+ bt = "transparent"
}
- injector = JsBuilder().css(content).build()
- } catch (e: FileNotFoundException) {
- L.e(e, "CssAssets file not found")
- injector = JsInjector(JsActions.EMPTY.function)
+ content = content
+ .replace("\$T\$", Prefs.textColor.toRgbaString())
+ .replace("\$TT\$", Prefs.textColor.colorToBackground(0.05f).toRgbaString())
+ .replace("\$A\$", Prefs.accentColor.toRgbaString())
+ .replace("\$B\$", Prefs.bgColor.toRgbaString())
+ .replace("\$BT\$", bt)
+ .replace("\$BBT\$", Prefs.bgColor.withAlpha(51).colorToForeground(0.35f).toRgbaString())
+ .replace("\$O\$", Prefs.bgColor.withAlpha(255).toRgbaString())
+ .replace("\$OO\$", Prefs.bgColor.withAlpha(255).colorToForeground(0.35f).toRgbaString())
+ .replace("\$D\$", Prefs.textColor.adjustAlpha(0.3f).toRgbaString())
}
+ JsBuilder().css(content).build()
+ } catch (e: FileNotFoundException) {
+ L.e(e, "CssAssets file not found")
+ JsInjector(JsActions.EMPTY.function)
}
- injector!!.inject(webView, callback)
+ }
+
+ override fun inject(webView: WebView, callback: ((String) -> Unit)?) {
+ injector(webView.context).inject(webView, callback)
}
fun reset() {
- injector = null
+ injector.invalidate()
}
}
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 8e30346b..0e46225c 100644
--- a/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
+++ b/app/src/main/kotlin/com/pitchedapps/frost/injectors/JsAssets.kt
@@ -1,6 +1,7 @@
package com.pitchedapps.frost.injectors
import android.webkit.WebView
+import ca.allanwang.kau.kotlin.lazyContext
import com.pitchedapps.frost.utils.L
import java.io.FileNotFoundException
import java.util.*
@@ -11,22 +12,30 @@ import java.util.*
* The enum name must match the css file name
*/
enum class JsAssets : InjectorContract {
- MENU, MENU_DEBUG, CLICK_A, CONTEXT_A, MEDIA, HEADER_BADGES, SEARCH, TEXTAREA_LISTENER, NOTIF_MSG
+ MENU, MENU_DEBUG, CLICK_A, CONTEXT_A, MEDIA, HEADER_BADGES, TEXTAREA_LISTENER, NOTIF_MSG
;
- var file = "${name.toLowerCase(Locale.CANADA)}.min.js"
- var injector: JsInjector? = null
+ var file = "${name.toLowerCase(Locale.CANADA)}.js"
+ var injector = lazyContext {
+ try {
+ val content = it.assets.open("js/$file").bufferedReader().use { it.readText() }
+ JsBuilder().js(singleInjector(content)).build()
+ } catch (e: FileNotFoundException) {
+ L.e(e, "JsAssets file not found")
+ JsInjector(JsActions.EMPTY.function)
+ }
+ }
override fun inject(webView: WebView, callback: ((String) -> Unit)?) {
- if (injector == null) {
- try {
- val content = webView.context.assets.open("js/$file").bufferedReader().use { it.readText() }
- injector = JsBuilder().js(content).build()
- } catch (e: FileNotFoundException) {
- L.e(e, "JsAssets file not found")
- injector = JsInjector(JsActions.EMPTY.function)
- }
- }
- injector!!.inject(webView, callback)
+ 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()
}