@@ -16,16 +16,17 @@ type alias Model =
1616
1717
1818type Msg
19− = Noop
20− | TogglePasswordVisiblity
19+ = TogglePasswordVisiblity
2120 | ToggleCVVVisiblity
21+ | Copy String
22+ | Open String
2223
2324
24−type alias Callbacks =
25− {}
25+type alias Callbacks msg =
26+ { copy : String -> msg, open : String -> msg }
2627
2728
28−page : Callbacks -> Page Bridge.Sub_LoadCipher Model Msg emsg
29+page : Callbacks emsg -> Page Bridge.Sub_LoadCipher Model Msg emsg
2930page callbacks liftMsg =
3031 { init = \cipher -> Tuple.mapSecond (Cmd.map liftMsg) (init cipher)
3132 , view = \model -> view model |> List.map (Html.map liftMsg)
@@ -45,18 +46,21 @@ init cipher =
4546 )
4647
4748
48−update : Callbacks -> (Msg -> emsg) -> Msg -> Model -> ( Result String Model, Cmd emsg )
49−update {} _ msg model =
49+update : Callbacks emsg -> (Msg -> emsg) -> Msg -> Model -> ( Result String Model, Cmd emsg )
50+update { copy, open } _ msg model =
5051 case msg of
51− Noop ->
52− ( Ok model, Cmd.none )
53−
5452 TogglePasswordVisiblity ->
5553 ( Ok { model | passwordHidden = not model.passwordHidden }, Cmd.none )
5654
5755 ToggleCVVVisiblity ->
5856 ( Ok { model | cvvHidden = not model.cvvHidden }, Cmd.none )
5957
58+ Copy text ->
59+ ( Ok model, copy text |> pureCmd )
60+
61+ Open uri ->
62+ ( Ok model, open uri |> pureCmd )
63+
6064
6165subscriptions : Model -> Sub Msg
6266subscriptions _ =
@@ -80,7 +84,7 @@ view { passwordHidden, cipher, cvvHidden } =
8084 maybeList username
8185 (\x ->
8286 row
83− { name = "Username", value = x, nameIcon = "user", icons = [ ( "copy", Noop ) ] }
87+ { name = "Username", value = x, nameIcon = "user", icons = [ ( "copy", Copy x ) ] }
8488 )
8589 ++ maybeList password
8690 (\x ->
@@ -93,14 +97,14 @@ view { passwordHidden, cipher, cvvHidden } =
9397 else
9498 x
9599 , nameIcon = "security"
96− , icons = [ ( hiddenButtonIcon passwordHidden, TogglePasswordVisiblity ), ( "copy", Noop ) ]
100+ , icons = [ ( hiddenButtonIcon passwordHidden, TogglePasswordVisiblity ), ( "copy", Copy x ) ]
97101 }
98102 )
99103 ++ (uris
100104 |> List.map
101105 (\uri ->
102106 row
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 ) ] }
104108 )
105109 )
106110
@@ -109,14 +113,19 @@ view { passwordHidden, cipher, cvvHidden } =
109113 ]
110114
111115 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 ) ] })
113117 ++ optional (expMonth /= Nothing || expYear /= Nothing)
114118 (row
115− { name = "Expiration date"
116− , value = [ expMonth, expYear ] |> List.concatMap (flip maybeList identity) |> String.join "/"
117− , nameIcon = "timed-out"
118− , icons = [ ( "copy", Noop ) ]
119− }
119+ (let
120+ x =
121+ [ expMonth, expYear ] |> List.concatMap (flip maybeList identity) |> String.join "/"
122+ in
123+ { name = "Expiration date"
124+ , value = x
125+ , nameIcon = "timed-out"
126+ , icons = [ ( "copy", Copy x ) ]
127+ }
128+ )
120129 )
121130 ++ maybeList code
122131 (\x ->
@@ -129,20 +138,25 @@ view { passwordHidden, cipher, cvvHidden } =
129138 else
130139 x
131140 , nameIcon = "security"
132− , icons = [ ( hiddenButtonIcon cvvHidden, ToggleCVVVisiblity ), ( "copy", Noop ) ]
141+ , icons = [ ( hiddenButtonIcon cvvHidden, ToggleCVVVisiblity ), ( "copy", Copy x ) ]
133142 }
134143 )
135144 ++ 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 ) ] })
137146
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 } ->
139148 optional (firstName /= Nothing || middleName /= Nothing || lastName /= Nothing)
140149 (row
141− { name = "Name"
142− , value = [ firstName, middleName, lastName ] |> List.concatMap (flip maybeList identity) |> unwords
143− , nameIcon = ""
144− , icons = [ ( "copy", Noop ) ]
145− }
150+ (let
151+ x =
152+ [ firstName, middleName, lastName ] |> List.concatMap (flip maybeList identity) |> unwords
153+ in
154+ { name = "Name"
155+ , value = x
156+ , nameIcon = ""
157+ , icons = [ ( "copy", Copy x ) ]
158+ }
159+ )
146160 )
147161 ++ maybeList username
148162 (\x ->
@@ -150,7 +164,7 @@ view { passwordHidden, cipher, cvvHidden } =
150164 { name = "Username"
151165 , value = x
152166 , nameIcon = ""
153− , icons = [ ( "copy", Noop ) ]
167+ , icons = [ ( "copy", Copy x ) ]
154168 }
155169 )
156170 ++ maybeList company
@@ -159,7 +173,7 @@ view { passwordHidden, cipher, cvvHidden } =
159173 { name = "Company"
160174 , value = x
161175 , nameIcon = ""
162− , icons = [ ( "copy", Noop ) ]
176+ , icons = [ ( "copy", Copy x ) ]
163177 }
164178 )
165179 ++ maybeList ssn
@@ -168,7 +182,7 @@ view { passwordHidden, cipher, cvvHidden } =
168182 { name = "Socia security number"
169183 , value = x
170184 , nameIcon = ""
171− , icons = [ ( "copy", Noop ) ]
185+ , icons = [ ( "copy", Copy x ) ]
172186 }
173187 )
174188 ++ maybeList passportNumber
@@ -177,7 +191,7 @@ view { passwordHidden, cipher, cvvHidden } =
177191 { name = "Passport number"
178192 , value = x
179193 , nameIcon = ""
180− , icons = [ ( "copy", Noop ) ]
194+ , icons = [ ( "copy", Copy x ) ]
181195 }
182196 )
183197 ++ maybeList licenseNumber
@@ -186,7 +200,7 @@ view { passwordHidden, cipher, cvvHidden } =
186200 { name = "License Number"
187201 , value = x
188202 , nameIcon = ""
189− , icons = [ ( "copy", Noop ) ]
203+ , icons = [ ( "copy", Copy x ) ]
190204 }
191205 )
192206 ++ maybeList email
@@ -195,7 +209,7 @@ view { passwordHidden, cipher, cvvHidden } =
195209 { name = "Email"
196210 , value = x
197211 , nameIcon = ""
198− , icons = [ ( "copy", Noop ) ]
212+ , icons = [ ( "copy", Copy x ) ]
199213 }
200214 )
201215 ++ maybeList phone
@@ -204,16 +218,21 @@ view { passwordHidden, cipher, cvvHidden } =
204218 { name = "Phone number"
205219 , value = x
206220 , nameIcon = ""
207− , icons = [ ( "copy", Noop ) ]
221+ , icons = [ ( "copy", Copy x ) ]
208222 }
209223 )
210224 ++ optional (address1 /= Nothing || address2 /= Nothing || address3 /= Nothing)
211225 (row
212− { name = "Address"
213− , value = [ address1, address2, address3 ] |> List.concatMap (flip maybeList identity) |> unwords
214− , nameIcon = ""
215− , icons = [ ( "copy", Noop ) ]
216− }
226+ (let
227+ x =
228+ [ address1, address2, address3 ] |> List.concatMap (flip maybeList identity) |> unwords
229+ in
230+ { name = "Address"
231+ , value = x
232+ , nameIcon = ""
233+ , icons = [ ( "copy", Copy x ) ]
234+ }
235+ )
217236 )
218237 )
219238 |> List.intersperse (hr [] [])