|
@@ -8,6 +8,7 @@ import Control.Alternative (pure, (*>))
|
|
|
import Control.Bind ((>=>))
|
|
import Control.Bind ((>=>))
|
|
|
import Data.Foldable (traverse_)
|
|
import Data.Foldable (traverse_)
|
|
|
import Data.Function (flip)
|
|
import Data.Function (flip)
|
|
|
|
|
+import Data.Lens (view)
|
|
|
import Data.Maybe (Maybe(..), maybe)
|
|
import Data.Maybe (Maybe(..), maybe)
|
|
|
import Data.Monoid ((<>))
|
|
import Data.Monoid ((<>))
|
|
|
import Data.Newtype (unwrap)
|
|
import Data.Newtype (unwrap)
|
|
@@ -18,9 +19,9 @@ import Effect (Effect)
|
|
|
import Effect.Aff (Aff, launchAff_)
|
|
import Effect.Aff (Aff, launchAff_)
|
|
|
import Effect.Class (liftEffect)
|
|
import Effect.Class (liftEffect)
|
|
|
import Effect.Console (log)
|
|
import Effect.Console (log)
|
|
|
-import JQuery (JQuery, append, create, css, remove, select, setAttr, setText)
|
|
|
|
|
|
|
+import JQuery as J
|
|
|
import Prelude (Unit, bind, ($), discard)
|
|
import Prelude (Unit, bind, ($), discard)
|
|
|
-import PureTabs.Model (BackgroundEvent(..), SidebarEvent(..))
|
|
|
|
|
|
|
+import PureTabs.Model (BackgroundEvent(..), SidebarEvent(..), _tabId)
|
|
|
|
|
|
|
|
main :: Effect Unit
|
|
main :: Effect Unit
|
|
|
main = do
|
|
main = do
|
|
@@ -37,47 +38,60 @@ initSidebar :: Runtime.Port -> WindowId -> Effect Unit
|
|
|
initSidebar port winId = do
|
|
initSidebar port winId = do
|
|
|
log $ "windowId " <> (show winId)
|
|
log $ "windowId " <> (show winId)
|
|
|
Runtime.postMessageJson port $ SbHasWindowId winId
|
|
Runtime.postMessageJson port $ SbHasWindowId winId
|
|
|
- tabsDiv <- select "#tabs"
|
|
|
|
|
|
|
+ tabsDiv <- J.select "#tabs"
|
|
|
_ <- Runtime.onMessageJsonAddListener port $ onMsg tabsDiv
|
|
_ <- Runtime.onMessageJsonAddListener port $ onMsg tabsDiv
|
|
|
pure unit
|
|
pure unit
|
|
|
where
|
|
where
|
|
|
- onMsg :: JQuery -> BackgroundEvent -> Effect Unit
|
|
|
|
|
|
|
+ onMsg :: J.JQuery -> BackgroundEvent -> Effect Unit
|
|
|
onMsg contentDiv event = case event of
|
|
onMsg contentDiv event = case event of
|
|
|
BgTabCreated tab -> do
|
|
BgTabCreated tab -> do
|
|
|
- tabElem <- createTabElement tab
|
|
|
|
|
- append tabElem contentDiv
|
|
|
|
|
|
|
+ tabElem <- createTabElement port tab
|
|
|
|
|
+ J.append tabElem contentDiv
|
|
|
pure unit
|
|
pure unit
|
|
|
BgTabDeleted tabId -> deleteTabElement tabId
|
|
BgTabDeleted tabId -> deleteTabElement tabId
|
|
|
- BgInitialTabList tabs -> traverse_ (createTabElement >=> (flip append) contentDiv) tabs
|
|
|
|
|
|
|
+ BgInitialTabList tabs -> traverse_ (createTabElement port >=> (flip J.append) contentDiv) tabs
|
|
|
BgTabUpdated tid cinfo tab -> updateTabInfo tid cinfo tab
|
|
BgTabUpdated tid cinfo tab -> updateTabInfo tid cinfo tab
|
|
|
_ -> log "received unsupported message type"
|
|
_ -> log "received unsupported message type"
|
|
|
|
|
|
|
|
-createTabElement :: Tab -> Effect JQuery
|
|
|
|
|
-createTabElement tab' = do
|
|
|
|
|
|
|
+createTabElement :: Runtime.Port -> Tab -> Effect J.JQuery
|
|
|
|
|
+createTabElement port tab' = do
|
|
|
let
|
|
let
|
|
|
tab = unwrap tab'
|
|
tab = unwrap tab'
|
|
|
- tabDiv <- create "<div>"
|
|
|
|
|
- setAttr "class" "tab" tabDiv
|
|
|
|
|
- setAttr "id" tab.id tabDiv
|
|
|
|
|
|
|
+ tabDiv <- J.create "<div>"
|
|
|
|
|
+ J.setAttr "class" "tab" tabDiv
|
|
|
|
|
+ J.setAttr "id" tab.id tabDiv
|
|
|
-- favicon
|
|
-- favicon
|
|
|
- faviconDiv <- create "<div class=\"tab-favicon\">"
|
|
|
|
|
|
|
+ faviconDiv <- J.create "<div>"
|
|
|
|
|
+ J.addClass "tab-favicon" faviconDiv
|
|
|
setFaviconUrl tab.favIconUrl faviconDiv
|
|
setFaviconUrl tab.favIconUrl faviconDiv
|
|
|
- append faviconDiv tabDiv
|
|
|
|
|
|
|
+ J.append faviconDiv tabDiv
|
|
|
-- title
|
|
-- title
|
|
|
- tabTitle <- create "<div class=\"tab-title\">"
|
|
|
|
|
- setText tab.title tabTitle
|
|
|
|
|
- append tabTitle tabDiv
|
|
|
|
|
|
|
+ tabTitle <- J.create "<div>"
|
|
|
|
|
+ J.addClass "tab-title" tabTitle
|
|
|
|
|
+ J.setText tab.title tabTitle
|
|
|
|
|
+ J.append tabTitle tabDiv
|
|
|
|
|
+ -- close button
|
|
|
|
|
+ closeButton <- J.create "<div>"
|
|
|
|
|
+ J.addClass "close-button" closeButton
|
|
|
|
|
+ J.setText "×" closeButton
|
|
|
|
|
+ J.append closeButton tabDiv
|
|
|
|
|
+ J.on "click" onCloseClick closeButton
|
|
|
pure tabDiv
|
|
pure tabDiv
|
|
|
|
|
+ where
|
|
|
|
|
+ onCloseClick :: J.JQueryEvent -> J.JQuery -> Effect Unit
|
|
|
|
|
+ onCloseClick event j = Runtime.postMessageJson port $ SbTabDeleted $ view _tabId tab'
|
|
|
|
|
|
|
|
-setFaviconUrl :: Maybe String -> JQuery -> Effect Unit
|
|
|
|
|
|
|
+setFaviconUrl :: Maybe String -> J.JQuery -> Effect Unit
|
|
|
setFaviconUrl Nothing div = pure unit
|
|
setFaviconUrl Nothing div = pure unit
|
|
|
-setFaviconUrl (Just favData) div = css {"background-image": favUrl} div
|
|
|
|
|
- where favUrl = "url(" <> favData <> ")"
|
|
|
|
|
|
|
+
|
|
|
|
|
+setFaviconUrl (Just favData) div = J.css { "background-image": favUrl } div
|
|
|
|
|
+ where
|
|
|
|
|
+ favUrl = "url(" <> favData <> ")"
|
|
|
|
|
|
|
|
deleteTabElement :: TabId -> Effect Unit
|
|
deleteTabElement :: TabId -> Effect Unit
|
|
|
deleteTabElement tabId = do
|
|
deleteTabElement tabId = do
|
|
|
- div <- select ("#" <> show tabId)
|
|
|
|
|
- remove div
|
|
|
|
|
|
|
+ div <- J.select ("#" <> show tabId)
|
|
|
|
|
+ J.remove div
|
|
|
|
|
|
|
|
updateTabInfo :: TabId -> ChangeInfo -> Tab -> Effect Unit
|
|
updateTabInfo :: TabId -> ChangeInfo -> Tab -> Effect Unit
|
|
|
updateTabInfo tid cinfo' tab' = do
|
|
updateTabInfo tid cinfo' tab' = do
|
|
@@ -85,12 +99,11 @@ updateTabInfo tid cinfo' tab' = do
|
|
|
tab = unwrap tab'
|
|
tab = unwrap tab'
|
|
|
|
|
|
|
|
cinfo = unwrap cinfo'
|
|
cinfo = unwrap cinfo'
|
|
|
- tabTitleDiv <- select ("#" <> (show tid) <> " > .tab-title")
|
|
|
|
|
|
|
+ tabTitleDiv <- J.select ("#" <> (show tid) <> " > .tab-title")
|
|
|
let
|
|
let
|
|
|
newTitle = case cinfo.status of
|
|
newTitle = case cinfo.status of
|
|
|
Just "loading" -> Just "Loading ..."
|
|
Just "loading" -> Just "Loading ..."
|
|
|
_ -> Just tab.title
|
|
_ -> Just tab.title
|
|
|
- maybe (pure unit) (\t -> setText t tabTitleDiv) newTitle
|
|
|
|
|
-
|
|
|
|
|
- tabFaviconDiv <- select ("#" <> (show tid) <> " > .tab-favicon")
|
|
|
|
|
|
|
+ maybe (pure unit) (\t -> J.setText t tabTitleDiv) newTitle
|
|
|
|
|
+ tabFaviconDiv <- J.select ("#" <> (show tid) <> " > .tab-favicon")
|
|
|
setFaviconUrl cinfo.favIconUrl tabFaviconDiv
|
|
setFaviconUrl cinfo.favIconUrl tabFaviconDiv
|