summaryrefslogtreecommitdiff
path: root/src/Main
diff options
context:
space:
mode:
Diffstat (limited to 'src/Main')
-rw-r--r--src/Main/API.purs10
-rw-r--r--src/Main/Auth.purs46
-rw-r--r--src/Main/Button.purs29
-rw-r--r--src/Main/Extension.purs19
-rw-r--r--src/Main/Greencircle.purs11
-rw-r--r--src/Main/Menu.purs22
-rw-r--r--src/Main/OBS.purs11
-rw-r--r--src/Main/Pubnix.purs52
-rw-r--r--src/Main/Register.purs45
9 files changed, 245 insertions, 0 deletions
diff --git a/src/Main/API.purs b/src/Main/API.purs
new file mode 100644
index 0000000..f47c7d6
--- /dev/null
+++ b/src/Main/API.purs
@@ -0,0 +1,10 @@
+module Main.API where
+
+import Control.Monad (pure)
+import Data.Unit (Unit, unit)
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+
+main :: Effect Unit
+main = launchAff_ do
+ pure unit
diff --git a/src/Main/Auth.purs b/src/Main/Auth.purs
new file mode 100644
index 0000000..04fe6e1
--- /dev/null
+++ b/src/Main/Auth.purs
@@ -0,0 +1,46 @@
+module Main.Auth where
+
+import Prelude
+
+import Auth (getQueryRedirect, getResponseRedirect)
+import Data.HTTP.Method (Method(..))
+import Data.Maybe (Maybe(..))
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import Fetch (fetch)
+import UI as UI
+import Utils (byId, getValue, listen, removeClass)
+import Web.Event.Event as Ev
+
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hello from auth"
+ container <- byId "lcolonq-auth-login"
+ removeClass "lcolonq-invisible" container
+ form <- byId "lcolonq-auth-form"
+ listen form "submit" \ev -> launchAff_ do
+ liftEffect $ Ev.preventDefault ev
+ usernameInp <- byId "lcolonq-auth-username"
+ passwordInp <- byId "lcolonq-auth-password"
+ username <- getValue usernameInp
+ password <- getValue passwordInp
+ rd <- getQueryRedirect
+ { json: resp } <- fetch "/api/firstfactor"
+ { method: POST
+ , headers: { "Content-Type": "application/json" }
+ , body: UI.toJSON
+ { username
+ , password
+ , targetURL: case rd of
+ Just r -> r
+ Nothing -> "https://secure.colonq.computer"
+ }
+ }
+ res <- resp
+ getResponseRedirect res >>= case _ of
+ Nothing -> do
+ err <- byId "lcolonq-auth-error"
+ removeClass "lcolonq-invisible" err
+ Just r -> UI.redirect r
diff --git a/src/Main/Button.purs b/src/Main/Button.purs
new file mode 100644
index 0000000..e05a0d8
--- /dev/null
+++ b/src/Main/Button.purs
@@ -0,0 +1,29 @@
+module Main.Button where
+
+import Prelude
+
+import Config as Config
+import Data.HTTP.Method (Method(..))
+import Effect (Effect)
+import Effect.Aff (Aff, launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import Fetch (fetch)
+import Utils (byId, listen)
+
+buttonPress :: String -> Aff Unit
+buttonPress b = do
+ void $ fetch (Config.apiServer <> "/sentiment/" <> b)
+ { method: POST
+ }
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hello from button"
+ green <- byId "lcolonq-button-link-green"
+ listen green "click" \_ev -> do
+ liftEffect $ log "+2"
+ launchAff_ $ buttonPress "green"
+ red <- byId "lcolonq-button-link-red"
+ listen red "click" \_ev -> do
+ liftEffect $ log "-2"
+ launchAff_ $ buttonPress "red"
diff --git a/src/Main/Extension.purs b/src/Main/Extension.purs
new file mode 100644
index 0000000..7a3bfd5
--- /dev/null
+++ b/src/Main/Extension.purs
@@ -0,0 +1,19 @@
+module Main.Extension where
+
+import Prelude
+
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import UI as UI
+import Utils (appendElement, appendText, create, query)
+
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hello from extension"
+ UI.setInterval 1000.0 do
+ e <- query ".chat-scrollable-area__message-container"
+ new <- create "div" [".chat-line__message"] []
+ appendText new "test"
+ appendElement e new
diff --git a/src/Main/Greencircle.purs b/src/Main/Greencircle.purs
new file mode 100644
index 0000000..17f3e0c
--- /dev/null
+++ b/src/Main/Greencircle.purs
@@ -0,0 +1,11 @@
+module Main.Greencircle where
+
+import Prelude
+
+import Effect (Effect)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+
+main :: Effect Unit
+main = do
+ liftEffect $ log "hello it is greencircle"
diff --git a/src/Main/Menu.purs b/src/Main/Menu.purs
new file mode 100644
index 0000000..58364b6
--- /dev/null
+++ b/src/Main/Menu.purs
@@ -0,0 +1,22 @@
+module Main.Menu where
+
+import Prelude
+
+import Data.Foldable (for_)
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import UI as UI
+import Utils (listen, queryAll)
+import Web.Event.Event as Ev
+
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hello from menu"
+ textareas <- queryAll "textarea"
+ for_ textareas \ta -> listen ta "click" Ev.stopPropagation
+ boxes <- queryAll ".lcolonq-menu-box"
+ for_ boxes \box -> do
+ listen box "click" \_ev -> do
+ UI.submitRedeem box
diff --git a/src/Main/OBS.purs b/src/Main/OBS.purs
new file mode 100644
index 0000000..4cd679f
--- /dev/null
+++ b/src/Main/OBS.purs
@@ -0,0 +1,11 @@
+module Main.OBS where
+
+import Prelude
+
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+import Model (startModel)
+
+main :: Effect Unit
+main = launchAff_ do
+ startModel
diff --git a/src/Main/Pubnix.purs b/src/Main/Pubnix.purs
new file mode 100644
index 0000000..6d0fb1a
--- /dev/null
+++ b/src/Main/Pubnix.purs
@@ -0,0 +1,52 @@
+module Main.Pubnix where
+
+import Prelude
+
+import Audio as Audio
+import Auth (getToken)
+import Config as Config
+import Data.Array as Array
+import Data.Foldable (for_)
+import Data.Maybe (Maybe(..))
+import Data.Tuple (Tuple(..))
+import Effect (Effect)
+import Effect.Aff (Aff, launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import Fetch (fetch)
+import Model (startModel)
+import Utils (byId, checkAuth, listen, setText)
+
+updateSubtitle :: Aff Unit
+updateSubtitle = do
+ subtitle <- byId "lcolonq-pubnix-index-subtitle"
+ { text: catchphrase } <- fetch (Config.apiServer <> "/catchphrase") {}
+ catchphrase >>= setText subtitle
+
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hi"
+ startModel
+ marq <- byId "lcolonq-pubnix-index-marquee"
+ { text: motd } <- fetch (Config.apiServer <> "/motd") {}
+ motd >>= setText marq
+
+ getToken >>= case _ of
+ Just a@(Tuple t n) -> do
+ liftEffect $ log t
+ liftEffect $ log n
+ checkAuth a >>= log >>> liftEffect
+ _ -> pure unit
+
+ updateSubtitle
+ subtitle <- byId "lcolonq-pubnix-index-subtitle"
+ listen subtitle "click" \_ev -> do
+ -- startTwitchAuth
+ launchAff_ updateSubtitle
+
+ for_ (Array.range 0 6) \i -> do
+ letter <- byId $ "lcolonq-pubnix-index-letter-" <> show i
+ listen letter "click" \_ev -> do
+ Audio.playVoice true i
+ listen letter "mouseover" \_ev -> do
+ Audio.playVoice false i
diff --git a/src/Main/Register.purs b/src/Main/Register.purs
new file mode 100644
index 0000000..3741107
--- /dev/null
+++ b/src/Main/Register.purs
@@ -0,0 +1,45 @@
+module Main.Register where
+
+import Prelude
+
+import Auth (authHeader, getToken, startTwitchAuth)
+import Config as Config
+import Data.Maybe (Maybe(..))
+import Data.String as String
+import Data.Tuple (Tuple(..))
+import Effect (Effect)
+import Effect.Aff (launchAff_)
+import Effect.Class (liftEffect)
+import Effect.Console (log)
+import Fetch (fetch)
+import Utils (byId, listen, removeClass, setText)
+
+main :: Effect Unit
+main = launchAff_ do
+ liftEffect $ log "hello from registration page"
+ link <- byId "lcolonq-register-link"
+ getToken >>= case _ of
+ Just a@(Tuple _t _n) -> do -- if there's an auth token in the fragment, ask the API to register us
+ { text: resp } <- fetch (Config.apiServer <> "/register")
+ { headers:
+ { "Authorization": authHeader a
+ }
+ }
+ r <- resp
+ case String.split (String.Pattern " ") r of
+ [user, pass] -> do
+ container <- byId "lcolonq-registered-container"
+ removeClass "lcolonq-invisible" container
+ fieldUsername <- byId "lcolonq-registered-username"
+ setText fieldUsername user
+ fieldPassword <- byId "lcolonq-registered-password"
+ setText fieldPassword pass
+ _ -> do
+ container <- byId "lcolonq-register-error-container"
+ removeClass "lcolonq-invisible" container
+ _ -> do -- otherwise, show the button to register
+ container <- byId "lcolonq-register-container"
+ removeClass "lcolonq-invisible" container
+ listen link "click" \_ev -> do
+ liftEffect $ log "register"
+ startTwitchAuth