64 |
64 |
65 override def sources: Sources = T.sources{ |
65 override def sources: Sources = T.sources{ |
66 super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala) |
66 super.sources() :+ PathRef(millSourcePath / 'shared / 'src / 'main / 'scala) |
67 } |
67 } |
68 |
68 |
|
69 // https://github.com/FortAwesome/Font-Awesome/raw/5.6.3/metadata/icons.json |
|
70 type IcoDef = (String, Set[String]) |
|
71 def parseIcons: Target[List[IcoDef]] = T{ |
|
72 ujson.read(os.read! pwd / "icons.json").obj.map(e => (e._1, e._2.obj("styles").arr.map(_.str).toSet)).toList |
|
73 } |
|
74 |
|
75 private def tpl(d: IcoDef): String = { |
|
76 val sym = d._1 match { |
|
77 //case "clone" => "clone_" |
|
78 case x => x |
|
79 } |
|
80 d._2.map { |
|
81 case "brands" => s""" val `fab-$sym`: T = fab("${d._1}")\n""" |
|
82 case "solid" => s""" val `fas-$sym`: T = fas("${d._1}")\n""" |
|
83 case "regular" => s""" val `far-$sym`: T = far("${d._1}")\n""" |
|
84 }.mkString |
|
85 } |
|
86 |
|
87 override def generatedSources: Sources = T.sources{ |
|
88 val d = T.ctx().dest |
|
89 val icons = parseIcons() |
|
90 write(d / "generated.scala", |
|
91 s""" |
|
92 | package fontawesome.generic |
|
93 | import scalatags.generic._ |
|
94 | class GenericFA[Builder, Output <: FragT, FragT]( |
|
95 | val bun: Bundle[Builder, Output, FragT]) { |
|
96 | |
|
97 | import bun.all._ |
|
98 | |
|
99 | type T = FA[Builder, Output, FragT] |
|
100 | |
|
101 | val faStack: Modifier = cls := "fa-stack fa-lg" |
|
102 | |
|
103 | implicit val bundle: Bundle[Builder, Output, FragT] = bun |
|
104 | implicit def fa2tag(x: T): TypedTag[Builder, Output, FragT] = x() |
|
105 | |
|
106 | private def fab(w: String): T = FA(FaStyle.Brands, w) |
|
107 | private def far(w: String): T = FA(FaStyle.Regular, w) |
|
108 | private def fas(w: String): T = FA(FaStyle.Solid, w) |
|
109 | |
|
110 | ${icons map(tpl) mkString} |
|
111 | |
|
112 | /* |
|
113 | object fab { |
|
114 | private def fa(w: String): T = FA(FaStyle.Brands, w) |
|
115 | {icons.filter(_._2.contains("brands")).map(tpl).mkString} |
|
116 | } |
|
117 | |
|
118 | object fas { |
|
119 | private def fa(w: String): T = FA(FaStyle.Solid, w) |
|
120 | {icons.filter(_._2.contains("solid")).map(tpl).mkString} |
|
121 | } |
|
122 | |
|
123 | object far { |
|
124 | private def fa(w: String): T = FA(FaStyle.Regular, w) |
|
125 | {icons.filter(_._2.contains("regular")).map(tpl).mkString} |
|
126 | } |
|
127 | */ |
|
128 | |
|
129 | } |
|
130 """.stripMargin) |
|
131 d |
|
132 } |
69 } |
133 } |
70 |
134 |
71 class JvmModule(val crossScalaVersion: String) extends Common |
135 class JvmModule(val crossScalaVersion: String) extends Common |
72 class JsModule(val crossScalaVersion: String) extends ScalaJSModule |
136 class JsModule(val crossScalaVersion: String) extends ScalaJSModule |
73 with Common { |
137 with Common { |
83 jvm(V.scala211).publishLocal()() |
147 jvm(V.scala211).publishLocal()() |
84 js(V.scala211).publishLocal()() |
148 js(V.scala211).publishLocal()() |
85 } |
149 } |
86 |
150 |
87 object example extends ScalaModule with ScalaJSModule { |
151 object example extends ScalaModule with ScalaJSModule { |
88 override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala212)) |
|
89 override def scalaVersion: Target[String] = T{V.scala212} |
152 override def scalaVersion: Target[String] = T{V.scala212} |
90 override def scalaJSVersion: Target[String] = V.scalaJs |
153 override def scalaJSVersion: Target[String] = V.scalaJs |
|
154 |
|
155 |
|
156 /* Ugly hack to prevent |
|
157 * "Referring to non-existent method fontawesome.generic.FA... error" |
|
158 */ |
|
159 //override def moduleDeps: Seq[PublishModule] = Seq(js(V.scala212)) |
|
160 override def ivyDeps: Target[Loose.Agg[Dep]] = Agg(D.scalatags) |
|
161 override def sources: Sources = T.sources{super.sources() ++ js(V.scala212).sources()} |
|
162 override def generatedSources = T{js(V.scala212).generatedSources()} |
91 } |
163 } |
92 |
164 |
|
165 |
93 // vim: et ts=2 sw=2 syn=scala |
166 // vim: et ts=2 sw=2 syn=scala |