about summary refs log tree commit diff stats
path: root/src/config/config.nim
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-12-26 18:19:52 +0100
committerbptato <nincsnevem662@gmail.com>2024-12-26 22:11:13 +0100
commitaaa94080ca9e80fd71c3baf40b028139961c3a49 (patch)
tree615e2e1a02f9390150a7f1649e20ab5a5392fb6b /src/config/config.nim
parent4a98e7940971dc7d8ff36907ee37f0aad6d7cb38 (diff)
downloadchawan-aaa94080ca9e80fd71c3baf40b028139961c3a49.tar.gz
buffer: add "app" scripting mode
For APIs that cannot be implemented in a privacy-friendly manner.
As a start, I've added accurate screen size queries; getComputedStyle,
getBoundingClientRect, etc. should follow.  (We have a harmless
getComputedStyle already, but it's broken.)

Probably, things like JS-based scroll belong in here too, but I'm not
sure yet.  (Perhaps autofocus should be reused instead?)
Diffstat (limited to 'src/config/config.nim')
-rw-r--r--src/config/config.nim18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/config/config.nim b/src/config/config.nim
index a197853b..f992657f 100644
--- a/src/config/config.nim
+++ b/src/config/config.nim
@@ -9,6 +9,7 @@ import config/mailcap
 import config/mimetypes
 import config/toml
 import config/urimethodmap
+import html/script
 import io/dynstream
 import monoucha/fromjs
 import monoucha/javascript
@@ -63,7 +64,7 @@ type
     third_party_cookie*: seq[Regex]
     share_cookie_jar*: Option[string]
     referer_from*: Option[bool]
-    scripting*: Option[bool]
+    scripting*: Option[ScriptingMode]
     document_charset*: seq[Charset]
     images*: Option[bool]
     styling*: Option[bool]
@@ -159,7 +160,7 @@ type
 
   BufferSectionConfig* = object
     styling* {.jsgetset.}: bool
-    scripting* {.jsgetset.}: bool
+    scripting* {.jsgetset.}: ScriptingMode
     images* {.jsgetset.}: bool
     cookie* {.jsgetset.}: bool
     referer_from* {.jsgetset.}: bool
@@ -330,6 +331,8 @@ proc parseConfigValue(ctx: var ConfigParser; x: var int64; v: TomlValue;
   k: string)
 proc parseConfigValue(ctx: var ConfigParser; x: var ColorMode; v: TomlValue;
   k: string)
+proc parseConfigValue(ctx: var ConfigParser; x: var ScriptingMode; v: TomlValue;
+  k: string)
 proc parseConfigValue[T](ctx: var ConfigParser; x: var Option[T]; v: TomlValue;
   k: string)
 proc parseConfigValue(ctx: var ConfigParser; x: var ARGBColor; v: TomlValue;
@@ -483,6 +486,17 @@ proc parseConfigValue(ctx: var ConfigParser; x: var ColorMode; v: TomlValue;
     raise newException(ValueError, "unknown color mode '" & v.s &
       "' for key " & k)
 
+proc parseConfigValue(ctx: var ConfigParser; x: var ScriptingMode; v: TomlValue;
+    k: string) =
+  typeCheck(v, {tvtString, tvtBoolean}, k)
+  if v.t == tvtBoolean:
+    x = if v.b: smTrue else: smFalse
+  elif v.s == "app":
+    x = smApp
+  else:
+    raise newException(ValueError, "unknown scripting mode '" & v.s &
+      "' for key " & k)
+
 proc parseConfigValue(ctx: var ConfigParser; x: var ARGBColor; v: TomlValue;
     k: string) =
   typeCheck(v, tvtString, k)