mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-23 10:58:26 +00:00
103 lines
2.4 KiB
Elm
103 lines
2.4 KiB
Elm
{-
|
|
Copyright 2020 Eike K. & Contributors
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-or-later
|
|
-}
|
|
|
|
|
|
module Comp.UrlCopy exposing (..)
|
|
|
|
import Comp.Basic as B
|
|
import Html exposing (..)
|
|
import Html.Attributes exposing (..)
|
|
import Html.Events exposing (onClick)
|
|
import Ports
|
|
import QRCode
|
|
import Styles as S
|
|
import Svg.Attributes as SvgA
|
|
|
|
|
|
type Msg
|
|
= Print String
|
|
|
|
|
|
update : Msg -> Cmd msg
|
|
update msg =
|
|
case msg of
|
|
Print id ->
|
|
Ports.printElement id
|
|
|
|
|
|
initCopy : String -> Cmd msg
|
|
initCopy data =
|
|
Ports.initClipboard <| clipboardData data
|
|
|
|
|
|
clipboardData : String -> ( String, String )
|
|
clipboardData data =
|
|
( "share-url", "#button-share-url" )
|
|
|
|
|
|
view : String -> Html Msg
|
|
view data =
|
|
let
|
|
( elementId, buttonId ) =
|
|
clipboardData data
|
|
|
|
btnId =
|
|
String.dropLeft 1 buttonId
|
|
|
|
printId =
|
|
"print-qr-code"
|
|
in
|
|
div [ class "flex flex-col items-center" ]
|
|
[ div
|
|
[ class S.border
|
|
, class S.qrCode
|
|
, id printId
|
|
]
|
|
[ qrCodeView data
|
|
]
|
|
, div
|
|
[ class "flex w-64"
|
|
]
|
|
[ p
|
|
[ id elementId
|
|
, class "font-mono text-xs py-2 mx-auto break-all"
|
|
]
|
|
[ text data
|
|
]
|
|
]
|
|
, div [ class "flex flex-row mt-1 space-x-2 items-center w-full" ]
|
|
[ B.primaryButton
|
|
{ label = "Copy"
|
|
, icon = "fa fa-copy"
|
|
, handler = href "#"
|
|
, disabled = False
|
|
, attrs =
|
|
[ id btnId
|
|
, class "flex flex-grow items-center justify-center"
|
|
, attribute "data-clipboard-target" ("#" ++ elementId)
|
|
]
|
|
}
|
|
, B.primaryButton
|
|
{ label = "Print"
|
|
, icon = "fa fa-print"
|
|
, handler = onClick (Print printId)
|
|
, disabled = False
|
|
, attrs =
|
|
[ href "#"
|
|
, class "flex flex-grow items-center justify-center"
|
|
]
|
|
}
|
|
]
|
|
]
|
|
|
|
|
|
qrCodeView : String -> Html msg
|
|
qrCodeView message =
|
|
QRCode.fromString message
|
|
|> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ])
|
|
|> Result.withDefault
|
|
(text "Error generating QR code")
|