Components: form, grid, inputs, table
authorTomas Zeman <tzeman@volny.cz>
Thu, 14 Dec 2017 15:32:50 +0100
changeset 9 ee8565f13df7
parent 8 d1da6ba32afa
child 10 f4bf01584928
Components: form, grid, inputs, table
shared/src/main/scala/purecss/generic/Component.scala
shared/src/main/scala/purecss/generic/PureButtons.scala
shared/src/main/scala/purecss/generic/PureCssGeneric.scala
shared/src/main/scala/purecss/generic/PureForm.scala
shared/src/main/scala/purecss/generic/PureGrid.scala
shared/src/main/scala/purecss/generic/PureInputs.scala
shared/src/main/scala/purecss/generic/PureTable.scala
--- a/shared/src/main/scala/purecss/generic/Component.scala	Thu Dec 14 14:48:43 2017 +0100
+++ b/shared/src/main/scala/purecss/generic/Component.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -28,4 +28,10 @@
   implicit def cls2mod(v: C): Modifier = v()
 
   protected def pc(c: String): C = PureCls(c)
+
+  trait Element {
+    def toCls: C
+    def & (next: C): C = toCls & next
+    def & (next: String): C = toCls & next
+  }
 }
--- a/shared/src/main/scala/purecss/generic/PureButtons.scala	Thu Dec 14 14:48:43 2017 +0100
+++ b/shared/src/main/scala/purecss/generic/PureButtons.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -36,7 +36,7 @@
   implicit def btn2mod(b: Button): Modifier = b.toCls.apply()
 
   case class Button(role: Option[C] = None, state: Option[C] = None,
-    level: Option[C] = None, size: Option[C] = None) {
+    level: Option[C] = None, size: Option[C] = None) extends Element {
     type B = Button
 
     def primary: B = copy(role = Some(pure_button_primary))
@@ -55,8 +55,6 @@
     def toCls: C =
       pure_button.copy(chain = (role ++ state ++ level ++ size) toList)
 
-    def & (next: C): C = toCls & next
-    def & (next: String): C = toCls & next
   }
 
 }
--- a/shared/src/main/scala/purecss/generic/PureCssGeneric.scala	Thu Dec 14 14:48:43 2017 +0100
+++ b/shared/src/main/scala/purecss/generic/PureCssGeneric.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -20,126 +20,24 @@
 
 class PureCssGeneric[Builder, Output <: FragT, FragT](
   bun: Bundle[Builder, Output, FragT]) extends
+  PureGrid[Builder, Output, FragT] with
+  PureInputs[Builder, Output, FragT] with
   PureButtons[Builder, Output, FragT] with
