summaryrefslogtreecommitdiff
path: root/elm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2022-06-15 11:10:39 +0200
committerYorhel <git@yorhel.nl>2022-06-15 11:10:39 +0200
commit53ea1351acf6f3e3762a3a42bdd624a5de6e1407 (patch)
tree70972db4d00c165caa91a7476bf49399a2ac8201 /elm
parent99c79e7bee627be2c24ae99482df61bf94944c00 (diff)
User.Edit: Add live preview when changing skin selection
Diffstat (limited to 'elm')
-rw-r--r--elm/User/Edit.elm9
-rw-r--r--elm/User/Edit.js7
2 files changed, 14 insertions, 2 deletions
diff --git a/elm/User/Edit.elm b/elm/User/Edit.elm
index dfc85049..bcdeb6fd 100644
--- a/elm/User/Edit.elm
+++ b/elm/User/Edit.elm
@@ -1,4 +1,4 @@
-module User.Edit exposing (main)
+port module User.Edit exposing (main)
import Bitwise exposing (..)
import Set
@@ -28,6 +28,8 @@ main = Browser.element
, subscriptions = always Sub.none
}
+port skinChange : String -> Cmd msg
+
type Tab = Profile | Preferences
type alias PassData =
@@ -242,7 +244,10 @@ update msg model =
({ model | tab = t, invalidDis = True }, Task.attempt (always InvalidEnable) (Ffi.elemCall "reportValidity" "mainform" |> Task.andThen (\_ -> Process.sleep 100)))
InvalidEnable -> ({ model | invalidDis = False }, Cmd.none)
Admin m -> ({ model | admin = Maybe.map (updateAdmin m) model.admin }, Cmd.none)
- Prefs m -> ({ model | prefs = Maybe.map (updatePrefs m) model.prefs }, Cmd.none)
+ Prefs m ->
+ let np = Maybe.map (updatePrefs m) model.prefs
+ s = Maybe.map (\x -> x.skin) >> Maybe.withDefault ""
+ in ({ model | prefs = np }, if (s np) /= (s model.prefs) then skinChange (s np) else Cmd.none)
Pass m -> ({ model | pass = Maybe.map (updatePass m) model.pass, passNeq = False }, Cmd.none)
Username s -> ({ model | nusername = s }, Cmd.none)
diff --git a/elm/User/Edit.js b/elm/User/Edit.js
new file mode 100644
index 00000000..df5b3d32
--- /dev/null
+++ b/elm/User/Edit.js
@@ -0,0 +1,7 @@
+wrap_elm_init('User.Edit', function(init, opt) {
+ var app = init(opt);
+ app.ports.skinChange.subscribe(function(skin) {
+ var sheet = document.querySelector('link[rel=stylesheet]');
+ sheet.href = sheet.href.replace(/[^\/]+\.css/, skin+'.css');
+ });
+});