# HG changeset patch # User Tomas Zeman # Date 1609015589 -3600 # Node ID f30a3e4658368010a979b8eefca6bdd5956d9a3e # Parent 040b435ce0dd8cf093931c83ae0e20656e6785b0 Pure-scala implementation of pure-extras. https://github.com/tilomitra/cssextras diff -r 040b435ce0dd -r f30a3e465836 build.sc --- a/build.sc Sat Dec 26 20:15:08 2020 +0100 +++ b/build.sc Sat Dec 26 21:46:29 2020 +0100 @@ -141,4 +141,25 @@ () } +object extras extends Module { + + class JvmModule(val crossScalaVersion: String) extends Common + class JsModule(val crossScalaVersion: String, crossJSVersion: String) + extends ScalaJSModule with Common { + + override def scalaJSVersion: Target[String] = crossJSVersion + + override def millSourcePath = super.millSourcePath / os.up + } + + object jvm extends Cross[JvmModule](V.scala211, V.scala212, V.scala213) + object js extends Cross[JsModule]( + V.scala211 -> V.scalaJs06, + V.scala212 -> V.scalaJs06, + V.scala212 -> V.scalaJs, + V.scala213 -> V.scalaJs06, + V.scala213 -> V.scalaJs + ) + +} // vim: et ts=2 sw=2 syn=scala diff -r 040b435ce0dd -r f30a3e465836 extras/js/shared --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extras/js/shared Sat Dec 26 21:46:29 2020 +0100 @@ -0,0 +1,1 @@ +../shared \ No newline at end of file diff -r 040b435ce0dd -r f30a3e465836 extras/jvm/shared --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extras/jvm/shared Sat Dec 26 21:46:29 2020 +0100 @@ -0,0 +1,1 @@ +../shared \ No newline at end of file diff -r 040b435ce0dd -r f30a3e465836 extras/shared/src/main/scala/purecss/Extras.scala --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extras/shared/src/main/scala/purecss/Extras.scala Sat Dec 26 21:46:29 2020 +0100 @@ -0,0 +1,238 @@ +/* + * Copyright 2020 Tomas Zeman + * + * 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 + +import scalatags.Text.all._ +import scalatags.stylesheet._ + +import scala.collection.immutable + +/* + * https://github.com/tilomitra/cssextras/blob/master/css/pure-extras.css + */ +object Extras extends CascadingStyleSheet { + initStyleSheet() + + /* Images. */ + val pure_img_elliptical: Cls = cls( + borderRadius:="80%", + img(borderRadius:="50%") + ) + + val pure_img_rounded: Cls = cls( + borderRadius:=3, + img(borderRadius:=3) + ) + + val pure_img_bordered: Cls = cls( + backgroundColor:="#FFFFFF", + border:="1px solid rgba(0, 0, 0, 0.2)", + padding:=5 + ) + + /* Thumbnails */ + val pure_thumbnails: Cls = cls( + li( + textAlign.center, + display.`inline-block`, + // *display: inline; + // *zoom: 1; + verticalAlign.top, + // -webkit-box-sizing: border-box; + // -moz-box-sizing: border-box; + boxSizing.`border-box`, + padding:="0.5em" + ), + listStyle:="none", + margin:=0, + padding:=0, + a.focus(outline:="0 none") + ) + + val caption_ : Cls = cls() + val caption_head: Cls = cls() + val pure_thumb: Cls = cls( + display.block, + textDecoration.none, + color:="inherit", + caption_( + textAlign.left, + display.block, + margin:="0 5px 6px", + p( + margin:="0.3em 0 0", + fontSize:="75%" + ), + caption_head( + fontWeight.bold, + marginTop:="0.3em" + ) + ), + img( + maxWidth:="100%", + marginRight.auto, + marginLeft.auto, + verticalAlign.middle, + boxSizing.`border-box` + // -webkit-box-sizing: border-box; + // -moz-box-sizing: border-box; + ) + ) + + val pure_thumb_bordered: Cls = cls( + border:="1px solid rgba(0, 0, 0, 0.2)" + ) + + /* Badges/Pills */ + private val badge_common = immutable.Seq[StyleSheetFrag]( + padding:="0.35em 0.9em 0.35em", + color:="#FFF", + display.`inline-block`, + fontSize:="11.844", + fontWeight.bold, + lineHeight:="1.2em", + verticalAlign.baseline, + whiteSpace.nowrap, + borderRadius:=20, + margin:="0.2em" + ) + private val bg1: StyleSheetFrag = backgroundColor:="#9D988E" + val pure_badge: Cls = cls(badge_common:+bg1:_*) + private val bg2: StyleSheetFrag = backgroundColor:="#D13C38" + val pure_badge_error: Cls = cls(badge_common:+bg2:_*) + private val bg3: StyleSheetFrag = backgroundColor:="#E78C05" + val pure_badge_warning: Cls = cls(badge_common:+bg3:_*) + private val bg4: StyleSheetFrag = backgroundColor:="rgb(83, 180, 79)" + val pure_badge_success: Cls = cls(badge_common:+bg4:_*) + private val bg5: StyleSheetFrag = backgroundColor:="rgb(18, 169, 218)" + val pure_badge_info: Cls = cls(badge_common:+bg5:_*) + private val bg6: StyleSheetFrag = backgroundColor:="#4D370C" + val pure_badge_inverse: Cls = cls(badge_common:+bg6:_*) + + /* Alerts */ + val pure_alert: Cls = cls( + position.relative, + marginBottom:="1em", + padding:="1em", + backgroundColor:="rgb(209, 235, 238)", + borderRadius:=3, + color:="rgb(102, 131, 145)", + label( + display.`inline-block`, + // *display: inline; + // *zoom: 1; + whiteSpace.nowrap + ) + ) + + val pure_alert_error: Cls = cls(backgroundColor:="#D13C38", color:="#FFF") + val pure_alert_warning: Cls = cls( + backgroundColor:="rgb(250, 191, 103)", color:="rgb(151, 96, 13)") + val pure_alert_success: Cls = cls( + backgroundColor:="rgb(83, 180, 79)", color:="#FFF") + + /* Contextual Modals */ + val bottom_ : Cls = cls() + val top_ : Cls = cls() + val right_ : Cls = cls() + val left_ : Cls = cls() + private val arrow_common = immutable.Seq[StyleSheetFrag]( + borderStyle:="solid", + borderWidth:=10, + height:=0, + width:=0, + position.absolute + ) + val pure_arrow_border: Cls = cls(arrow_common:_*) + val pure_arrow: Cls = cls(arrow_common:_*) + val pure_popover: Cls = cls( + position.relative, + width:=300, + backgroundColor:="#f0f1f3", + color:="#2f3034", + padding:=15, + border:="1px solid #bfc0c8", + borderRadius:=2, + boxShadow:="0 2px 8px rgba(0, 0, 0, 0.15)", + boxSizing.`border-box`, + // box-padding: border-box; + // -webkit-background-clip: padding-box; + // -moz-background-clip: padding; + backgroundClip.`padding-box`, + bottom_( + pure_arrow_border( + borderColor:="#bfc0c8 transparent transparent transparent", + bottom:="-20px", + left:="50%" + ), + pure_arrow( + borderColor:="#f0f1f3 transparent transparent transparent", + bottom:="-19px", + left:="50%" + ) + ), + top_( + pure_arrow_border( + borderColor:="transparent transparent #bfc0c8 transparent", + top:="-21px", + left:="50%" + ), + pure_arrow( + borderColor:="transparent transparent #f0f1f3 transparent", + top:="-20px", + left:="50%" + ) + ), + right_( + pure_arrow_border( + borderColor:="transparent transparent transparent #bfc0c8", + top:="45%", + right:="-21px" + ), + pure_arrow( + borderColor:="transparent transparent transparent #f0f1f3", + top:="45%", + right:="-20px" + ) + ), + left_( + pure_arrow_border( + borderColor:="transparent #bfc0c8 transparent transparent", + top:="45%", + left:="-21px" + ), + pure_arrow( + borderColor:="transparent #f0f1f3 transparent transparent", + top:="45%", + left:="-20px" + ) + ) + ) + + /* BUTTON IMPROVEMENTS */ + val pure_button_block: Cls = cls(display.block) + val pure_button_small: Cls = cls(padding:=".6em 2em .65em", fontSize:="70%") + val pure_button_large: Cls = cls(padding:=".8em 5em .9em", fontSize:="70%") + val pure_button_selected: Cls = cls(backgroundColor:="#345fcb", color:="#fff") + val pure_button_secondary: Cls = + cls(background:="rgb(161, 195, 238)", color:="rgb(26, 88, 122)") + val pure_button_error: Cls = cls(background:="rgb(214, 86, 75)", color.white) + val pure_button_success: Cls = + cls(background:="rgb(54, 197, 71)", color.white) + val pure_button_warning: Cls = + cls(background:="rgb(255, 163, 0)", color.white) + +}