+  PureTable[Builder, Output, FragT] with
+  PureForm[Builder, Output, FragT] with
   PureAlerts[Builder, Output, FragT] {
 
   implicit val bundle: Bundle[Builder, Output, FragT] = bun
 
-  // grid
-  val pure_g: C = pc("pure-g")
-  val pure_u_1: C = pc("pure-u-1")
-
-  // 5ths-based
-  val pure_u_1_5: C = pc("pure-u-1-5")
-  val pure_u_2_5: C = pc("pure-u-2-5")
-  val pure_u_3_5: C = pc("pure-u-3-5")
-  val pure_u_4_5: C = pc("pure-u-4-5")
-
-  // 24ths-based
-  val pure_u_1_24: C = pc("pure-u-1-24")
-  val pure_u_1_12: C = pc("pure-u-1-12")
-  val pure_u_2_24: C = pc("pure-u-2-24")
-  val pure_u_3_24: C = pc("pure-u-3-24")
-  val pure_u_1_8: C = pc("pure-u-1-8")
-  val pure_u_4_24: C = pc("pure-u-4-24")
-  val pure_u_1_6: C = pc("pure-u-1-6")
-  val pure_u_5_24: C = pc("pure-u-5-24")
-  val pure_u_1_4: C = pc("pure-u-1-4")
-  val pure_u_6_24: C = pc("pure-u-6-24")
-  val pure_u_7_24: C = pc("pure-u-7-24")
-  val pure_u_1_3: C = pc("pure-u-1-3")
-  val pure_u_8_24: C = pc("pure-u-8-24")
-  val pure_u_3_8: C = pc("pure-u-3-8")
-  val pure_u_9_24: C = pc("pure-u-9-24")
-  val pure_u_5_12: C = pc("pure-u-5-12")
-  val pure_u_10_24: C = pc("pure-u-10-24")
-  val pure_u_11_24: C = pc("pure-u-11-24")
-  val pure_u_1_2: C = pc("pure-u-1-2")
-  val pure_u_13_24: C = pc("pure-u-13-24")
-  val pure_u_7_12: C = pc("pure-u-7-12")
-  val pure_u_14_24: C = pc("pure-u-14-24")
-  val pure_u_5_8: C = pc("pure-u-5-8")
-  val pure_u_15_24: C = pc("pure-u-15-24")
-  val pure_u_2_3: C = pc("pure-u-2-3")
-  val pure_u_16_24: C = pc("pure-u-16-24")
-  val pure_u_17_24: C = pc("pure-u-17-24")
-  val pure_u_3_4: C = pc("pure-u-3-4")
-  val pure_u_18_24: C = pc("pure-u-18-24")
-  val pure_u_19_24: C = pc("pure-u-19-24")
-  val pure_u_5_6: C = pc("pure-u-5-6")
-  val pure_u_20_24: C = pc("pure-u-20-24")
-  val pure_u_7_8: C = pc("pure-u-7-8")
-  val pure_u_21_24: C = pc("pure-u-21-24")
-  val pure_u_11_12: C = pc("pure-u-11-12")
-  val pure_u_22_24: C = pc("pure-u-22-24")
-  val pure_u_23_24: C = pc("pure-u-23-24")
+  object pure extends PureGrid with PureInput {
+    val button = Button()
+    val table = Table()
+    val img: C = pc("pure-img")
+    val form = Form()
+  }
 
   // generic
   val pull_right: C = pc("pull-right")
-  val pure_img: C = pc("pure-img")
-
-  // tables
-  val pure_table: C = pc("pure-table")
-  val pure_table_bordered: C = pc("pure-table-bordered")
-  val pure_table_horizontal: C = pc("pure-table-horizontal")
-  val pure_table_striped: C = pc("pure-table-striped")
-
-  // alerts
-
-  // forms
-  val pure_form: C = pc("pure-form")
-  val pure_form_stacked: C = pc("pure-form-stacked")
-  val pure_form_aligned: C = pc("pure-form-aligned")
-  val pure_group: C = pc("pure-group")
-
-  // inputs
-  val pure_input_1: C = pc("pure-input-1")
-  val pure_input_1_5: C = pc("pure-input-1-5")
-  val pure_input_2_5: C = pc("pure-input-2-5")
-  val pure_input_3_5: C = pc("pure-input-3-5")
-  val pure_input_4_5: C = pc("pure-input-4-5")
-  val pure_input_1_24: C = pc("pure-input-1-24")
-  val pure_input_1_12: C = pc("pure-input-1-12")
-  val pure_input_2_24: C = pc("pure-input-2-24")
-  val pure_input_3_24: C = pc("pure-input-3-24")
-  val pure_input_1_8: C = pc("pure-input-1-8")
-  val pure_input_4_24: C = pc("pure-input-4-24")
-  val pure_input_1_6: C = pc("pure-input-1-6")
-  val pure_input_5_24: C = pc("pure-input-5-24")
-  val pure_input_1_4: C = pc("pure-input-1-4")
-  val pure_input_6_24: C = pc("pure-input-6-24")
-  val pure_input_7_24: C = pc("pure-input-7-24")
-  val pure_input_1_3: C = pc("pure-input-1-3")
-  val pure_input_8_24: C = pc("pure-input-8-24")
-  val pure_input_3_8: C = pc("pure-input-3-8")
-  val pure_input_9_24: C = pc("pure-input-9-24")
-  val pure_input_5_12: C = pc("pure-input-5-12")
-  val pure_input_10_24: C = pc("pure-input-10-24")
-  val pure_input_11_24: C = pc("pure-input-11-24")
-  val pure_input_1_2: C = pc("pure-input-1-2")
-  val pure_input_13_24: C = pc("pure-input-13-24")
-  val pure_input_7_12: C = pc("pure-input-7-12")
-  val pure_input_14_24: C = pc("pure-input-14-24")
-  val pure_input_5_8: C = pc("pure-input-5-8")
-  val pure_input_15_24: C = pc("pure-input-15-24")
-  val pure_input_2_3: C = pc("pure-input-2-3")
-  val pure_input_16_24: C = pc("pure-input-16-24")
-  val pure_input_17_24: C = pc("pure-input-17-24")
-  val pure_input_3_4: C = pc("pure-input-3-4")
-  val pure_input_18_24: C = pc("pure-input-18-24")
-  val pure_input_19_24: C = pc("pure-input-19-24")
-  val pure_input_5_6: C = pc("pure-input-5-6")
-  val pure_input_20_24: C = pc("pure-input-20-24")
-  val pure_input_7_8: C = pc("pure-input-7-8")
-  val pure_input_21_24: C = pc("pure-input-21-24")
-  val pure_input_11_12: C = pc("pure-input-11-12")
-  val pure_input_22_24: C = pc("pure-input-22-24")
-  val pure_input_23_24: C = pc("pure-input-23-24")
-  val pure_input_rounded: C = pc("pure-input-rounded")
-  val pure_checkbox: C = pc("pure-checkbox")
-  val pure_radio: C = pc("pure-radio")
-
-  val pureButton: Button = Button()
 
   // menus
   val pure_menu: C = pc("pure-menu")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/src/main/scala/purecss/generic/PureForm.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2017 Tomas Zeman <tzeman@volny.cz>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package purecss.generic
+
+import scala.language.{implicitConversions, postfixOps}
+
+trait PureForm[B, O <: F, F] extends Component[B, O, F] {
+
+  import bundle.all._
+
+  val pure_form: C = pc("pure-form")
+  val pure_form_stacked: C = pc("pure-form-stacked")
+  val pure_form_aligned: C = pc("pure-form-aligned")
+  val pure_group: C = pc("pure-group")
+  val pure_control_group: C = pc("pure-control-group")
+  val pure_form_message: C = pc("pure-form-message")
+  val pure_form_message_inline: C = pc("pure-form-message-inline")
+
+  implicit def f2cls(f: Form): C = f.toCls
+  implicit def f2mod(f: Form): Modifier = f.toCls.apply()
+
+  case class Form(opt: Option[C] = None) extends Element {
+    def stacked: Form = copy(opt = Some(pure_form_stacked))
+    def aligned: Form = copy(opt = Some(pure_form_aligned))
+    override def toCls: C = pure_form.copy(chain = opt toList)
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/src/main/scala/purecss/generic/PureGrid.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2017 Tomas Zeman <tzeman@volny.cz>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package purecss.generic
+
+trait PureGrid[B, O <: F, F] extends Component[B, O, F] {
+
+  trait PureGrid {
+
+    // grid
+    val g: C = pc("pure-g")
+    val u_1: C = pc("pure-u-1")
+
+    // 5ths-based
+    val u_1_5: C = pc("pure-u-1-5")
+    val u_2_5: C = pc("pure-u-2-5")
+    val u_3_5: C = pc("pure-u-3-5")
+    val u_4_5: C = pc("pure-u-4-5")
+
+    // 24ths-based
+    val u_1_24: C = pc("pure-u-1-24")
+    val u_1_12: C = pc("pure-u-1-12")
+    val u_2_24: C = pc("pure-u-2-24")
+    val u_3_24: C = pc("pure-u-3-24")
+    val u_1_8: C = pc("pure-u-1-8")
+    val u_4_24: C = pc("pure-u-4-24")
+    val u_1_6: C = pc("pure-u-1-6")
+    val u_5_24: C = pc("pure-u-5-24")
+    val u_1_4: C = pc("pure-u-1-4")
+    val u_6_24: C = pc("pure-u-6-24")
+    val u_7_24: C = pc("pure-u-7-24")
+    val u_1_3: C = pc("pure-u-1-3")
+    val u_8_24: C = pc("pure-u-8-24")
+    val u_3_8: C = pc("pure-u-3-8")
+    val u_9_24: C = pc("pure-u-9-24")
+    val u_5_12: C = pc("pure-u-5-12")
+    val u_10_24: C = pc("pure-u-10-24")
+    val u_11_24: C = pc("pure-u-11-24")
+    val u_1_2: C = pc("pure-u-1-2")
+    val u_13_24: C = pc("pure-u-13-24")
+    val u_7_12: C = pc("pure-u-7-12")
+    val u_14_24: C = pc("pure-u-14-24")
+    val u_5_8: C = pc("pure-u-5-8")
+    val u_15_24: C = pc("pure-u-15-24")
+    val u_2_3: C = pc("pure-u-2-3")
+    val u_16_24: C = pc("pure-u-16-24")
+    val u_17_24: C = pc("pure-u-17-24")
+    val u_3_4: C = pc("pure-u-3-4")
+    val u_18_24: C = pc("pure-u-18-24")
+    val u_19_24: C = pc("pure-u-19-24")
+    val u_5_6: C = pc("pure-u-5-6")
+    val u_20_24: C = pc("pure-u-20-24")
+    val u_7_8: C = pc("pure-u-7-8")
+    val u_21_24: C = pc("pure-u-21-24")
+    val u_11_12: C = pc("pure-u-11-12")
+    val u_22_24: C = pc("pure-u-22-24")
+    val u_23_24: C = pc("pure-u-23-24")
+
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/src/main/scala/purecss/generic/PureInputs.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2017 Tomas Zeman <tzeman@volny.cz>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package purecss.generic
+
+trait PureInputs[B, O <: F, F] extends Component[B, O, F] {
+
+  trait PureInput {
+    val input_rounded: C = pc("pure-input-rounded")
+    val input_checkbox: C = pc("pure-checkbox")
+    val input_radio: C = pc("pure-radio")
+
+    val input_1: C = pc("pure-input-1")
+    val input_1_5: C = pc("pure-input-1-5")
+    val input_2_5: C = pc("pure-input-2-5")
+    val input_3_5: C = pc("pure-input-3-5")
+    val input_4_5: C = pc("pure-input-4-5")
+    val input_1_24: C = pc("pure-input-1-24")
+    val input_1_12: C = pc("pure-input-1-12")
+    val input_2_24: C = pc("pure-input-2-24")
+    val input_3_24: C = pc("pure-input-3-24")
+    val input_1_8: C = pc("pure-input-1-8")
+    val input_4_24: C = pc("pure-input-4-24")
+    val input_1_6: C = pc("pure-input-1-6")
+    val input_5_24: C = pc("pure-input-5-24")
+    val input_1_4: C = pc("pure-input-1-4")
+    val input_6_24: C = pc("pure-input-6-24")
+    val input_7_24: C = pc("pure-input-7-24")
+    val input_1_3: C = pc("pure-input-1-3")
+    val input_8_24: C = pc("pure-input-8-24")
+    val input_3_8: C = pc("pure-input-3-8")
+    val input_9_24: C = pc("pure-input-9-24")
+    val input_5_12: C = pc("pure-input-5-12")
+    val input_10_24: C = pc("pure-input-10-24")
+    val input_11_24: C = pc("pure-input-11-24")
+    val input_1_2: C = pc("pure-input-1-2")
+    val input_13_24: C = pc("pure-input-13-24")
+    val input_7_12: C = pc("pure-input-7-12")
+    val input_14_24: C = pc("pure-input-14-24")
+    val input_5_8: C = pc("pure-input-5-8")
+    val input_15_24: C = pc("pure-input-15-24")
+    val input_2_3: C = pc("pure-input-2-3")
+    val input_16_24: C = pc("pure-input-16-24")
+    val input_17_24: C = pc("pure-input-17-24")
+    val input_3_4: C = pc("pure-input-3-4")
+    val input_18_24: C = pc("pure-input-18-24")
+    val input_19_24: C = pc("pure-input-19-24")
+    val input_5_6: C = pc("pure-input-5-6")
+    val input_20_24: C = pc("pure-input-20-24")
+    val input_7_8: C = pc("pure-input-7-8")
+    val input_21_24: C = pc("pure-input-21-24")
+    val input_11_12: C = pc("pure-input-11-12")
+    val input_22_24: C = pc("pure-input-22-24")
+    val input_23_24: C = pc("pure-input-23-24")
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/shared/src/main/scala/purecss/generic/PureTable.scala	Thu Dec 14 15:32:50 2017 +0100
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2017 Tomas Zeman <tzeman@volny.cz>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package purecss.generic
+
+import scala.language.{implicitConversions, postfixOps}
+
+trait PureTable[B, O <: F, F] extends Component[B, O, F] {
+
+  import bundle.all._
+
+  val pure_table: C = pc("pure-table")
+  val pure_table_bordered: C = pc("pure-table-bordered")
+  val pure_table_horizontal: C = pc("pure-table-horizontal")
+  val pure_table_striped: C = pc("pure-table-striped")
+
+  implicit def tbl2cls(t: Table): C = t.toCls
+  implicit def tbl2mod(t: Table): Modifier = t.toCls.apply()
+
+  case class Table(opt: Option[C] = None) extends Element {
+    def bordered: Table = copy(opt = Some(pure_table_bordered))
+    def horizontal: Table = copy(opt = Some(pure_table_horizontal))
+    def striped: Table = copy(opt = Some(pure_table_striped))
+
+    def toCls: C = pure_table.copy(chain = opt toList)
+  }
+}