-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-- Copyright 2026 Shota FUJI
--
-- This source code and the design it expresses are licensed under
-- the Creative Commons Attribution 4.0 International License.
--
-- SPDX-License-Identifier: CC-BY-4.0
module Models.PWS01.Template exposing (template)
import Length exposing (toMM)
import Models.PWS01.Parameters exposing (LoopStyle(..), Parameters, canvasSizeDimension)
import Models.PWS01.Parameters.Key exposing (Key)
import Models.PWS01.Template.Cuts exposing (cuts)
import Models.PWS01.Template.InfoArea exposing (infoArea)
import String
import Svg exposing (..)
import Svg.Attributes exposing (..)
import Svg.Path exposing (LargeArcFlag(..), PathCommand(..), PointMode(..), SweepFlag(..))
import Template.Layout as Layout
import Template.Layout.Container as Container
import Template.Layout.Coordinate exposing (Request(..))
import Url exposing (Url)
template : Url -> Parameters -> Maybe Key -> List (Svg.Attribute msg) -> Svg.Svg msg
template url params highlighting attrs =
let
( canvasWidth, canvasHeight ) =
canvasSizeDimension params.rendering.size
|> Tuple.mapBoth toMM toMM
margin =
toMM params.rendering.margin
in
svg
(viewBox (String.join " " [ "0", "0", String.fromInt (ceiling canvasWidth), String.fromInt (ceiling canvasHeight) ])
:: class "print"
:: attrs
)
[ Container.rows
|> Container.sized (AtLeast 0) (AtLeast 0)
|> Container.gapped 10
|> Container.aligned Container.Center
|> Container.padded margin
|> Container.build
[ cuts params highlighting
, infoArea url params
]
|> Layout.render { width = canvasWidth, height = canvasHeight }
]