@@ -16,16 +16,17 @@ type alias Model =
20− | TogglePasswordVisiblity
19+ = TogglePasswordVisiblity
21 | ToggleCVVVisiblity
20 | ToggleCVVVisiblity
24−type alias Callbacks =
25+type alias Callbacks msg =
25− {}
26+ { copy : String -> msg, open : String -> msg }
28−page : Callbacks -> Page Bridge.Sub_LoadCipher Model Msg emsg
29+page : Callbacks emsg -> Page Bridge.Sub_LoadCipher Model Msg emsg
29page callbacks liftMsg =
30page callbacks liftMsg =
30 { init = \cipher -> Tuple.mapSecond (Cmd.map liftMsg) (init cipher)
31 { init = \cipher -> Tuple.mapSecond (Cmd.map liftMsg) (init cipher)
31 , view = \model -> view model |> List.map (Html.map liftMsg)
32 , view = \model -> view model |> List.map (Html.map liftMsg)
@@ -45,18 +46,21 @@ init cipher =
48−update : Callbacks -> (Msg -> emsg) -> Msg -> Model -> ( Result String Model, Cmd emsg )
49+update : Callbacks emsg -> (Msg -> emsg) -> Msg -> Model -> ( Result String Model, Cmd emsg )
49−update {} _ msg model =
50+update { copy, open } _ msg model =
50 case msg of
51 case msg of
52− ( Ok model, Cmd.none )
54 TogglePasswordVisiblity ->
52 TogglePasswordVisiblity ->
55 ( Ok { model | passwordHidden = not model.passwordHidden }, Cmd.none )
53 ( Ok { model | passwordHidden = not model.passwordHidden }, Cmd.none )
57 ToggleCVVVisiblity ->
55 ToggleCVVVisiblity ->
58 ( Ok { model | cvvHidden = not model.cvvHidden }, Cmd.none )
56 ( Ok { model | cvvHidden = not model.cvvHidden }, Cmd.none )
59+ ( Ok model, copy text |> pureCmd )
62+ ( Ok model, open uri |> pureCmd )
61subscriptions : Model -> Sub Msg
65subscriptions : Model -> Sub Msg
62subscriptions _ =
66subscriptions _ =
@@ -80,7 +84,7 @@ view { passwordHidden, cipher, cvvHidden } =
80 maybeList username
84 maybeList username
83− { name = "Username", value = x, nameIcon = "user", icons = [ ( "copy", Noop ) ] }
87+ { name = "Username", value = x, nameIcon = "user", icons = [ ( "copy", Copy x ) ] }
85 ++ maybeList password
89 ++ maybeList password
@@ -93,14 +97,14 @@ view { passwordHidden, cipher, cvvHidden } =
95 , nameIcon = "security"
99 , nameIcon = "security"
96− , icons = [ ( hiddenButtonIcon passwordHidden, TogglePasswordVisiblity ), ( "copy", Noop ) ]
100+ , icons = [ ( hiddenButtonIcon passwordHidden, TogglePasswordVisiblity ), ( "copy", Copy x ) ]
100 |> List.map
104 |> List.map
103− { name = "URL", value = uri, nameIcon = "get-link", icons = [ ( "external-link", Noop ), ( "copy", Noop ) ] }
107+ { name = "URL", value = uri, nameIcon = "get-link", icons = [ ( "external-link", Open uri ), ( "copy", Copy uri ) ] }
@@ -109,14 +113,19 @@ view { passwordHidden, cipher, cvvHidden } =
111 Bridge.CardCipher { number, code, cardholderName, expMonth, expYear } ->
115 Bridge.CardCipher { number, code, cardholderName, expMonth, expYear } ->
112− maybeList number (\x -> row { name = "Card number", value = x, nameIcon = "containers", icons = [ ( "copy", Noop ) ] })
116+ maybeList number (\x -> row { name = "Card number", value = x, nameIcon = "containers", icons = [ ( "copy", Copy x ) ] })
113 ++ optional (expMonth /= Nothing || expYear /= Nothing)
117 ++ optional (expMonth /= Nothing || expYear /= Nothing)
115− { name = "Expiration date"
119+ (let
116− , value = [ expMonth, expYear ] |> List.concatMap (flip maybeList identity) |> String.join "/"
121+ [ expMonth, expYear ] |> List.concatMap (flip maybeList identity) |> String.join "/"
123+ { name = "Expiration date"
117− , nameIcon = "timed-out"
125+ , nameIcon = "timed-out"
118− , icons = [ ( "copy", Noop ) ]
126+ , icons = [ ( "copy", Copy x ) ]
121 ++ maybeList code
130 ++ maybeList code
@@ -129,20 +138,25 @@ view { passwordHidden, cipher, cvvHidden } =
131 , nameIcon = "security"
140 , nameIcon = "security"
132− , icons = [ ( hiddenButtonIcon cvvHidden, ToggleCVVVisiblity ), ( "copy", Noop ) ]
141+ , icons = [ ( hiddenButtonIcon cvvHidden, ToggleCVVVisiblity ), ( "copy", Copy x ) ]
135 ++ maybeList cardholderName
144 ++ maybeList cardholderName
136− (\x -> row { name = "Cardholder name", value = x, nameIcon = "user", icons = [ ( "copy", Noop ) ] })
145+ (\x -> row { name = "Cardholder name", value = x, nameIcon = "user", icons = [ ( "copy", Copy x ) ] })
138− Bridge.IdentityCipher { address1, address2, address3, city, company, country, email, firstName, lastName, licenseNumber, middleName, passportNumber, phone, postalCode, ssn, state, title, username } ->
147+ Bridge.IdentityCipher { address1, address2, address3, company, email, firstName, lastName, licenseNumber, middleName, passportNumber, phone, ssn, username } ->
139 optional (firstName /= Nothing || middleName /= Nothing || lastName /= Nothing)
148 optional (firstName /= Nothing || middleName /= Nothing || lastName /= Nothing)
141− { name = "Name"
150+ (let
142− , value = [ firstName, middleName, lastName ] |> List.concatMap (flip maybeList identity) |> unwords
152+ [ firstName, middleName, lastName ] |> List.concatMap (flip maybeList identity) |> unwords
143− , nameIcon = ""
156+ , nameIcon = ""
144− , icons = [ ( "copy", Noop ) ]
157+ , icons = [ ( "copy", Copy x ) ]
147 ++ maybeList username
161 ++ maybeList username
@@ -150,7 +164,7 @@ view { passwordHidden, cipher, cvvHidden } =
150 { name = "Username"
164 { name = "Username"
151 , value = x
165 , value = x
152 , nameIcon = ""
166 , nameIcon = ""
153− , icons = [ ( "copy", Noop ) ]
167+ , icons = [ ( "copy", Copy x ) ]
156 ++ maybeList company
170 ++ maybeList company
@@ -159,7 +173,7 @@ view { passwordHidden, cipher, cvvHidden } =
159 { name = "Company"
173 { name = "Company"
160 , value = x
174 , value = x
161 , nameIcon = ""
175 , nameIcon = ""
162− , icons = [ ( "copy", Noop ) ]
176+ , icons = [ ( "copy", Copy x ) ]
165 ++ maybeList ssn
179 ++ maybeList ssn
@@ -168,7 +182,7 @@ view { passwordHidden, cipher, cvvHidden } =
168 { name = "Socia security number"
182 { name = "Socia security number"
169 , value = x
183 , value = x
170 , nameIcon = ""
184 , nameIcon = ""
171− , icons = [ ( "copy", Noop ) ]
185+ , icons = [ ( "copy", Copy x ) ]
174 ++ maybeList passportNumber
188 ++ maybeList passportNumber
@@ -177,7 +191,7 @@ view { passwordHidden, cipher, cvvHidden } =
177 { name = "Passport number"
191 { name = "Passport number"
178 , value = x
192 , value = x
179 , nameIcon = ""
193 , nameIcon = ""
180− , icons = [ ( "copy", Noop ) ]
194+ , icons = [ ( "copy", Copy x ) ]
183 ++ maybeList licenseNumber
197 ++ maybeList licenseNumber
@@ -186,7 +200,7 @@ view { passwordHidden, cipher, cvvHidden } =
186 { name = "License Number"
200 { name = "License Number"
187 , value = x
201 , value = x
188 , nameIcon = ""
202 , nameIcon = ""
189− , icons = [ ( "copy", Noop ) ]
203+ , icons = [ ( "copy", Copy x ) ]
192 ++ maybeList email
206 ++ maybeList email
@@ -195,7 +209,7 @@ view { passwordHidden, cipher, cvvHidden } =
195 { name = "Email"
209 { name = "Email"
196 , value = x
210 , value = x
197 , nameIcon = ""
211 , nameIcon = ""
198− , icons = [ ( "copy", Noop ) ]
212+ , icons = [ ( "copy", Copy x ) ]
201 ++ maybeList phone
215 ++ maybeList phone
@@ -204,16 +218,21 @@ view { passwordHidden, cipher, cvvHidden } =
204 { name = "Phone number"
218 { name = "Phone number"
205 , value = x
219 , value = x
206 , nameIcon = ""
220 , nameIcon = ""
207− , icons = [ ( "copy", Noop ) ]
221+ , icons = [ ( "copy", Copy x ) ]
210 ++ optional (address1 /= Nothing || address2 /= Nothing || address3 /= Nothing)
224 ++ optional (address1 /= Nothing || address2 /= Nothing || address3 /= Nothing)
212− { name = "Address"
226+ (let
213− , value = [ address1, address2, address3 ] |> List.concatMap (flip maybeList identity) |> unwords
228+ [ address1, address2, address3 ] |> List.concatMap (flip maybeList identity) |> unwords
214− , nameIcon = ""
232+ , nameIcon = ""
215− , icons = [ ( "copy", Noop ) ]
233+ , icons = [ ( "copy", Copy x ) ]
219 |> List.intersperse (hr [] [])
238 |> List.intersperse (hr [] [])