From e1612b6b1c8195337c486fa1094965fffe160e38 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Fri, 24 Jan 2025 21:47:22 +0000 Subject: [PATCH] Reformat with scalafmt 3.8.6 Executed command: scalafmt --non-interactive --- .../bootstrap/context/JSCallbacks.scala | 4 +- .../bootstrap/context/JSImplicits.scala | 2 +- .../bootstrap/context/JSReactiveBinds.scala | 58 +-- .../context/JSRenderingContext.scala | 15 +- .../components/BootstrapComponents.scala | 6 +- .../components/generic/generic.scala | 6 +- .../bootstrap/context/ClassModifiers.scala | 29 +- .../bootstrap/context/ReactiveBinds.scala | 3 +- .../bootstrap/context/ReactiveImplicits.scala | 19 +- .../bootstrap/context/RenderingContext.scala | 10 +- .../bootstrap/context/TextCallbacks.scala | 8 +- .../context/TextClassModifiers.scala | 2 +- .../bootstrap/context/TextReactiveBinds.scala | 2 +- .../context/TextRenderingContext.scala | 4 +- .../jquery/BootstrapJQueryContext.scala | 2 +- .../com/karasiq/bootstrap4/Bootstrap.scala | 9 +- .../bootstrap4/JSBootstrapBundle.scala | 11 +- .../carousel/JSCarouselOptions.scala | 6 +- .../bootstrap4/carousel/JSCarousels.scala | 13 +- .../bootstrap4/modal/JSModalOptions.scala | 4 +- .../bootstrap4/navbar/JSNavigationBars.scala | 14 +- .../bootstrap4/popover/JSPopoverOptions.scala | 20 +- .../bootstrap4/popover/JSPopovers.scala | 13 +- .../bootstrap4/tooltip/JSTooltipOptions.scala | 18 +- .../bootstrap4/tooltip/JSTooltips.scala | 2 +- .../com/karasiq/bootstrap4/Bootstrap.scala | 5 +- .../karasiq/bootstrap4/BootstrapBundle.scala | 51 ++- .../bootstrap4/TextBootstrapBundle.scala | 10 +- .../bootstrap4/alert/AlertStyles.scala | 16 +- .../com/karasiq/bootstrap4/alert/Alerts.scala | 9 +- .../bootstrap4/alert/UniversalAlerts.scala | 9 +- .../buttons/ButtonGroupStyles.scala | 10 +- .../bootstrap4/buttons/ButtonStyles.scala | 56 +-- .../karasiq/bootstrap4/buttons/Buttons.scala | 34 +- .../buttons/UniversalButtonGroups.scala | 4 +- .../bootstrap4/buttons/UniversalButtons.scala | 58 ++- .../com/karasiq/bootstrap4/card/Cards.scala | 12 +- .../bootstrap4/card/UniversalCards.scala | 15 +- .../bootstrap4/carousel/Carousels.scala | 12 +- .../bootstrap4/carousel/TextCarousels.scala | 3 +- .../carousel/UniversalCarousels.scala | 6 +- .../bootstrap4/collapse/Collapses.scala | 4 +- .../collapse/UniversalCollapses.scala | 5 +- .../bootstrap4/dropdown/Dropdowns.scala | 11 +- .../dropdown/UniversalDropdowns.scala | 13 +- .../com/karasiq/bootstrap4/form/Forms.scala | 42 ++- .../com/karasiq/bootstrap4/grid/Grids.scala | 24 +- .../bootstrap4/grid/UniversalGrids.scala | 11 +- .../bootstrap4/icons/UniversalIcons.scala | 46 +-- .../bootstrap4/modal/ModalStyles.scala | 10 +- .../com/karasiq/bootstrap4/modal/Modals.scala | 22 +- .../bootstrap4/modal/UniversalModals.scala | 54 ++- .../navbar/NavigationBarStyles.scala | 12 +- .../bootstrap4/navbar/NavigationBars.scala | 52 ++- .../navbar/UniversalNavigationBars.scala | 161 +++++--- .../pagination/UniversalPageSelectors.scala | 41 ++- .../karasiq/bootstrap4/popover/Popovers.scala | 4 +- .../bootstrap4/popover/TextPopovers.scala | 10 +- .../progressbar/ProgressBarStyles.scala | 2 +- .../bootstrap4/progressbar/ProgressBars.scala | 10 +- .../progressbar/UniversalProgressBars.scala | 12 +- .../bootstrap4/table/PagedTables.scala | 9 +- .../bootstrap4/table/SortableTables.scala | 9 +- .../karasiq/bootstrap4/table/TableCols.scala | 2 +- .../karasiq/bootstrap4/table/TableRows.scala | 26 +- .../bootstrap4/table/TableStyles.scala | 14 +- .../table/UniversalPagedTables.scala | 17 +- .../table/UniversalSortableTables.scala | 41 ++- .../bootstrap4/table/UniversalTables.scala | 4 +- .../bootstrap4/tooltip/TextTooltips.scala | 12 +- .../bootstrap4/tooltip/TooltipStyles.scala | 14 +- .../karasiq/bootstrap4/tooltip/Tooltips.scala | 25 +- .../bootstrap4/utils/UniversalUtils.scala | 345 ++++++++++-------- .../com/karasiq/bootstrap4/utils/Utils.scala | 227 ++++++------ .../com/karasiq/bootstrap/Bootstrap.scala | 5 +- .../karasiq/bootstrap/JSBootstrapBundle.scala | 11 +- .../carousel/JSCarouselOptions.scala | 6 +- .../bootstrap/carousel/JSCarousels.scala | 13 +- .../bootstrap/modal/JSModalOptions.scala | 4 +- .../bootstrap/navbar/JSNavigationBars.scala | 12 +- .../bootstrap/popover/JSPopovers.scala | 15 +- .../bootstrap/tooltip/JSTooltipOptions.scala | 18 +- .../bootstrap/tooltip/JSTooltips.scala | 2 +- .../com/karasiq/bootstrap/Bootstrap.scala | 5 +- .../karasiq/bootstrap/BootstrapBundle.scala | 51 ++- .../bootstrap/TextBootstrapBundle.scala | 10 +- .../karasiq/bootstrap/alert/AlertStyles.scala | 6 +- .../com/karasiq/bootstrap/alert/Alerts.scala | 9 +- .../bootstrap/alert/UniversalAlerts.scala | 9 +- .../bootstrap/buttons/ButtonGroupStyles.scala | 10 +- .../bootstrap/buttons/ButtonStyles.scala | 30 +- .../karasiq/bootstrap/buttons/Buttons.scala | 34 +- .../buttons/UniversalButtonGroups.scala | 4 +- .../bootstrap/buttons/UniversalButtons.scala | 58 ++- .../bootstrap/carousel/Carousels.scala | 9 +- .../bootstrap/carousel/TextCarousels.scala | 3 +- .../carousel/UniversalCarousels.scala | 15 +- .../bootstrap/collapse/Collapses.scala | 4 +- .../collapse/UniversalCollapses.scala | 5 +- .../bootstrap/dropdown/Dropdowns.scala | 6 +- .../dropdown/UniversalDropdowns.scala | 13 +- .../com/karasiq/bootstrap/form/Forms.scala | 42 ++- .../com/karasiq/bootstrap/grid/Grids.scala | 13 +- .../bootstrap/grid/UniversalGrids.scala | 55 +-- .../bootstrap/icons/UniversalIcons.scala | 46 +-- .../karasiq/bootstrap/modal/ModalStyles.scala | 10 +- .../com/karasiq/bootstrap/modal/Modals.scala | 22 +- .../bootstrap/modal/UniversalModals.scala | 54 ++- .../navbar/NavigationBarStyles.scala | 8 +- .../bootstrap/navbar/NavigationBars.scala | 45 ++- .../navbar/UniversalNavigationBars.scala | 124 ++++--- .../pagination/UniversalPageSelectors.scala | 39 +- .../karasiq/bootstrap/panel/PanelStyles.scala | 12 +- .../com/karasiq/bootstrap/panel/Panels.scala | 11 +- .../bootstrap/panel/UniversalPanels.scala | 24 +- .../karasiq/bootstrap/popover/Popovers.scala | 25 +- .../bootstrap/popover/TextPopovers.scala | 10 +- .../progressbar/ProgressBarStyles.scala | 4 +- .../bootstrap/progressbar/ProgressBars.scala | 10 +- .../progressbar/UniversalProgressBars.scala | 12 +- .../karasiq/bootstrap/table/PagedTables.scala | 9 +- .../bootstrap/table/SortableTables.scala | 9 +- .../karasiq/bootstrap/table/TableCols.scala | 2 +- .../karasiq/bootstrap/table/TableStyles.scala | 10 +- .../table/UniversalPagedTables.scala | 17 +- .../table/UniversalSortableTables.scala | 44 ++- .../bootstrap/table/UniversalTables.scala | 10 +- .../bootstrap/tooltip/TextTooltips.scala | 12 +- .../bootstrap/tooltip/TooltipStyles.scala | 14 +- .../karasiq/bootstrap/tooltip/Tooltips.scala | 25 +- .../bootstrap/utils/UniversalUtils.scala | 252 +++++++------ .../com/karasiq/bootstrap/utils/Utils.scala | 203 ++++++----- .../test/frontend/BootstrapTestApp.scala | 50 ++- .../bootstrap4/test/frontend/TestModal.scala | 26 +- .../bootstrap4/test/frontend/TestPanel.scala | 92 +++-- .../test/frontend/TestProgressBar.scala | 13 +- .../bootstrap4/test/frontend/TestTable.scala | 25 +- .../bootstrap4/test/frontend/TodoList.scala | 76 ++-- .../test/frontend/BootstrapTestApp.scala | 54 ++- .../bootstrap/test/frontend/TestModal.scala | 26 +- .../bootstrap/test/frontend/TestPanel.scala | 94 +++-- .../test/frontend/TestProgressBar.scala | 13 +- .../bootstrap/test/frontend/TestTable.scala | 25 +- .../bootstrap/test/frontend/TodoList.scala | 67 ++-- .../test/frontend/TestCarousel.scala | 2 +- .../test/frontend/TestHtmlPage.scala | 56 ++- .../test/frontend/TestCarousel.scala | 2 +- .../test/frontend/TestHtmlPage.scala | 56 ++- .../test/backend/BootstrapTestApp.scala | 4 +- 149 files changed, 2460 insertions(+), 1642 deletions(-) diff --git a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSCallbacks.scala b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSCallbacks.scala index 2f530ed..45a2a53 100644 --- a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSCallbacks.scala +++ b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSCallbacks.scala @@ -8,10 +8,10 @@ import org.scalajs.dom import org.scalajs.dom.raw.MouseEvent trait JSCallbacks extends Callbacks { self: JSRenderingContext ⇒ - type Callback = js.Function + type Callback = js.Function type ClickElement = dom.html.Element type InputElement = dom.html.Input - type FormElement = dom.html.Form + type FormElement = dom.html.Form object Callback extends CallbackFactory { def onClick(f: ClickElement ⇒ Unit): js.Function = { diff --git a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSImplicits.scala b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSImplicits.scala index 2d7ce02..1aec3bc 100644 --- a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSImplicits.scala +++ b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSImplicits.scala @@ -4,7 +4,7 @@ import org.scalajs.dom.DOMList trait JSImplicits { implicit class DOMListIndexedSeq[T](dl: DOMList[T]) extends IndexedSeq[T] { - override def length: Int = dl.length + override def length: Int = dl.length override def apply(idx: Int): T = dl.apply(idx) } } diff --git a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSReactiveBinds.scala b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSReactiveBinds.scala index 396d4ab..0fa8e3d 100644 --- a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSReactiveBinds.scala +++ b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSReactiveBinds.scala @@ -15,14 +15,15 @@ trait JSReactiveBinds extends ReactiveBinds { protected type Event = dom.Event - implicit def rxEventListener[EL <: Element, EV <: Event]: ReactiveRead[EL, EventListener[EL, EV]] = new ReactiveRead[EL, EventListener[EL, EV]] { - def bindRead(element: EL, property: EventListener[EL, EV]): Unit = { - val function = js.ThisFunction.fromFunction2 { (el: EL, ev: EV) ⇒ - property.callback(el, ev) + implicit def rxEventListener[EL <: Element, EV <: Event]: ReactiveRead[EL, EventListener[EL, EV]] = + new ReactiveRead[EL, EventListener[EL, EV]] { + def bindRead(element: EL, property: EventListener[EL, EV]): Unit = { + val function = js.ThisFunction.fromFunction2 { (el: EL, ev: EV) ⇒ + property.callback(el, ev) + } + element.asInstanceOf[js.Dynamic].addEventListener(property.`type`, function) } - element.asInstanceOf[js.Dynamic].addEventListener(property.`type`, function) } - } implicit def rxModify[E <: Element, T]: ReactiveWrite[E, Modify[E, T]] = new ReactiveWrite[E, Modify[E, T]] { def bindWrite(element: E, property: Modify[E, T]): Unit = { @@ -37,32 +38,39 @@ trait JSReactiveBinds extends ReactiveBinds { } } - implicit def rxBindNode[E <: Element, N: Renderable]: ReactiveWrite[E, BindNode[N]] = new ReactiveWrite[E, BindNode[N]] { - def bindWrite(parent: E, property: BindNode[N]): Unit = { - val elRx = property.value.map(identity) - var oldElement = property.value.now.render - elRx.triggerLater({ - val element = oldElement - if (isElementAvailable(element) && isElementAvailable(element.parentNode)) { - val newElement = elRx.now.render - oldElement = newElement - element.parentNode.replaceChild(newElement, element) - } else { - elRx.kill() - } - }: Unit) - parent.appendChild(oldElement) + implicit def rxBindNode[E <: Element, N: Renderable]: ReactiveWrite[E, BindNode[N]] = + new ReactiveWrite[E, BindNode[N]] { + def bindWrite(parent: E, property: BindNode[N]): Unit = { + val elRx = property.value.map(identity) + var oldElement = property.value.now.render + elRx.triggerLater({ + val element = oldElement + if (isElementAvailable(element) && isElementAvailable(element.parentNode)) { + val newElement = elRx.now.render + oldElement = newElement + element.parentNode.replaceChild(newElement, element) + } else { + elRx.kill() + } + }: Unit) + parent.appendChild(oldElement) + } } - } - private[this] final case class FormValueRW[E <: Element, T](event: String, read: dom.html.Input ⇒ T, write: (dom.html.Input, T) ⇒ Unit) - extends ReactiveRW[E, FormValue[T]] { + private[this] final case class FormValueRW[E <: Element, T]( + event: String, + read: dom.html.Input ⇒ T, + write: (dom.html.Input, T) ⇒ Unit + ) extends ReactiveRW[E, FormValue[T]] { private[this] def safeRead(e: Element): Try[T] = Try(read(e.asInstanceOf[Input])).filter(v ⇒ v != null && !js.isUndefined(v)) def bindRead(element: E, property: FormValue[T]): Unit = { - rxEventListener[E, Event].bindRead(element, EventListener(event, (e, _) ⇒ safeRead(e).foreach(property.value() = _))) + rxEventListener[E, Event].bindRead( + element, + EventListener(event, (e, _) ⇒ safeRead(e).foreach(property.value() = _)) + ) } def bindWrite(element: E, property: FormValue[T]): Unit = { diff --git a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSRenderingContext.scala b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSRenderingContext.scala index a0b09e4..829bd8a 100644 --- a/context/js/src/main/scala/com/karasiq/bootstrap/context/JSRenderingContext.scala +++ b/context/js/src/main/scala/com/karasiq/bootstrap/context/JSRenderingContext.scala @@ -6,11 +6,16 @@ import scalatags.JsDom import org.scalajs.dom import org.scalajs.dom.Node -trait JSRenderingContext extends RenderingContext with JSReactiveBinds with JSCallbacks with JSClassModifiers with JSImplicits { +trait JSRenderingContext + extends RenderingContext + with JSReactiveBinds + with JSCallbacks + with JSClassModifiers + with JSImplicits { type Element = dom.Element - type Output = dom.Element - type FragT = dom.Node + type Output = dom.Element + type FragT = dom.Node - //noinspection TypeAnnotation + // noinspection TypeAnnotation val scalaTags = JsDom -} \ No newline at end of file +} diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/components/BootstrapComponents.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/components/BootstrapComponents.scala index 905c203..92904a3 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/components/BootstrapComponents.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/components/BootstrapComponents.scala @@ -6,9 +6,9 @@ import com.karasiq.bootstrap.components.generic.{GenComponent, GenDomComponent, import com.karasiq.bootstrap.context.RenderingContext trait BootstrapComponents { self: RenderingContext ⇒ - final type ModifierFactory = generic.ModifierFactory[Element] - final type BootstrapComponent = generic.BootstrapComponent[Element] - final type BootstrapDomComponent = generic.BootstrapDomComponent[Element, FragT] + final type ModifierFactory = generic.ModifierFactory[Element] + final type BootstrapComponent = generic.BootstrapComponent[Element] + final type BootstrapDomComponent = generic.BootstrapDomComponent[Element, FragT] final type BootstrapHtmlComponent = generic.BootstrapHtmlComponent[Element, Output, FragT] implicit def renderBootstrapHtmlComponent[C](bc: C)(implicit ev: C ⇒ BootstrapHtmlComponent): scalaTags.Tag = { diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/components/generic/generic.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/components/generic/generic.scala index 330a790..88ecb4c 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/components/generic/generic.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/components/generic/generic.scala @@ -6,7 +6,7 @@ package object generic { // Context-bound components trait ModifierFactory[E] extends Modifier[E] { // Shortcuts - protected type ElementT = E + protected type ElementT = E protected type ModifierT = Modifier[E] def createModifier: ModifierT @@ -34,7 +34,7 @@ package object generic { } final def render(md: ModifierT*): ModifierT = { - renderFrag(md:_*) + renderFrag(md: _*) } } @@ -44,7 +44,7 @@ package object generic { def renderTag(md: ModifierT*): TagT final def renderFrag(md: ModifierT*): FragT = { - renderTag(md:_*) + renderTag(md: _*) } } } diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ClassModifiers.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ClassModifiers.scala index 552f10a..afa1606 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ClassModifiers.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ClassModifiers.scala @@ -17,18 +17,18 @@ trait ClassModifiers { self: RenderingContext ⇒ } case class ClassAdd(className: String) extends ClassModifier { - val classAdded = true - val classRemoved = false + val classAdded = true + val classRemoved = false def applyTo(t: Element): Unit = addClass(t, className) } case class ClassRemove(className: String) extends ClassModifier { - val classAdded = false - val classRemoved = true + val classAdded = false + val classRemoved = true def applyTo(t: Element): Unit = removeClass(t, className) } - //noinspection MutatorLikeMethodIsParameterless + // noinspection MutatorLikeMethodIsParameterless implicit class HtmlClassOps(className: String) { def addClass: ClassAdd = { ClassAdd(className) @@ -43,13 +43,18 @@ trait ClassModifiers { self: RenderingContext ⇒ } def classIf(state: Rx[Boolean]): Modifier = { - writeModifier(Modify[Element, Boolean](state, (e, v) ⇒ { - if (v) { - ClassModifiers.this.addClass(e, className) - } else { - ClassModifiers.this.removeClass(e, className) - } - })) + writeModifier( + Modify[Element, Boolean]( + state, + (e, v) ⇒ { + if (v) { + ClassModifiers.this.addClass(e, className) + } else { + ClassModifiers.this.removeClass(e, className) + } + } + ) + ) } } diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveBinds.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveBinds.scala index 4651da8..3038d61 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveBinds.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveBinds.scala @@ -24,8 +24,7 @@ object ReactiveBinds { case class Visibility(visible: Rx[Boolean]) } -/** - * Predefined binds +/** Predefined binds */ trait ReactiveBinds { self: RenderingContext ⇒ protected type Event diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveImplicits.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveImplicits.scala index 440491c..fc06e2c 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveImplicits.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/ReactiveImplicits.scala @@ -22,13 +22,16 @@ trait ReactiveImplicits { self: RenderingContext ⇒ } implicit class RxVariableOps[T](value: Var[T]) { - def reactiveRead[EV](event: String, f: (Element, EV) ⇒ T)(implicit read: ReactiveRead[Element, EventListener[Element, EV]]): Modifier = { - readModifier(EventListener[Element, EV](event, (el, ev) ⇒ value() = f(el,ev))) + def reactiveRead[EV](event: String, f: (Element, EV) ⇒ T)(implicit + read: ReactiveRead[Element, EventListener[Element, EV]] + ): Modifier = { + readModifier(EventListener[Element, EV](event, (el, ev) ⇒ value() = f(el, ev))) } - def reactiveReadWrite[EV](event: String, read: (Element, EV) ⇒ T, write: (Element, T) ⇒ Unit) - (implicit rb: ReactiveRead[Element, EventListener[Element, EV]], - wb: ReactiveWrite[Element, Modify[Element, T]]): Modifier = new Modifier { + def reactiveReadWrite[EV](event: String, read: (Element, EV) ⇒ T, write: (Element, T) ⇒ Unit)(implicit + rb: ReactiveRead[Element, EventListener[Element, EV]], + wb: ReactiveWrite[Element, Modify[Element, T]] + ): Modifier = new Modifier { override def applyTo(t: Element): Unit = { writeModifier(ReactiveBinds.Modify(value, write)).applyTo(t) reactiveRead(event, read).applyTo(t) @@ -39,8 +42,10 @@ trait ReactiveImplicits { self: RenderingContext ⇒ readModifier(FormValue(value)) } - def reactiveInput(implicit rb: ReactiveRead[Element, FormValue[T]], - wb: ReactiveWrite[Element, FormValue[T]]): Modifier = new Modifier { + def reactiveInput(implicit + rb: ReactiveRead[Element, FormValue[T]], + wb: ReactiveWrite[Element, FormValue[T]] + ): Modifier = new Modifier { def applyTo(t: Element): Unit = { writeModifier(FormValue(value)).applyTo(t) readModifier(FormValue(value)).applyTo(t) diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/RenderingContext.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/RenderingContext.scala index bb9e9f9..cfe963a 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/RenderingContext.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/RenderingContext.scala @@ -5,9 +5,13 @@ import scalatags.generic import com.karasiq.bootstrap.components.BootstrapComponents -trait RenderingContext extends ReactiveBinds with ReactiveImplicits with Callbacks - with BootstrapComponents with ClassModifiers { - +trait RenderingContext + extends ReactiveBinds + with ReactiveImplicits + with Callbacks + with BootstrapComponents + with ClassModifiers { + type Element type Output <: FragT type FragT diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextCallbacks.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextCallbacks.scala index 5cbc12c..3d41f54 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextCallbacks.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextCallbacks.scala @@ -8,18 +8,18 @@ trait TextCallbacks extends Callbacks { self: RenderingContext ⇒ protected type ClickElement = Any protected type InputElement = Any - protected type FormElement = Any + protected type FormElement = Any object Callback extends CallbackFactory { - def onClick(f: ClickElement => Unit): Callback = { + def onClick(f: ClickElement ⇒ Unit): Callback = { () } - def onInput(f: (InputElement) => Unit): Callback = { + def onInput(f: (InputElement) ⇒ Unit): Callback = { () } - def onSubmit(f: (FormElement) => Unit): Callback = { + def onSubmit(f: (FormElement) ⇒ Unit): Callback = { () } } diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextClassModifiers.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextClassModifiers.scala index dd3c148..e645107 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextClassModifiers.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextClassModifiers.scala @@ -49,7 +49,7 @@ trait TextClassModifiers extends ClassModifiers { self: TextRenderingContext ⇒ case classIndex ⇒ val (key, value) = e.attrs(classIndex) - val newValue = f(extractClasses(value)) + val newValue = f(extractClasses(value)) e.attrs(classIndex) = (key, ClassesValueSource(newValue)) } } diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextReactiveBinds.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextReactiveBinds.scala index 4e3fbf7..583e9ac 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextReactiveBinds.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextReactiveBinds.scala @@ -13,7 +13,7 @@ trait TextReactiveBinds extends ReactiveBinds { self: TextRenderingContext ⇒ private[this] val NO_OP_BIND: ReactiveRW[Element, Nothing] = new ReactiveRW[Element, Nothing] { def bindWrite(element: Builder, property: Nothing): Unit = () - def bindRead(element: Builder, property: Nothing): Unit = () + def bindRead(element: Builder, property: Nothing): Unit = () } implicit def rxEventListener[EL <: Element, EV <: Event]: ReactiveRead[EL, ReactiveBinds.EventListener[EL, EV]] = { diff --git a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextRenderingContext.scala b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextRenderingContext.scala index 78b9705..cb5dd82 100644 --- a/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextRenderingContext.scala +++ b/context/shared/src/main/scala/com/karasiq/bootstrap/context/TextRenderingContext.scala @@ -4,8 +4,8 @@ import scala.language.postfixOps trait TextRenderingContext extends RenderingContext with TextReactiveBinds with TextCallbacks with TextClassModifiers { type Element = scalatags.text.Builder - type Output = String - type FragT = String + type Output = String + type FragT = String val scalaTags = scalatags.Text } diff --git a/jquery/src/main/scala/com/karasiq/bootstrap/jquery/BootstrapJQueryContext.scala b/jquery/src/main/scala/com/karasiq/bootstrap/jquery/BootstrapJQueryContext.scala index d4750e1..d4b29b6 100644 --- a/jquery/src/main/scala/com/karasiq/bootstrap/jquery/BootstrapJQueryContext.scala +++ b/jquery/src/main/scala/com/karasiq/bootstrap/jquery/BootstrapJQueryContext.scala @@ -12,7 +12,7 @@ object BootstrapJQueryContext { object bootstrap extends js.Object } - //noinspection ScalaUnusedExpression + // noinspection ScalaUnusedExpression def useNpmImports(): Unit = { imports.bootstrap } diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala index 771da1a..5e400ae 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala @@ -2,13 +2,12 @@ package com.karasiq.bootstrap4 import rx._ -/** - * Global context +/** Global context */ object Bootstrap { private[this] lazy val _scalaRxContext = Ctx.Owner.safe() - lazy val js: JSBootstrapBundle = JSBootstrapBundle()(_scalaRxContext) - lazy val text: TextBootstrapBundle = TextBootstrapBundle()(_scalaRxContext) + lazy val js: JSBootstrapBundle = JSBootstrapBundle()(_scalaRxContext) + lazy val text: TextBootstrapBundle = TextBootstrapBundle()(_scalaRxContext) lazy val default: JSBootstrapBundle = js -} \ No newline at end of file +} diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/JSBootstrapBundle.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/JSBootstrapBundle.scala index 5b4db23..8f70a67 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/JSBootstrapBundle.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/JSBootstrapBundle.scala @@ -13,8 +13,15 @@ import com.karasiq.bootstrap4.popover.JSPopovers import com.karasiq.bootstrap4.tooltip.JSTooltips // JS components implementation -trait JSBootstrapBundle extends UniversalBootstrapBundle with JSRenderingContext with JSModals with JSTooltips - with JSPopovers with JSNavigationBars with JSCarousels with BootstrapJQueryContext +trait JSBootstrapBundle + extends UniversalBootstrapBundle + with JSRenderingContext + with JSModals + with JSTooltips + with JSPopovers + with JSNavigationBars + with JSCarousels + with BootstrapJQueryContext object JSBootstrapBundle { def apply()(implicit rx: Ctx.Owner): JSBootstrapBundle = { diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarouselOptions.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarouselOptions.scala index 1c9140a..b6b4533 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarouselOptions.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarouselOptions.scala @@ -4,8 +4,8 @@ import scala.scalajs.js @js.native trait JSCarouselOptions extends js.Object { - var interval: Int = js.native - var pause: String = js.native - var wrap: Boolean = js.native + var interval: Int = js.native + var pause: String = js.native + var wrap: Boolean = js.native var keyboard: Boolean = js.native } diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarousels.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarousels.scala index 31fca2a..1a2a69c 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarousels.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/carousel/JSCarousels.scala @@ -11,7 +11,8 @@ import com.karasiq.bootstrap.jquery.BootstrapJQueryContext import com.karasiq.bootstrap4.icons.Icons import com.karasiq.bootstrap4.utils.Utils -trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒ +trait JSCarousels extends UniversalCarousels { + self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒ import scalaTags.all._ type Carousel = JSCarousel @@ -26,9 +27,13 @@ trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Car } class JSCarousel(carouselId: String, content: Rx[Seq[Modifier]]) extends UniversalCarousel(carouselId, content) { - def create(interval: Int = 5000, pause: String = "hover", - wrap: Boolean = true, keyboard: Boolean = true, - modifiers: Modifier = Bootstrap.noModifier): Element = { + def create( + interval: Int = 5000, + pause: String = "hover", + wrap: Boolean = true, + keyboard: Boolean = true, + modifiers: Modifier = Bootstrap.noModifier + ): Element = { val element = carousel(modifiers).render val options = js.Object().asInstanceOf[JSCarouselOptions] options.interval = interval diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/modal/JSModalOptions.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/modal/JSModalOptions.scala index 57a8e3e..1bc36ee 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/modal/JSModalOptions.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/modal/JSModalOptions.scala @@ -6,6 +6,6 @@ import scala.scalajs.js.| @js.native trait JSModalOptions extends js.Object { var backdrop: Boolean | String = js.native - var keyboard: Boolean = js.native - var show: Boolean = js.native + var keyboard: Boolean = js.native + var show: Boolean = js.native } diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/navbar/JSNavigationBars.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/navbar/JSNavigationBars.scala index c78854f..014a13b 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/navbar/JSNavigationBars.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/navbar/JSNavigationBars.scala @@ -5,20 +5,20 @@ import scala.language.postfixOps import com.karasiq.bootstrap.context.JSRenderingContext import com.karasiq.bootstrap.jquery.BootstrapJQueryContext -trait JSNavigationBars { self: JSRenderingContext with NavigationBars with BootstrapJQueryContext⇒ +trait JSNavigationBars { self: JSRenderingContext with NavigationBars with BootstrapJQueryContext ⇒ implicit class JSNavigation(nav: NavComponent) { - /** - * Selects tab by ID - * @param id Tab ID + /** Selects tab by ID + * @param id + * Tab ID */ def selectTab(id: String): Unit = { jQuery(s"a[data-target='#${nav.tabId(id)}']").tab("show") } - /** - * Selects tab by index - * @param i Tab index, starting from `0` + /** Selects tab by index + * @param i + * Tab index, starting from `0` */ def selectTab(i: Int): Unit = { val tabs = nav.navTabs.now diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopoverOptions.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopoverOptions.scala index d5975e1..0b2eefe 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopoverOptions.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopoverOptions.scala @@ -5,14 +5,14 @@ import scala.scalajs.js @js.native trait JSPopoverOptions extends js.Object { var animation: Boolean = js.native - var container: js.Any = js.native - var content: js.Any = js.native - var delay: js.Any = js.native - var html: Boolean = js.native - var placement: js.Any = js.native - var selector: js.Any = js.native - var template: String = js.native - var title: js.Any = js.native - var trigger: String = js.native - var viewport: js.Any = js.native + var container: js.Any = js.native + var content: js.Any = js.native + var delay: js.Any = js.native + var html: Boolean = js.native + var placement: js.Any = js.native + var selector: js.Any = js.native + var template: String = js.native + var title: js.Any = js.native + var trigger: String = js.native + var viewport: js.Any = js.native } diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopovers.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopovers.scala index a3cfe35..542d67a 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopovers.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/popover/JSPopovers.scala @@ -7,13 +7,14 @@ import com.karasiq.bootstrap.context.JSRenderingContext import com.karasiq.bootstrap.jquery.BootstrapJQueryContext import com.karasiq.bootstrap4.tooltip.Tooltips -trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒ +trait JSPopovers { + self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒ import scalaTags.all._ class JSPopover(val options: PopoverOptions) extends Popover { def toggle: Modifier = new Modifier { def applyTo(t: Element): Unit = { - val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions] + val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions] def set(value: String, f: String ⇒ Unit) = if (value.nonEmpty) f(value) jsOptions.animation = options.animation jsOptions.content = options.content.render @@ -35,10 +36,10 @@ trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popove } } - /** - * Add small overlays of content, like those on the iPad, to any element for housing secondary information. - * Popovers whose both title and content are zero-length are never displayed. - * @see [[http://getbootstrap.com/javascript/#popovers]] + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#popovers]] */ object Popover extends PopoverFactory { def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): JSPopover = { diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltipOptions.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltipOptions.scala index cf4d20e..6d33398 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltipOptions.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltipOptions.scala @@ -5,13 +5,13 @@ import scala.scalajs.js @js.native trait JSTooltipOptions extends js.Object { var animation: Boolean = js.native - var container: js.Any = js.native - var delay: js.Any = js.native - var html: Boolean = js.native - var placement: js.Any = js.native - var selector: js.Any = js.native - var template: String = js.native - var title: js.Any = js.native - var trigger: String = js.native - var viewport: js.Any = js.native + var container: js.Any = js.native + var delay: js.Any = js.native + var html: Boolean = js.native + var placement: js.Any = js.native + var selector: js.Any = js.native + var template: String = js.native + var title: js.Any = js.native + var trigger: String = js.native + var viewport: js.Any = js.native } diff --git a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltips.scala b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltips.scala index 04d74bb..69d9f86 100644 --- a/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltips.scala +++ b/library-v4/js/src/main/scala/com/karasiq/bootstrap4/tooltip/JSTooltips.scala @@ -17,7 +17,7 @@ trait JSTooltips { self: JSRenderingContext with BootstrapComponents with Toolti class JSTooltip(val options: TooltipOptions) extends AbstractTooltip { def toggle: Modifier = new Modifier { def applyTo(t: Element): Unit = { - val jsOptions = scalajs.js.Object().asInstanceOf[JSTooltipOptions] + val jsOptions = scalajs.js.Object().asInstanceOf[JSTooltipOptions] def set(value: String, f: String ⇒ Unit) = if (value.nonEmpty) f(value) jsOptions.animation = options.animation jsOptions.html = options.html diff --git a/library-v4/jvm/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala b/library-v4/jvm/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala index 391ff63..db107e6 100644 --- a/library-v4/jvm/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala +++ b/library-v4/jvm/src/main/scala/com/karasiq/bootstrap4/Bootstrap.scala @@ -2,8 +2,7 @@ package com.karasiq.bootstrap4 import rx._ -/** - * Global context +/** Global context */ object Bootstrap { private[this] lazy val _scalaRxContext = Ctx.Owner.safe() @@ -13,4 +12,4 @@ object Bootstrap { } lazy val default: TextBootstrapBundle = text -} \ No newline at end of file +} diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/BootstrapBundle.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/BootstrapBundle.scala index 372f20a..5949b4d 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/BootstrapBundle.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/BootstrapBundle.scala @@ -23,14 +23,47 @@ import com.karasiq.bootstrap4.tooltip.Tooltips import com.karasiq.bootstrap4.utils.{UniversalUtils, Utils} // Abstract components -trait BootstrapBundle extends RenderingContext with BootstrapComponents with ClassModifiers with Alerts with Buttons - with Carousels with Collapses with Dropdowns with Forms with Grids with Icons with Modals with NavigationBars - with Cards with Popovers with ProgressBars with Tables with PageSelectors with PagedTables with SortableTables - with Tooltips with Utils +trait BootstrapBundle + extends RenderingContext + with BootstrapComponents + with ClassModifiers + with Alerts + with Buttons + with Carousels + with Collapses + with Dropdowns + with Forms + with Grids + with Icons + with Modals + with NavigationBars + with Cards + with Popovers + with ProgressBars + with Tables + with PageSelectors + with PagedTables + with SortableTables + with Tooltips + with Utils // Default components implementation -trait UniversalBootstrapBundle extends BootstrapBundle - with UniversalPageSelectors with UniversalTables with UniversalPagedTables with UniversalSortableTables - with UniversalProgressBars with UniversalCards with UniversalNavigationBars with UniversalModals - with UniversalIcons with UniversalGrids with UniversalForms with UniversalDropdowns with UniversalCollapses - with UniversalCarousels with UniversalButtons with UniversalAlerts with UniversalUtils +trait UniversalBootstrapBundle + extends BootstrapBundle + with UniversalPageSelectors + with UniversalTables + with UniversalPagedTables + with UniversalSortableTables + with UniversalProgressBars + with UniversalCards + with UniversalNavigationBars + with UniversalModals + with UniversalIcons + with UniversalGrids + with UniversalForms + with UniversalDropdowns + with UniversalCollapses + with UniversalCarousels + with UniversalButtons + with UniversalAlerts + with UniversalUtils diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/TextBootstrapBundle.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/TextBootstrapBundle.scala index 71bb5f7..fec0a34 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/TextBootstrapBundle.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/TextBootstrapBundle.scala @@ -10,8 +10,12 @@ import com.karasiq.bootstrap4.popover.TextPopovers import com.karasiq.bootstrap4.tooltip.TextTooltips // Text components implementation -trait TextBootstrapBundle extends UniversalBootstrapBundle with TextRenderingContext - with TextCarousels with TextTooltips with TextPopovers +trait TextBootstrapBundle + extends UniversalBootstrapBundle + with TextRenderingContext + with TextCarousels + with TextTooltips + with TextPopovers object TextBootstrapBundle { def apply()(implicit ctx: Ctx.Owner): TextBootstrapBundle = { @@ -19,4 +23,4 @@ object TextBootstrapBundle { implicit val scalaRxContext = ctx } } -} \ No newline at end of file +} diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/AlertStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/AlertStyles.scala index ce1e2d9..fd5b91c 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/AlertStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/AlertStyles.scala @@ -5,18 +5,18 @@ import com.karasiq.bootstrap.context.RenderingContext trait AlertStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class AlertStyle private[alert](val styleName: String) extends ModifierFactory { + final class AlertStyle private[alert] (val styleName: String) extends ModifierFactory { val createModifier = s"alert-$styleName".addClass } object AlertStyle { - lazy val primary = new AlertStyle("primary") + lazy val primary = new AlertStyle("primary") lazy val secondary = new AlertStyle("secondary") - lazy val success = new AlertStyle("success") - lazy val info = new AlertStyle("info") - lazy val warning = new AlertStyle("warning") - lazy val danger = new AlertStyle("danger") - lazy val light = new AlertStyle("light") - lazy val dark = new AlertStyle("dark") + lazy val success = new AlertStyle("success") + lazy val info = new AlertStyle("info") + lazy val warning = new AlertStyle("warning") + lazy val danger = new AlertStyle("danger") + lazy val light = new AlertStyle("light") + lazy val dark = new AlertStyle("dark") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/Alerts.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/Alerts.scala index e923633..b0b80e6 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/Alerts.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/Alerts.scala @@ -11,16 +11,17 @@ trait Alerts extends AlertStyles { self: RenderingContext ⇒ def style: AlertStyle } - /** - * Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. - * @see [[http://getbootstrap.com/components/#alerts]] + /** Provide contextual feedback messages for typical user actions with the handful of available and flexible alert + * messages. + * @see + * [[http://getbootstrap.com/components/#alerts]] */ trait AlertFactory { def create(style: AlertStyle): Alert def link: Tag def apply(style: AlertStyle, content: Modifier*): Tag = { - create(style).renderTag(content:_*) + create(style).renderTag(content: _*) } } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/UniversalAlerts.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/UniversalAlerts.scala index 7c3a984..d9264c1 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/UniversalAlerts.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/alert/UniversalAlerts.scala @@ -23,8 +23,13 @@ trait UniversalAlerts { self: RenderingContext with Alerts with Utils ⇒ private[this] val classes = Seq("alert", "alert-dismissible", "fade", "show") def closeButton: Tag = { - button(`type` := "button", "close".addClass, `data-dismiss` := "alert", - aria.label := "Close", span(aria.hidden := true, raw("×"))) + button( + `type` := "button", + "close".addClass, + `data-dismiss` := "alert", + aria.label := "Close", + span(aria.hidden := true, raw("×")) + ) } override def renderTag(md: ModifierT*): TagT = { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonGroupStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonGroupStyles.scala index 3bf747a..888e9ce 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonGroupStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonGroupStyles.scala @@ -12,15 +12,15 @@ trait ButtonGroupStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class ButtonGroupSizeValue private[buttons](val size: String) extends ButtonGroupSize { - val className = s"btn-group-$size" + final class ButtonGroupSizeValue private[buttons] (val size: String) extends ButtonGroupSize { + val className = s"btn-group-$size" val createModifier = className.addClass } object ButtonGroupSize { - def default: ButtonGroupSize = DefaultButtonGroupSize - lazy val large: ButtonGroupSize = new ButtonGroupSizeValue("lg") - lazy val small: ButtonGroupSize = new ButtonGroupSizeValue("sm") + def default: ButtonGroupSize = DefaultButtonGroupSize + lazy val large: ButtonGroupSize = new ButtonGroupSizeValue("lg") + lazy val small: ButtonGroupSize = new ButtonGroupSizeValue("sm") lazy val extraSmall: ButtonGroupSize = new ButtonGroupSizeValue("xs") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonStyles.scala index 2c152ab..e148c0f 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/ButtonStyles.scala @@ -12,52 +12,52 @@ trait ButtonStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class ButtonSizeValue private[buttons](size: String) extends ButtonSize { - val className = s"btn-$size" + final class ButtonSizeValue private[buttons] (size: String) extends ButtonSize { + val className = s"btn-$size" val createModifier = className.addClass } - /** - * @see [[https://getbootstrap.com/docs/4.0/components/buttons/#sizes]] + /** @see + * [[https://getbootstrap.com/docs/4.0/components/buttons/#sizes]] */ object ButtonSize { - def default = DefaultButtonSize + def default = DefaultButtonSize lazy val large = new ButtonSizeValue("lg") lazy val small = new ButtonSizeValue("sm") } - - class ButtonStyle private[buttons](style: String) extends ModifierFactory { - val className = s"btn-$style" + + class ButtonStyle private[buttons] (style: String) extends ModifierFactory { + val className = s"btn-$style" val createModifier = className.addClass } - /** - * @see [[https://getbootstrap.com/docs/4.0/components/buttons/]] + /** @see + * [[https://getbootstrap.com/docs/4.0/components/buttons/]] */ object ButtonStyle { - def default = primary - lazy val primary = new ButtonStyle("primary") + def default = primary + lazy val primary = new ButtonStyle("primary") lazy val secondary = new ButtonStyle("secondary") - lazy val success = new ButtonStyle("success") - lazy val info = new ButtonStyle("info") - lazy val warning = new ButtonStyle("warning") - lazy val danger = new ButtonStyle("danger") - lazy val light = new ButtonStyle("light") - lazy val dark = new ButtonStyle("dark") - lazy val link = new ButtonStyle("link") + lazy val success = new ButtonStyle("success") + lazy val info = new ButtonStyle("info") + lazy val warning = new ButtonStyle("warning") + lazy val danger = new ButtonStyle("danger") + lazy val light = new ButtonStyle("light") + lazy val dark = new ButtonStyle("dark") + lazy val link = new ButtonStyle("link") } - class ButtonOutline private[buttons](style: String) extends ButtonStyle(s"outline-$style") + class ButtonOutline private[buttons] (style: String) extends ButtonStyle(s"outline-$style") object ButtonOutline { - lazy val primary = new ButtonOutline("primary") + lazy val primary = new ButtonOutline("primary") lazy val secondary = new ButtonOutline("secondary") - lazy val success = new ButtonOutline("success") - lazy val info = new ButtonOutline("info") - lazy val warning = new ButtonOutline("warning") - lazy val danger = new ButtonOutline("danger") - lazy val light = new ButtonOutline("light") - lazy val dark = new ButtonOutline("dark") - lazy val white = new ButtonOutline("white") + lazy val success = new ButtonOutline("success") + lazy val info = new ButtonOutline("info") + lazy val warning = new ButtonOutline("warning") + lazy val danger = new ButtonOutline("danger") + lazy val light = new ButtonOutline("light") + lazy val dark = new ButtonOutline("dark") + lazy val white = new ButtonOutline("white") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/Buttons.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/Buttons.scala index c2b845f..b00be02 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/Buttons.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/Buttons.scala @@ -6,7 +6,8 @@ import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap4.utils.Utils -trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒ +trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { + self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒ import scalaTags.all._ type Button <: AbstractButton @@ -21,16 +22,27 @@ trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: R } trait ButtonFactory { - /** - * Creates button - * @param style Use any of the available button classes to quickly create a styled button - * @param size Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes - * @param block Create block level buttons—those that span the full width of a parent— by adding `.btn-block` - * @param active Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active - * @param disabled Make buttons look unclickable by fading them back with `opacity` - * @see [[http://getbootstrap.com/css/#buttons]] + + /** Creates button + * @param style + * Use any of the available button classes to quickly create a styled button + * @param size + * Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes + * @param block + * Create block level buttons—those that span the full width of a parent— by adding `.btn-block` + * @param active + * Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active + * @param disabled + * Make buttons look unclickable by fading them back with `opacity` + * @see + * [[http://getbootstrap.com/css/#buttons]] */ - def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false): Button + def apply( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ): Button } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtonGroups.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtonGroups.scala index 0040619..804b889 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtonGroups.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtonGroups.scala @@ -9,14 +9,14 @@ trait UniversalButtonGroups { self: RenderingContext with ButtonGroups with Boot type ButtonGroup = UniversalButtonGroup object ButtonGroup extends ButtonGroupFactory { def apply(size: ButtonGroupSize, buttons: Modifier*): ButtonGroup = { - new UniversalButtonGroup(size, buttons:_*) + new UniversalButtonGroup(size, buttons: _*) } } type ButtonToolbar = UniversalButtonToolbar object ButtonToolbar extends ButtonToolbarFactory { def apply(buttonGroups: ButtonGroup*): ButtonToolbar = { - new UniversalButtonToolbar(buttonGroups:_*) + new UniversalButtonToolbar(buttonGroups: _*) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtons.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtons.scala index 9da95aa..ea55ed0 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtons.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/buttons/UniversalButtons.scala @@ -5,16 +5,22 @@ import scala.language.postfixOps import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} -trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒ +trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { + self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒ import scalaTags.all._ type Button = ButtonBuilder object Button extends ButtonFactory { - /** - * Shortcut to [[com.karasiq.bootstrap4.buttons.UniversalButtons.ButtonBuilder ButtonBuilder]]. + + /** Shortcut to [[com.karasiq.bootstrap4.buttons.UniversalButtons.ButtonBuilder ButtonBuilder]]. */ - def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false): ButtonBuilder = { + def apply( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ): ButtonBuilder = { ButtonBuilder(style, size, block, active, disabled) } } @@ -22,25 +28,39 @@ trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups trait UniversalButton extends AbstractButton { override def renderTag(md: ModifierT*): TagT = { @inline def optional(flag: Boolean, className: String) = if (flag) Some(className) else None - val classList = Seq(Some("btn"), optional(block, "btn-block"), optional(active, "active"), optional(disabled, "disabled")).flatten.map(_.addClass) - scalaTags.tags.button(`type` := "button", classList, style, size)(md:_*) + val classList = Seq( + Some("btn"), + optional(block, "btn-block"), + optional(active, "active"), + optional(disabled, "disabled") + ).flatten.map(_.addClass) + scalaTags.tags.button(`type` := "button", classList, style, size)(md: _*) } } - /** - * Button builder - * @param style Use any of the available button classes to quickly create a styled button - * @param size Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes - * @param block Create block level buttons—those that span the full width of a parent— by adding `.btn-block` - * @param active Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active - * @param disabled Make buttons look unclickable by fading them back with `opacity` - * @see [[http://getbootstrap.com/css/#buttons]] + /** Button builder + * @param style + * Use any of the available button classes to quickly create a styled button + * @param size + * Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes + * @param block + * Create block level buttons—those that span the full width of a parent— by adding `.btn-block` + * @param active + * Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active + * @param disabled + * Make buttons look unclickable by fading them back with `opacity` + * @see + * [[http://getbootstrap.com/css/#buttons]] */ - case class ButtonBuilder(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false) - extends UniversalButton { + case class ButtonBuilder( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ) extends UniversalButton { def withStyle(style: ButtonStyle): ButtonBuilder = copy(style = style) - def withSize(size: ButtonSize): ButtonBuilder = copy(size = size) + def withSize(size: ButtonSize): ButtonBuilder = copy(size = size) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/Cards.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/Cards.scala index e2a8ae5..0d2df60 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/Cards.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/Cards.scala @@ -24,14 +24,16 @@ trait Cards { self: RenderingContext with Icons with Utils ⇒ def imageTop(md: Modifier): Tag def body(md: Modifier*): Tag def text(md: Modifier*): Tag - def link(md: Modifier*): Tag + def link(md: Modifier*): Tag def button(icon: IconModifier, modifiers: Modifier*): Tag def buttons(buttons: Modifier*): Tag def group(cards: Modifier*): Tag - def apply(panelId: String = Bootstrap.newId, - header: Option[Modifier] = None, - footer: Option[Modifier] = None, - content: Seq[Modifier] = Nil): Card + def apply( + panelId: String = Bootstrap.newId, + header: Option[Modifier] = None, + footer: Option[Modifier] = None, + content: Seq[Modifier] = Nil + ): Card } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/UniversalCards.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/UniversalCards.scala index 1819827..d7b1fb0 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/UniversalCards.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/card/UniversalCards.scala @@ -52,15 +52,18 @@ trait UniversalCards extends Cards { self: RenderingContext with Icons with Util div(`class` := "card-group", cards) } - def apply(panelId: String = Bootstrap.newId, - header: Option[Modifier] = None, - footer: Option[Modifier] = None, - content: Seq[Modifier] = Nil): CardBuilder = { + def apply( + panelId: String = Bootstrap.newId, + header: Option[Modifier] = None, + footer: Option[Modifier] = None, + content: Seq[Modifier] = Nil + ): CardBuilder = { CardBuilder(panelId, header, footer, content) } } - case class CardBuilder(cardId: String, header: Option[Modifier], footer: Option[Modifier], content: Seq[Modifier]) extends AbstractCard { + case class CardBuilder(cardId: String, header: Option[Modifier], footer: Option[Modifier], content: Seq[Modifier]) + extends AbstractCard { def withId(newId: String): CardBuilder = { copy(cardId = newId) } @@ -78,7 +81,7 @@ trait UniversalCards extends Cards { self: RenderingContext with Icons with Util } def withBody(content: Modifier*): CardBuilder = { - withContent(Card.body(content:_*)) + withContent(Card.body(content: _*)) } def renderTag(md: Modifier*): TagT = { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/Carousels.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/Carousels.scala index cd3e4cf..ce2b3d3 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/Carousels.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/Carousels.scala @@ -16,10 +16,11 @@ trait Carousels { self: RenderingContext with Utils ⇒ def content: Rx[Seq[Modifier]] } - /** - * A slideshow component for cycling through elements, like a carousel. - * @note Nested carousels are not supported. - * @see [[http://getbootstrap.com/javascript/#carousel]] + /** A slideshow component for cycling through elements, like a carousel. + * @note + * Nested carousels are not supported. + * @see + * [[http://getbootstrap.com/javascript/#carousel]] */ trait CarouselFactory { def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): Carousel @@ -27,8 +28,7 @@ trait Carousels { self: RenderingContext with Utils ⇒ def slide(image: String, content: Modifier*): Modifier - /** - * Modifier to switch carousel from horizontal sliding to crossfade + /** Modifier to switch carousel from horizontal sliding to crossfade * @since 4.1 */ def fade: Modifier = "carousel-fade".addClass diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/TextCarousels.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/TextCarousels.scala index c0e1906..f595d0f 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/TextCarousels.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/TextCarousels.scala @@ -9,7 +9,8 @@ import com.karasiq.bootstrap.context.RenderingContext import com.karasiq.bootstrap4.icons.Icons import com.karasiq.bootstrap4.utils.Utils -trait TextCarousels extends UniversalCarousels { self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒ +trait TextCarousels extends UniversalCarousels { + self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒ import scalaTags.all._ type Carousel = UniversalCarousel diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/UniversalCarousels.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/UniversalCarousels.scala index 12b0040..0931a5a 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/UniversalCarousels.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/carousel/UniversalCarousels.scala @@ -23,7 +23,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with val indexes = content().indices ol(`class` := "carousel-indicators")( mkIndicator(indexes.head)(`class` := "active"), - for (i <- indexes.tail) yield mkIndicator(i) + for (i ← indexes.tail) yield mkIndicator(i) ) } @@ -51,7 +51,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with } def render(md: Modifier*): Modifier = { - carousel(`data-ride` := "carousel")(md:_*) + carousel(`data-ride` := "carousel")(md: _*) } } @@ -59,7 +59,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with def slide(image: String, content: Modifier*): Modifier = { Seq( img(`class` := "d-block w-100", src := image), - div(`class` := "carousel-caption")(content:_*) + div(`class` := "carousel-caption")(content: _*) ) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/Collapses.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/Collapses.scala index 2a53f54..998aa28 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/Collapses.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/Collapses.scala @@ -20,7 +20,7 @@ trait Collapses { self: RenderingContext with Utils with BootstrapComponents ⇒ def create(title: Modifier, collapseId: String = Bootstrap.newId): Collapse def apply(title: Modifier)(content: Modifier*): Tag = { - create(title, Bootstrap.newId).renderTag(content:_*) + create(title, Bootstrap.newId).renderTag(content: _*) } } -} \ No newline at end of file +} diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/UniversalCollapses.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/UniversalCollapses.scala index 7152cfa..719e738 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/UniversalCollapses.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/collapse/UniversalCollapses.scala @@ -15,8 +15,7 @@ trait UniversalCollapses { self: RenderingContext with Collapses with Utils ⇒ } } - class UniversalCollapse(val title: Modifier, - val collapseId: String = Bootstrap.newId) extends AbstractCollapse { + class UniversalCollapse(val title: Modifier, val collapseId: String = Bootstrap.newId) extends AbstractCollapse { protected val collapseElementId = s"$collapseId-collapse" @@ -37,4 +36,4 @@ trait UniversalCollapses { self: RenderingContext with Collapses with Utils ⇒ div(Bootstrap.button(title, this.toggle), container(md)) } } -} \ No newline at end of file +} diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/Dropdowns.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/Dropdowns.scala index 6a636ea..2853b5b 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/Dropdowns.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/Dropdowns.scala @@ -17,7 +17,7 @@ trait Dropdowns { self: RenderingContext ⇒ def dropup: Tag def renderTag(md: ModifierT*): TagT = { - this.dropdown(md:_*) + this.dropdown(md: _*) } } @@ -25,13 +25,12 @@ trait Dropdowns { self: RenderingContext ⇒ def apply(title: Modifier, items: Modifier*): Dropdown def link(targetId: String, md: Modifier*): Tag - def dropup(title: Modifier, items: Modifier*): Tag = apply(title, items:_*).dropup - def item(md: Modifier*): Tag = this.link("javascript:void(0);", md:_*) + def dropup(title: Modifier, items: Modifier*): Tag = apply(title, items: _*).dropup + def item(md: Modifier*): Tag = this.link("javascript:void(0);", md: _*) - /** - * For plaintext dropdown items + /** For plaintext dropdown items * @since 4.1 */ - def `item-text`: Modifier = "dropdown-item-text".addClass + def `item-text`: Modifier = "dropdown-item-text".addClass } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/UniversalDropdowns.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/UniversalDropdowns.scala index bf8da88..fa094db 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/UniversalDropdowns.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/dropdown/UniversalDropdowns.scala @@ -19,16 +19,17 @@ trait UniversalDropdowns { self: RenderingContext with Dropdowns with Utils ⇒ } } - private[dropdown] final class UniversalDropdown(val title: Modifier, - val items: Seq[Modifier], - val dropdownId: String = Bootstrap.newId) - extends AbstractDropdown { + private[dropdown] final class UniversalDropdown( + val title: Modifier, + val items: Seq[Modifier], + val dropdownId: String = Bootstrap.newId + ) extends AbstractDropdown { def dropdown: Tag = { div(`class` := "dropdown")( Bootstrap.button( "dropdown-toggle".addClass, - id := dropdownId, + id := dropdownId, `data-toggle` := "dropdown", aria.haspopup := true, aria.expanded := false, @@ -36,7 +37,7 @@ trait UniversalDropdowns { self: RenderingContext with Dropdowns with Utils ⇒ Bootstrap.nbsp, span(`class` := "caret") ), - div(`class` := "dropdown-menu", aria.labelledby := dropdownId)(items:_*) + div(`class` := "dropdown-menu", aria.labelledby := dropdownId)(items: _*) ) } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/form/Forms.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/form/Forms.scala index 58db2c4..909f3ec 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/form/Forms.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/form/Forms.scala @@ -23,9 +23,9 @@ trait Forms { self: RenderingContext with Utils ⇒ } trait FormFactory { - type FormT = Tag + type FormT = Tag type InlineFormT = Tag - type SubmitT = Tag + type SubmitT = Tag def apply(md: Modifier*): FormT def inline(md: Modifier*): InlineFormT @@ -53,7 +53,7 @@ trait Forms { self: RenderingContext with Utils ⇒ def isDefaultOption: Boolean def inputType: String = "radio" - def inputId: String = this.radioId + def inputId: String = this.radioId } trait AbstractFormRadioGroup extends AbstractFormInput { @@ -64,22 +64,27 @@ trait Forms { self: RenderingContext with Utils ⇒ } trait FormInputFactory { - type InputT = Tag - type RadioT = AbstractFormRadio + type InputT = Tag + type RadioT = AbstractFormRadio type RadioGroupT = AbstractFormRadioGroup - type SelectT = AbstractFormSelect + type SelectT = AbstractFormSelect def ofType(inputType: String, label: Modifier, md: Modifier*): InputT - def text(label: Modifier, md: Modifier*): Tag = this.ofType("text", label, md:_*) - def number(label: Modifier, md: Modifier*): Tag = this.ofType("number", label, md:_*) - def email(label: Modifier, md: Modifier*): Tag = this.ofType("email", label, md:_*) - def password(label: Modifier, md: Modifier*): Tag = this.ofType("password", label, md:_*) + def text(label: Modifier, md: Modifier*): Tag = this.ofType("text", label, md: _*) + def number(label: Modifier, md: Modifier*): Tag = this.ofType("number", label, md: _*) + def email(label: Modifier, md: Modifier*): Tag = this.ofType("email", label, md: _*) + def password(label: Modifier, md: Modifier*): Tag = this.ofType("password", label, md: _*) def file(label: Modifier, md: Modifier*): Tag def textArea(title: Modifier, md: Modifier*): InputT def checkbox(label: Modifier, md: Modifier*): InputT - def radio(title: Modifier, radioName: String, radioValue: String, - initialState: Boolean = false, radioId: String = Bootstrap.newId): RadioT + def radio( + title: Modifier, + radioName: String, + radioValue: String, + initialState: Boolean = false, + radioId: String = Bootstrap.newId + ): RadioT def radioGroup[T <: RadioT](radios: Rx[Seq[T]]): RadioGroupT @@ -108,7 +113,7 @@ trait Forms { self: RenderingContext with Utils ⇒ } // Default - def apply(label: Modifier, md: Modifier*): Tag = this.text(label, md:_*) + def apply(label: Modifier, md: Modifier*): Tag = this.text(label, md: _*) } trait FormInputGroupFactory { @@ -120,11 +125,10 @@ trait Forms { self: RenderingContext with Utils ⇒ def addon(md: Modifier*): AddonT def apply(label: Modifier, md: Modifier*): GroupT - def label(md: Modifier*): InputT = scalaTags.tags.label(md) - def text(md: Modifier*): InputT = this.createInput("text", md:_*) - def number(md: Modifier*): InputT = this.createInput("number", md:_*) - def email(md: Modifier*): InputT = this.createInput("email", md:_*) - def password(md: Modifier*): InputT = this.createInput("password", md:_*) + def label(md: Modifier*): InputT = scalaTags.tags.label(md) + def text(md: Modifier*): InputT = this.createInput("text", md: _*) + def number(md: Modifier*): InputT = this.createInput("number", md: _*) + def email(md: Modifier*): InputT = this.createInput("email", md: _*) + def password(md: Modifier*): InputT = this.createInput("password", md: _*) } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/Grids.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/Grids.scala index 5f081c6..891fb84 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/Grids.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/Grids.scala @@ -10,19 +10,19 @@ trait Grids { self: RenderingContext ⇒ type GridSystem <: AbstractGridSystem val GridSystem: GridSystem - /** - * @see [[https://getbootstrap.com/docs/4.0/layout/grid/]] + /** @see + * [[https://getbootstrap.com/docs/4.0/layout/grid/]] */ trait AbstractGridSystem { type ContainerT = Tag - type RowT = Tag + type RowT = Tag def container: ContainerT def containerFluid: ContainerT def row: RowT def col: AbstractColumnFactory - + def mkRow(md: Modifier*): Tag = { row(col(col.maxSize).asDiv(md)) } @@ -31,7 +31,7 @@ trait Grids { self: RenderingContext ⇒ trait AbstractColumn extends ModifierFactory { def size: Int def asDiv: Tag - def apply(md: ModifierT*): Tag = this.asDiv.apply(md:_*) + def apply(md: ModifierT*): Tag = this.asDiv.apply(md: _*) } trait AbstractColumnFactory { @@ -44,13 +44,19 @@ trait Grids { self: RenderingContext ⇒ def lg(size: Int = 0): AbstractColumn def xl(size: Int = 0): AbstractColumn - def responsive(xsSize: Int = maxSize, smSize: Int = maxSize, mdSize: Int = maxSize, lgSize: Int = maxSize, xlSize: Int = maxSize): AbstractColumn = new AbstractColumn { - override val createModifier: ModifierT = Seq[ModifierT](xs(xsSize), sm(smSize), md(mdSize), lg(lgSize), xl(xlSize)) - def size: Int = lgSize + def responsive( + xsSize: Int = maxSize, + smSize: Int = maxSize, + mdSize: Int = maxSize, + lgSize: Int = maxSize, + xlSize: Int = maxSize + ): AbstractColumn = new AbstractColumn { + override val createModifier: ModifierT = + Seq[ModifierT](xs(xsSize), sm(smSize), md(mdSize), lg(lgSize), xl(xlSize)) + def size: Int = lgSize def asDiv: Tag = div(createModifier) } def apply(size: Int): AbstractColumn = this.responsive(size, size, size, size, size) } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/UniversalGrids.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/UniversalGrids.scala index fcfed31..e11ad67 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/UniversalGrids.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/grid/UniversalGrids.scala @@ -9,11 +9,11 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ type GridSystem = UniversalGridSystem object GridSystem extends UniversalGridSystem - + trait UniversalGridSystem extends AbstractGridSystem { - val container: Tag = div(`class` := "container") + val container: Tag = div(`class` := "container") val containerFluid: Tag = div(`class` := "container-fluid") - val row: Tag = div(`class` := "row") + val row: Tag = div(`class` := "row") object col extends AbstractColumnFactory { val minSize: Int = 1 @@ -29,9 +29,9 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ if (_size == 0) baseName else baseName + "-" + _size } override val createModifier = className.addClass - override val size: Int = _size + override val size: Int = _size } - + def xs(size: Int): GridColSize = singleColSize("", size) def sm(size: Int): GridColSize = singleColSize("sm", size) def md(size: Int): GridColSize = singleColSize("md", size) @@ -40,4 +40,3 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ } } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/icons/UniversalIcons.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/icons/UniversalIcons.scala index e8b955b..36d02f6 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/icons/UniversalIcons.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/icons/UniversalIcons.scala @@ -18,17 +18,17 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit } def fa(iconName: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { - FontAwesome(iconName, styles:_*) + FontAwesome(iconName, styles: _*) } def faFw(iconName: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { - FontAwesome(iconName, FontAwesome.fixedWidth +: styles:_*) + FontAwesome(iconName, FontAwesome.fixedWidth +: styles: _*) } } final class BootstrapGlyphicon(val iconName: String) extends BootstrapHtmlComponent with IconModifier { override def renderTag(md: ModifierT*): TagT = { - span(`class` := "glyphicon glyphicon-" + iconName, aria.hidden := true)(md:_*) + span(`class` := "glyphicon glyphicon-" + iconName, aria.hidden := true)(md: _*) } } @@ -38,9 +38,11 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit } } - final class FontAwesomeIcon(val iconName: String, val styles: Seq[FontAwesomeStyle]) extends BootstrapHtmlComponent with IconModifier { + final class FontAwesomeIcon(val iconName: String, val styles: Seq[FontAwesomeStyle]) + extends BootstrapHtmlComponent + with IconModifier { override def renderTag(md: ModifierT*): TagT = { - i(`class` := "fa fa-" + iconName, styles, aria.hidden := true)(md:_*) + i(`class` := "fa fa-" + iconName, styles, aria.hidden := true)(md: _*) } } @@ -48,8 +50,8 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit override val createModifier = ("fa-" + styleName).addClass } - /** - * @see [[https://fortawesome.github.io/Font-Awesome/examples]] + /** @see + * [[https://fortawesome.github.io/Font-Awesome/examples]] */ object FontAwesome { def apply(name: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { @@ -63,10 +65,10 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit // Size modifiers lazy val large: FontAwesomeStyle = "lg" - lazy val x2: FontAwesomeStyle = "2x" - lazy val x3: FontAwesomeStyle = "3x" - lazy val x4: FontAwesomeStyle = "4x" - lazy val x5: FontAwesomeStyle = "5x" + lazy val x2: FontAwesomeStyle = "2x" + lazy val x3: FontAwesomeStyle = "3x" + lazy val x4: FontAwesomeStyle = "4x" + lazy val x5: FontAwesomeStyle = "5x" // Fixed width lazy val fixedWidth: FontAwesomeStyle = "fw" @@ -76,20 +78,20 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit lazy val line: FontAwesomeStyle = "li" // Bordered & Pulled icons - lazy val border: FontAwesomeStyle = "border" + lazy val border: FontAwesomeStyle = "border" lazy val pullRight: FontAwesomeStyle = "pull-right" - lazy val pullLeft: FontAwesomeStyle = "pull-left" + lazy val pullLeft: FontAwesomeStyle = "pull-left" // Animated icons - lazy val spin: FontAwesomeStyle = "spin" + lazy val spin: FontAwesomeStyle = "spin" lazy val pulse: FontAwesomeStyle = "pulse" // Rotated & Flipped - lazy val rotate90: FontAwesomeStyle = "rotate-90" - lazy val rotate180: FontAwesomeStyle = "rotate-90" - lazy val rotate270: FontAwesomeStyle = "rotate-90" + lazy val rotate90: FontAwesomeStyle = "rotate-90" + lazy val rotate180: FontAwesomeStyle = "rotate-90" + lazy val rotate270: FontAwesomeStyle = "rotate-90" lazy val flipHorizontal: FontAwesomeStyle = "flip-horizontal" - lazy val flipVertical: FontAwesomeStyle = "flip-vertical" + lazy val flipVertical: FontAwesomeStyle = "flip-vertical" // Stacked icons def stacked(icons: Tag*): Tag = { @@ -100,13 +102,13 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit lazy val stacked2x: FontAwesomeStyle = "stack-2x" } - //noinspection SpellCheckingInspection + // noinspection SpellCheckingInspection implicit class BootstrapIconsOps(iconName: String) { - def glyphicon: BootstrapGlyphicon = Icon.glyphicon(iconName) - def fontAwesome(styles: FontAwesomeStyle*): FontAwesomeIcon = Icon.fa(iconName, styles:_*) + def glyphicon: BootstrapGlyphicon = Icon.glyphicon(iconName) + def fontAwesome(styles: FontAwesomeStyle*): FontAwesomeIcon = Icon.fa(iconName, styles: _*) // Shortcuts - def faIcon: FontAwesomeIcon = this.fontAwesome() + def faIcon: FontAwesomeIcon = this.fontAwesome() def faFwIcon: FontAwesomeIcon = this.fontAwesome(FontAwesome.fixedWidth) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/ModalStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/ModalStyles.scala index 2e655bb..7419a29 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/ModalStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/ModalStyles.scala @@ -12,15 +12,15 @@ trait ModalStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class CustomModalDialogSize private[modal](size: String) extends ModalDialogSize { + final class CustomModalDialogSize private[modal] (size: String) extends ModalDialogSize { val className: String = size - val createModifier = className.addClass + val createModifier = className.addClass } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object ModalDialogSize { val default = DefaultModalDialogSize - val small = new CustomModalDialogSize("modal-sm") - val large = new CustomModalDialogSize("modal-lg") + val small = new CustomModalDialogSize("modal-sm") + val large = new CustomModalDialogSize("modal-lg") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/Modals.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/Modals.scala index 45d5cbd..195d2cf 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/Modals.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/Modals.scala @@ -5,7 +5,8 @@ import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap4.buttons.Buttons import com.karasiq.bootstrap4.utils.Utils -trait Modals extends ModalStyles { self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons ⇒ +trait Modals extends ModalStyles { + self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons ⇒ import scalaTags.all._ type Modal <: AbstractModal with BootstrapHtmlComponent @@ -23,17 +24,22 @@ trait Modals extends ModalStyles { self: RenderingContext with Utils with Bootst def dismiss: Modifier } - /** - * Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. - * @see [[https://getbootstrap.com/javascript/#modals]] + /** Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. + * @see + * [[https://getbootstrap.com/javascript/#modals]] */ trait ModalFactory { def closeButton(title: String = "Close"): Tag def button(md: Modifier*): Tag - def apply(title: Modifier = "Modal dialog", body: Modifier = "", buttons: Modifier = closeButton(), - style: Modifier = Bootstrap.noModifier, dialogStyle: Modifier = ModalDialogSize.default, - contentStyle: Modifier = Bootstrap.noModifier, modalId: String = Bootstrap.newId): Modal + def apply( + title: Modifier = "Modal dialog", + body: Modifier = "", + buttons: Modifier = closeButton(), + style: Modifier = Bootstrap.noModifier, + dialogStyle: Modifier = ModalDialogSize.default, + contentStyle: Modifier = Bootstrap.noModifier, + modalId: String = Bootstrap.newId + ): Modal } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/UniversalModals.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/UniversalModals.scala index 0b15472..4dd82ea 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/UniversalModals.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/modal/UniversalModals.scala @@ -5,16 +5,23 @@ import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap4.buttons.Buttons import com.karasiq.bootstrap4.utils.Utils -trait UniversalModals { self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons with Modals with ModalStyles ⇒ +trait UniversalModals { + self: RenderingContext + with Utils + with BootstrapComponents + with ClassModifiers + with Buttons + with Modals + with ModalStyles ⇒ import scalaTags.all._ import BootstrapAttrs._ type Modal = ModalBuilder - /** - * Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. - * @see [[https://getbootstrap.com/javascript/#modals]] + /** Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. + * @see + * [[https://getbootstrap.com/javascript/#modals]] */ object Modal extends ModalFactory { val dismiss: Modifier = { @@ -29,9 +36,15 @@ trait UniversalModals { self: RenderingContext with Utils with BootstrapComponen Button(ButtonOutline.primary)(md) } - def apply(title: Modifier = "Modal dialog", body: Modifier = "", buttons: Modifier = closeButton(), - style: Modifier = Bootstrap.noModifier, dialogStyle: Modifier = ModalDialogSize.default, - contentStyle: Modifier = Bootstrap.noModifier, modalId: String = Bootstrap.newId): ModalBuilder = { + def apply( + title: Modifier = "Modal dialog", + body: Modifier = "", + buttons: Modifier = closeButton(), + style: Modifier = Bootstrap.noModifier, + dialogStyle: Modifier = ModalDialogSize.default, + contentStyle: Modifier = Bootstrap.noModifier, + modalId: String = Bootstrap.newId + ): ModalBuilder = { ModalBuilder(title, body, buttons, style, dialogStyle, contentStyle, modalId) } } @@ -75,19 +88,26 @@ trait UniversalModals { self: RenderingContext with Utils with BootstrapComponen } def renderTag(md: ModifierT*): TagT = { - modal(md:_*) + modal(md: _*) } } - case class ModalBuilder(title: Modifier, body: Modifier, buttons: Modifier, style: Modifier, - dialogStyle: Modifier, contentStyle: Modifier, modalId: String) extends UniversalModal { - - def withTitle(md: Modifier*): ModalBuilder = copy(title = md) - def withBody(md: Modifier*): ModalBuilder = copy(body = md) - def withButtons(md: Modifier*): ModalBuilder = copy(buttons = md) - def withStyle(md: Modifier*): ModalBuilder = copy(style = md) - def withDialogStyle(md: Modifier*): ModalBuilder = copy(dialogStyle = md) + case class ModalBuilder( + title: Modifier, + body: Modifier, + buttons: Modifier, + style: Modifier, + dialogStyle: Modifier, + contentStyle: Modifier, + modalId: String + ) extends UniversalModal { + + def withTitle(md: Modifier*): ModalBuilder = copy(title = md) + def withBody(md: Modifier*): ModalBuilder = copy(body = md) + def withButtons(md: Modifier*): ModalBuilder = copy(buttons = md) + def withStyle(md: Modifier*): ModalBuilder = copy(style = md) + def withDialogStyle(md: Modifier*): ModalBuilder = copy(dialogStyle = md) def withContentStyle(md: Modifier*): ModalBuilder = copy(contentStyle = md) - def withId(id: String): ModalBuilder = copy(modalId = id) + def withId(id: String): ModalBuilder = copy(modalId = id) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBarStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBarStyles.scala index f7f6b31..5691762 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBarStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBarStyles.scala @@ -5,23 +5,23 @@ import com.karasiq.bootstrap.context.RenderingContext trait NavigationBarStyles { self: RenderingContext ⇒ import scalaTags.all._ - class NavigationBarStyle private[navbar](style: String) extends ModifierFactory { - val className = s"navbar-$style" + class NavigationBarStyle private[navbar] (style: String) extends ModifierFactory { + val className = s"navbar-$style" val createModifier = className.addClass } object NavigationBarStyle { // Style lazy val light = new NavigationBarStyle("light") - lazy val dark = new NavigationBarStyle("dark") + lazy val dark = new NavigationBarStyle("dark") // Position - lazy val fixedTop = new NavigationBarStyle("fixed-top") + lazy val fixedTop = new NavigationBarStyle("fixed-top") lazy val fixedBottom = new NavigationBarStyle("fixed-bottom") - lazy val stickyTop = new NavigationBarStyle("sticky-top") + lazy val stickyTop = new NavigationBarStyle("sticky-top") } - final class NavigationBarExpand private[navbar](size: String) extends NavigationBarStyle("expand-" + size) + final class NavigationBarExpand private[navbar] (size: String) extends NavigationBarStyle("expand-" + size) object NavigationBarExpand { lazy val sm = new NavigationBarExpand("sm") diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBars.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBars.scala index 113c833..228be25 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBars.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/NavigationBars.scala @@ -10,7 +10,8 @@ import com.karasiq.bootstrap4.grid.Grids import com.karasiq.bootstrap4.icons.Icons import com.karasiq.bootstrap4.utils.Utils -trait NavigationBars extends NavigationBarStyles { self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers ⇒ +trait NavigationBars extends NavigationBarStyles { + self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers ⇒ import scalaTags.all._ // ----------------------------------------------------------------------- @@ -20,9 +21,9 @@ trait NavigationBars extends NavigationBarStyles { self: RenderingContext with I case class NavigationTabs(tabs: Rx[Seq[NavigationTab]]) object NavigationTabs { - implicit def toRxSeq(nt: NavigationTabs): Rx[Seq[NavigationTab]] = nt.tabs + implicit def toRxSeq(nt: NavigationTabs): Rx[Seq[NavigationTab]] = nt.tabs implicit def fromRxSeq(seq: Rx[Seq[NavigationTab]]): NavigationTabs = new NavigationTabs(seq) - implicit def fromSeq(seq: Seq[NavigationTab]): NavigationTabs = fromRxSeq(Rx(seq)) + implicit def fromSeq(seq: Seq[NavigationTab]): NavigationTabs = fromRxSeq(Rx(seq)) } // ----------------------------------------------------------------------- @@ -52,21 +53,36 @@ trait NavigationBars extends NavigationBarStyles { self: RenderingContext with I } trait NavigationBarFactory { - /** - * Creates navigation bar - * @param tabs Navbar tabs - * @param barId Bar id attribute - * @param brand Navbar "brand" content - * @param styles Navbar styles - * @param container Navbar container type - * @param contentContainer Navbar content container type - * @return Navigation bar + + /** Creates navigation bar + * @param tabs + * Navbar tabs + * @param barId + * Bar id attribute + * @param brand + * Navbar "brand" content + * @param styles + * Navbar styles + * @param container + * Navbar container type + * @param contentContainer + * Navbar content container type + * @return + * Navigation bar */ - def apply(tabs: Seq[NavigationTab] = Nil, barId: String = Bootstrap.newId, brand: Modifier = "Navigation", - styles: Seq[Modifier] = Seq(NavigationBarStyle.light, NavigationBarStyle.fixedTop, NavigationBarExpand.lg, Bootstrap.background.light), - inlineContent: Modifier = (), - container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), - contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md))): NavigationBar + def apply( + tabs: Seq[NavigationTab] = Nil, + barId: String = Bootstrap.newId, + brand: Modifier = "Navigation", + styles: Seq[Modifier] = Seq( + NavigationBarStyle.light, + NavigationBarStyle.fixedTop, + NavigationBarExpand.lg, + Bootstrap.background.light + ), + inlineContent: Modifier = (), + container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), + contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md)) + ): NavigationBar } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/UniversalNavigationBars.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/UniversalNavigationBars.scala index c9bb6a4..a0b4619 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/UniversalNavigationBars.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/navbar/UniversalNavigationBars.scala @@ -8,7 +8,15 @@ import com.karasiq.bootstrap4.grid.Grids import com.karasiq.bootstrap4.icons.Icons import com.karasiq.bootstrap4.utils.Utils -trait UniversalNavigationBars { self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers with NavigationBars with NavigationBarStyles ⇒ +trait UniversalNavigationBars { + self: RenderingContext + with Icons + with Grids + with Utils + with BootstrapComponents + with ClassModifiers + with NavigationBars + with NavigationBarStyles ⇒ import scalaTags.all._ import BootstrapAttrs._ @@ -26,24 +34,44 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit type NavigationBar = NavigationBarBuilder object NavigationBar extends NavigationBarFactory { - def apply(tabs: Seq[NavigationTab] = Nil, barId: String = Bootstrap.newId, brand: Modifier = "Navigation", - styles: Seq[Modifier] = Seq(NavigationBarStyle.light, NavigationBarStyle.fixedTop, NavigationBarExpand.lg, Bootstrap.background.light), - inlineContent: Modifier = (), - container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), - contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md))): NavigationBarBuilder = { + def apply( + tabs: Seq[NavigationTab] = Nil, + barId: String = Bootstrap.newId, + brand: Modifier = "Navigation", + styles: Seq[Modifier] = Seq( + NavigationBarStyle.light, + NavigationBarStyle.fixedTop, + NavigationBarExpand.lg, + Bootstrap.background.light + ), + inlineContent: Modifier = (), + container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), + contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md)) + ): NavigationBarBuilder = { NavigationBarBuilder(tabs, barId, brand, styles, inlineContent, container, contentContainer) } } - class UniversalNavigation(val navTabs: NavigationTabs, val navType: String = "tabs", - val navId: String = Bootstrap.newId) - extends AbstractNavigation with BootstrapHtmlComponent { + class UniversalNavigation( + val navTabs: NavigationTabs, + val navType: String = "tabs", + val navId: String = Bootstrap.newId + ) extends AbstractNavigation + with BootstrapHtmlComponent { private def tabContainer = Rx { def renderTab(tab: NavigationTab, active: Boolean): Tag = { val idLink = this.tabId(tab.id) li(`class` := "nav-item", tab.modifiers)( - a(`class` := "nav-link", "active".classIf(active), href := "#", aria.controls := idLink, role := "tab", `data-toggle` := "tab", `data-target` := s"#$idLink")( + a( + `class` := "nav-link", + "active".classIf(active), + href := "#", + aria.controls := idLink, + role := "tab", + `data-toggle` := "tab", + `data-target` := s"#$idLink" + )( if (tab.icon != NoIcon) Seq[Modifier](tab.icon, Bootstrap.nbsp) else (), tab.name ) @@ -51,12 +79,14 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } val tabs = navTabs() - val tag = ul(`class` := "nav nav-" + navType, role := "tablist") + val tag = ul(`class` := "nav nav-" + navType, role := "tablist") - if (tabs.nonEmpty) tag( - renderTab(tabs.head, active = true), - for (t ← tabs.tail) yield renderTab(t, active = false) - ) else tag + if (tabs.nonEmpty) + tag( + renderTab(tabs.head, active = true), + for (t ← tabs.tail) yield renderTab(t, active = false) + ) + else tag } private def tabContentContainer = Rx { @@ -69,7 +99,7 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() div("tab-content".addClass)( renderPanel(tabs.head)("active".addClass, "show".addClass), - for (t <- tabs.tail) yield renderPanel(t) + for (t ← tabs.tail) yield renderPanel(t) ) } @@ -78,17 +108,18 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } } - /** - * Simple bootstrap navigation bar + /** Simple bootstrap navigation bar */ - class UniversalNavigationBar(val navTabs: NavigationTabs, - val navId: String, - brand: Modifier, - styles: Seq[Modifier], - inlineContent: Modifier, - container: Modifier ⇒ Modifier, - contentContainer: Modifier ⇒ Modifier) - extends AbstractNavigationBar with BootstrapComponent { + class UniversalNavigationBar( + val navTabs: NavigationTabs, + val navId: String, + brand: Modifier, + styles: Seq[Modifier], + inlineContent: Modifier, + container: Modifier ⇒ Modifier, + contentContainer: Modifier ⇒ Modifier + ) extends AbstractNavigationBar + with BootstrapComponent { private[this] val nav = tag("nav") @@ -97,7 +128,16 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val idLink = this.tabId(tab.id) li( `class` := "nav-item", - a(href := "#", `class` := "nav-link", "active".classIf(active), aria.controls := idLink, role := "tab", `data-toggle` := "tab", `data-target` := s"#$idLink", id := idLink + "link")( + a( + href := "#", + `class` := "nav-link", + "active".classIf(active), + aria.controls := idLink, + role := "tab", + `data-toggle` := "tab", + `data-target` := s"#$idLink", + id := idLink + "link" + )( if (tab.icon != NoIcon) Seq[Modifier](tab.icon, Bootstrap.nbsp) else (), tab.name ), @@ -106,17 +146,24 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } val tabs = navTabs() - val tag = ul(`class` := "navbar-nav nav mr-auto", role := "tablist") - if (tabs.nonEmpty) tag( - renderTab(active = true, tabs.head), - for (tab <- tabs.tail) yield renderTab(active = false, tab) - ) else tag + val tag = ul(`class` := "navbar-nav nav mr-auto", role := "tablist") + if (tabs.nonEmpty) + tag( + renderTab(active = true, tabs.head), + for (tab ← tabs.tail) yield renderTab(active = false, tab) + ) + else tag } private[this] val tabContentContainer = Rx { def renderContent(active: Boolean, tab: NavigationTab): Tag = { val tabId = this.tabId(tab.id) - div(id := tabId, role := "tabpanel", `class` := (if (active) "tab-pane active fade show" else "tab-pane fade"), aria.labelledby := tabId + "link")( + div( + id := tabId, + role := "tabpanel", + `class` := (if (active) "tab-pane active fade show" else "tab-pane fade"), + aria.labelledby := tabId + "link" + )( tab.content ) } @@ -124,14 +171,23 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() div(id := s"$navId-tabcontent", `class` := "tab-content")( renderContent(active = true, tabs.head), - for (tab <- tabs.tail) yield renderContent(active = false, tab) + for (tab ← tabs.tail) yield renderContent(active = false, tab) ) } def navbar(md: Modifier*): Tag = { nav(`class` := "navbar", styles)( a(href := "javascript:void(0);", `class` := "navbar-brand", brand), - button(`class` := "navbar-toggler", `type` := "button", `data-toggle` := "collapse", `data-target` := "#" + navId, aria.controls := navId, aria.expanded := false, aria.label := "Toggle navigation", span(`class` := "navbar-toggler-icon")), + button( + `class` := "navbar-toggler", + `type` := "button", + `data-toggle` := "collapse", + `data-target` := "#" + navId, + aria.controls := navId, + aria.expanded := false, + aria.label := "Toggle navigation", + span(`class` := "navbar-toggler-icon") + ), div(`class` := "collapse navbar-collapse", id := navId, tabContainer, inlineContent, md) ) } @@ -141,22 +197,29 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } def render(md: ModifierT*): ModifierT = { - Seq(container(navbar(md:_*)), contentContainer(content)) + Seq(container(navbar(md: _*)), contentContainer(content)) } } - //noinspection TypeAnnotation - case class NavigationBarBuilder(navTabs: NavigationTabs, navId: String, - brand: Modifier, styles: Seq[Modifier], inlineContent: Modifier, - container: Modifier ⇒ Modifier, contentContainer: Modifier ⇒ Modifier) extends AbstractNavigationBar with BootstrapComponent { - - def withTabs(tabs: NavigationTabs) = copy(navTabs = tabs) - def withTabs(tabs: NavigationTab*) = copy(navTabs = NavigationTabs.fromSeq(tabs)) - def withId(id: String) = copy(navId = id) - def withBrand(brand: Modifier*) = copy(brand = brand) - def withStyles(styles: Modifier*) = copy(styles = styles) - def withInlineContent(inlineContent: Modifier) = copy(inlineContent = inlineContent) - def withContainer(container: Modifier ⇒ Modifier) = copy(container = container) + // noinspection TypeAnnotation + case class NavigationBarBuilder( + navTabs: NavigationTabs, + navId: String, + brand: Modifier, + styles: Seq[Modifier], + inlineContent: Modifier, + container: Modifier ⇒ Modifier, + contentContainer: Modifier ⇒ Modifier + ) extends AbstractNavigationBar + with BootstrapComponent { + + def withTabs(tabs: NavigationTabs) = copy(navTabs = tabs) + def withTabs(tabs: NavigationTab*) = copy(navTabs = NavigationTabs.fromSeq(tabs)) + def withId(id: String) = copy(navId = id) + def withBrand(brand: Modifier*) = copy(brand = brand) + def withStyles(styles: Modifier*) = copy(styles = styles) + def withInlineContent(inlineContent: Modifier) = copy(inlineContent = inlineContent) + def withContainer(container: Modifier ⇒ Modifier) = copy(container = container) def withContentContainer(contentContainer: Modifier ⇒ Modifier) = copy(contentContainer = contentContainer) def build(): UniversalNavigationBar = { @@ -164,7 +227,7 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } def render(md: ModifierT*): ModifierT = { - build().render(md:_*) + build().render(md: _*) } } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/pagination/UniversalPageSelectors.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/pagination/UniversalPageSelectors.scala index 58f213d..a56c651 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/pagination/UniversalPageSelectors.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/pagination/UniversalPageSelectors.scala @@ -15,18 +15,31 @@ trait UniversalPageSelectors extends PageSelectors { self: RenderingContext ⇒ } class UniversalPageSelector(val pages: Rx[Int], val currentPage: Var[Int]) - extends AbstractPageSelector with BootstrapHtmlComponent { + extends AbstractPageSelector + with BootstrapHtmlComponent { def previousLink: TagT = { - a(`class` := "page-link", href := "#", aria.label := "Previous", onclick := Callback.onClick { _ ⇒ - if (currentPage.now > 1) currentPage.update(currentPage.now - 1) - }, span(aria.hidden := true, raw("«"))) + a( + `class` := "page-link", + href := "#", + aria.label := "Previous", + onclick := Callback.onClick { _ ⇒ + if (currentPage.now > 1) currentPage.update(currentPage.now - 1) + }, + span(aria.hidden := true, raw("«")) + ) } def nextLink: TagT = { - a(`class` := "page-link", href := "#", aria.label := "Next", onclick := Callback.onClick { _ ⇒ - if (currentPage.now < pages.now) currentPage.update(currentPage.now + 1) - }, span(aria.hidden := true, raw("»"))) + a( + `class` := "page-link", + href := "#", + aria.label := "Next", + onclick := Callback.onClick { _ ⇒ + if (currentPage.now < pages.now) currentPage.update(currentPage.now + 1) + }, + span(aria.hidden := true, raw("»")) + ) } def pageLink(page: Int): TagT = { @@ -59,11 +72,15 @@ trait UniversalPageSelectors extends PageSelectors { self: RenderingContext ⇒ def renderTag(md: ModifierT*): TagT = { val nav = tag("nav") - nav(Rx(ul(`class` := "pagination justify-content-center", Rx(pages() == 1).reactiveHide, md)( - previousPageButton, - for(page ← 1 to pages()) yield pageButton(page), - nextPageButton - ))) + nav( + Rx( + ul(`class` := "pagination justify-content-center", Rx(pages() == 1).reactiveHide, md)( + previousPageButton, + for (page ← 1 to pages()) yield pageButton(page), + nextPageButton + ) + ) + ) } } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/Popovers.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/Popovers.scala index d02ea17..f7dc5ae 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/Popovers.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/Popovers.scala @@ -48,8 +48,8 @@ trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips w def options: PopoverOptions } - /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers whose both title and content - * are zero-length are never displayed. + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. * @see * [[http://getbootstrap.com/javascript/#popovers]] */ diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/TextPopovers.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/TextPopovers.scala index 4f9bbb4..477f4c6 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/TextPopovers.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/popover/TextPopovers.scala @@ -11,17 +11,17 @@ trait TextPopovers { self: RenderingContext with BootstrapComponents with Toolti import scalaTags.all._ import BootstrapAttrs._ - + class TextPopover(val options: PopoverOptions) extends Popover { override def render(md: ModifierT*): ModifierT = { (`data-toggle` := "popover") +: Bootstrap.dataProps(options.toStrings: _*) +: md } } - /** - * Add small overlays of content, like those on the iPad, to any element for housing secondary information. - * Popovers whose both title and content are zero-length are never displayed. - * @see [[http://getbootstrap.com/javascript/#popovers]] + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#popovers]] */ object Popover extends PopoverFactory { def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover = { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBarStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBarStyles.scala index 44ac6bb..7f5b9a0 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBarStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBarStyles.scala @@ -14,7 +14,7 @@ trait ProgressBarStyles { self: RenderingContext ⇒ private[progressbar] def style(style: String): ProgressBarStyle = new ProgressBarStyle { val className = s"progress-bar-$style" } - lazy val striped: ProgressBarStyle = style("striped") + lazy val striped: ProgressBarStyle = style("striped") lazy val animated: ProgressBarStyle = style("animated") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBars.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBars.scala index a675053..e9f8a89 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBars.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/ProgressBars.scala @@ -7,7 +7,8 @@ import rx.Rx import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ReactiveBinds, ReactiveImplicits, RenderingContext} -trait ProgressBars extends ProgressBarStyles { self: RenderingContext with BootstrapComponents with ReactiveBinds with ReactiveImplicits ⇒ +trait ProgressBars extends ProgressBarStyles { + self: RenderingContext with BootstrapComponents with ReactiveBinds with ReactiveImplicits ⇒ type ProgressBar <: AbstractProgressBar with BootstrapHtmlComponent val ProgressBar: ProgressBarFactory @@ -16,13 +17,12 @@ trait ProgressBars extends ProgressBarStyles { self: RenderingContext with Boots def progress: Rx[Int] } - /** - * Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars. - * @see [[http://getbootstrap.com/components/#progress]] + /** Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars. + * @see + * [[http://getbootstrap.com/components/#progress]] */ trait ProgressBarFactory { def basic(value: Rx[Int]): ProgressBar def withLabel(value: Rx[Int]): ProgressBar } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/UniversalProgressBars.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/UniversalProgressBars.scala index 648d2c8..82f2990 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/UniversalProgressBars.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/progressbar/UniversalProgressBars.scala @@ -33,8 +33,16 @@ trait UniversalProgressBars { self: RenderingContext with BootstrapComponents wi override def renderTag(md: ModifierT*): TagT = { div("progress".addClass)( - div("progress-bar".addClass, role := "progressbar", Rx(aria.valuenow := progress()).auto, - aria.valuemin := 0, aria.valuemax := 100, Rx[Modifier](width := progress().pct).auto, content, md) + div( + "progress-bar".addClass, + role := "progressbar", + Rx(aria.valuenow := progress()).auto, + aria.valuemin := 0, + aria.valuemax := 100, + Rx[Modifier](width := progress().pct).auto, + content, + md + ) ) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/PagedTables.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/PagedTables.scala index b6a8347..1d32448 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/PagedTables.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/PagedTables.scala @@ -14,8 +14,7 @@ trait PagedTables { self: RenderingContext with BootstrapComponents with Tables type PagedTable <: AbstractPagedTable with BootstrapHtmlComponent val PagedTable: PagedTableFactory - /** - * Table with pagination + /** Table with pagination */ trait AbstractPagedTable { def table: Table @@ -43,7 +42,11 @@ trait PagedTables { self: RenderingContext with BootstrapComponents with Tables } } - private[table] def pagedDataRx(allContent: Rx[Seq[TableRow]], currentPage: Rx[Int], rowsPerPage: Int): Rx[Seq[TableRow]] = { + private[table] def pagedDataRx( + allContent: Rx[Seq[TableRow]], + currentPage: Rx[Int], + rowsPerPage: Int + ): Rx[Seq[TableRow]] = { Rx { val data = allContent() val page = currentPage() diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/SortableTables.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/SortableTables.scala index 1b79cc7..1a23454 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/SortableTables.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/SortableTables.scala @@ -14,9 +14,12 @@ trait SortableTables extends TableCols { self: RenderingContext with PagedTables val SortableTable: AbstractSortableTableFactory trait AbstractSortableTableFactory { - def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]], - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T] + def apply[T]( + items: Rx[Seq[T]], + columns: Rx[Seq[TableCol[T, _]]], + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ): SortableTable[T] } trait AbstractSortableTable[T] { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableCols.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableCols.scala index 14e8395..6634441 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableCols.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableCols.scala @@ -16,6 +16,6 @@ trait TableCols { self: RenderingContext ⇒ def apply[T](cols: TableCol[T, _]*) = cols } - type GenTableCol[T] = TableCol[T, Any] + type GenTableCol[T] = TableCol[T, Any] type GenTableCols[T] = Seq[GenTableCol[T]] } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableRows.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableRows.scala index ce07e02..2e35148 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableRows.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableRows.scala @@ -12,28 +12,28 @@ trait TableRows { self: RenderingContext with ClassModifiers with Utils ⇒ def styleName: String } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object TableRowStyle { case object Default extends TableRowStyle { - val styleName = "default" + val styleName = "default" val createModifier = Bootstrap.noModifier } - case class Styled(styleName: String) extends TableRowStyle with StyleClassModifier { - val className = s"table-$styleName" + case class Styled(styleName: String) extends TableRowStyle with StyleClassModifier { + val className = s"table-$styleName" val createModifier = className.addClass } - def default = Default - lazy val active = Styled("active") - lazy val primary = Styled("primary") + def default = Default + lazy val active = Styled("active") + lazy val primary = Styled("primary") lazy val secondary = Styled("secondary") - lazy val success = Styled("success") - lazy val warning = Styled("warning") - lazy val danger = Styled("danger") - lazy val info = Styled("info") - lazy val light = Styled("light") - lazy val dark = Styled("dark") + lazy val success = Styled("success") + lazy val warning = Styled("warning") + lazy val danger = Styled("danger") + lazy val info = Styled("info") + lazy val light = Styled("light") + lazy val dark = Styled("dark") } object TableRow { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableStyles.scala index 3bea98c..30a120d 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/TableStyles.scala @@ -6,17 +6,17 @@ import com.karasiq.bootstrap4.utils.Utils trait TableStyles { self: RenderingContext with Utils ⇒ import scalaTags.all._ - final class TableStyle private[table](val styleName: String) extends StyleClassModifier { - val className = s"table-$styleName" + final class TableStyle private[table] (val styleName: String) extends StyleClassModifier { + val className = s"table-$styleName" val createModifier = className.addClass } object TableStyle { - lazy val dark = new TableStyle("dark") - lazy val striped = new TableStyle("striped") - lazy val hover = new TableStyle("hover") - lazy val bordered = new TableStyle("bordered") - lazy val small = new TableStyle("sm") + lazy val dark = new TableStyle("dark") + lazy val striped = new TableStyle("striped") + lazy val hover = new TableStyle("hover") + lazy val bordered = new TableStyle("bordered") + lazy val small = new TableStyle("sm") lazy val borderless = new TableStyle("borderless") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalPagedTables.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalPagedTables.scala index 88abfa8..c300e1d 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalPagedTables.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalPagedTables.scala @@ -7,7 +7,8 @@ import com.karasiq.bootstrap.context.RenderingContext import com.karasiq.bootstrap4.pagination.PageSelectors import com.karasiq.bootstrap4.utils.Utils -trait UniversalPagedTables extends PagedTables { self: RenderingContext with BootstrapComponents with PageSelectors with Tables with Utils ⇒ +trait UniversalPagedTables extends PagedTables { + self: RenderingContext with BootstrapComponents with PageSelectors with Tables with Utils ⇒ import scalaTags.all._ type PagedTable = UniversalPagedTable @@ -19,18 +20,20 @@ trait UniversalPagedTables extends PagedTables { self: RenderingContext with Boo trait UniversalPagedTable extends AbstractPagedTable with BootstrapHtmlComponent { override def renderTag(md: ModifierT*): TagT = { - div(div(pageSelector), table.renderTag(md:_*)) + div(div(pageSelector), table.renderTag(md: _*)) } } - protected final class UniversalStaticPagedTableImpl(val heading: Rx[Seq[Modifier]], - val allContent: Rx[Seq[TableRow]], - val rowsPerPage: Int) - extends UniversalPagedTable with AbstractStaticPagedTable { + protected final class UniversalStaticPagedTableImpl( + val heading: Rx[Seq[Modifier]], + val allContent: Rx[Seq[TableRow]], + val rowsPerPage: Int + ) extends UniversalPagedTable + with AbstractStaticPagedTable { val currentPage = Var(1) - val table: Table = Table(heading, PagedTable.pagedDataRx(allContent, currentPage, rowsPerPage)) + val table: Table = Table(heading, PagedTable.pagedDataRx(allContent, currentPage, rowsPerPage)) val pageSelector: PageSelector = PageSelector(PagedTable.pagesRx(allContent, rowsPerPage), currentPage) pageSelector.pages.triggerLater { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalSortableTables.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalSortableTables.scala index 7da3eb1..80b3520 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalSortableTables.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalSortableTables.scala @@ -8,24 +8,30 @@ import com.karasiq.bootstrap4.grid.Grids import com.karasiq.bootstrap4.icons.Icons import com.karasiq.bootstrap4.utils.Utils -trait UniversalSortableTables extends SortableTables { self: RenderingContext with Tables with PagedTables with Icons with Utils with Forms with Grids ⇒ +trait UniversalSortableTables extends SortableTables { + self: RenderingContext with Tables with PagedTables with Icons with Utils with Forms with Grids ⇒ import scalaTags.all._ type SortableTable[T] = UniversalSortableTable[T] object SortableTable extends AbstractSortableTableFactory { - def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]], - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T] = { + def apply[T]( + items: Rx[Seq[T]], + columns: Rx[Seq[TableCol[T, _]]], + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ): SortableTable[T] = { Builder(columns, rowModifiers, filterItem).createTable(items) } - case class Builder[T](columns: Rx[Seq[TableCol[T, _]]] = Var(Nil), - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)) { + case class Builder[T]( + columns: Rx[Seq[TableCol[T, _]]] = Var(Nil), + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ) { def withColumns(columns: Rx[Seq[TableCol[T, _]]]) = copy(columns = columns) - def withColumns(columns: TableCol[T, _]*) = copy(columns = Var(columns.asInstanceOf[GenTableCols[T]])) - def withRowModifiers(rowModifiers: T ⇒ Modifier) = copy(rowModifiers = rowModifiers) + def withColumns(columns: TableCol[T, _]*) = copy(columns = Var(columns.asInstanceOf[GenTableCols[T]])) + def withRowModifiers(rowModifiers: T ⇒ Modifier) = copy(rowModifiers = rowModifiers) def withFilter(filterItem: (T, String) ⇒ Boolean) = copy(filterItem = filterItem) def createTable(items: Rx[Seq[T]]): SortableTable[T] = { @@ -34,13 +40,13 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi new UniversalSortableTable[T] { val items = _items - val columns = Builder.this.columns.asInstanceOf[Rx[GenTableCols[T]]] - val sortByColumn = Var(columns.now.head) + val columns = Builder.this.columns.asInstanceOf[Rx[GenTableCols[T]]] + val sortByColumn = Var(columns.now.head) val reverseOrdering = Var(false) - val filter = Var("") + val filter = Var("") def filterItem(item: T, filter: String): Boolean = Builder.this.filterItem(item, filter) - def rowModifiers(item: T): Modifier = Builder.this.rowModifiers(item) + def rowModifiers(item: T): Modifier = Builder.this.rowModifiers(item) } } @@ -68,13 +74,14 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi val content = Rx { val columns = this.columns() - val items = this.items() + val items = this.items() val filter = this.filter() - val filteredItems = if (hideFilterRx() || filter.isEmpty) items else items.filter(item ⇒ filterItem(item, filter)) + val filteredItems = + if (hideFilterRx() || filter.isEmpty) items else items.filter(item ⇒ filterItem(item, filter)) val selectedCol = this.sortByColumn() - val ordering = if (reverseOrdering()) selectedCol.ord.reverse else selectedCol.ord + val ordering = if (reverseOrdering()) selectedCol.ord.reverse else selectedCol.ord val sortedItems = filteredItems.sortBy(item ⇒ selectedCol.extract(item))(ordering) sortedItems.map(item ⇒ TableRow(columns.map(col ⇒ col.render(item)), rowModifiers(item))) @@ -86,7 +93,7 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi def renderTag(md: ModifierT*): TagT = { div( GridSystem.mkRow(Form(FormInput.text("", filter.reactiveInput)), hideFilterRx.reactiveHide), - GridSystem.mkRow(pagedTable.renderTag(md:_*)) + GridSystem.mkRow(pagedTable.renderTag(md: _*)) ) } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalTables.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalTables.scala index 2312edc..34ae916 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalTables.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/table/UniversalTables.scala @@ -37,6 +37,6 @@ trait UniversalTables { self: RenderingContext with BootstrapComponents with Tab } } - protected class StaticUniversalTable(val heading: Rx[Seq[Modifier]], - val content: Rx[Seq[TableRow]]) extends UniversalTable + protected class StaticUniversalTable(val heading: Rx[Seq[Modifier]], val content: Rx[Seq[TableRow]]) + extends UniversalTable } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TextTooltips.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TextTooltips.scala index fe8b48f..c256081 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TextTooltips.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TextTooltips.scala @@ -13,15 +13,15 @@ trait TextTooltips { self: RenderingContext with BootstrapComponents with Toolti class TextTooltip(val options: TooltipOptions) extends AbstractTooltip { override def render(md: ModifierT*): ModifierT = { - (`data-toggle` := "tooltip") +: Bootstrap.dataProps(options.toStrings:_*) +: md + (`data-toggle` := "tooltip") +: Bootstrap.dataProps(options.toStrings: _*) +: md } } - /** - * Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; - * Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage. - * Tooltips with zero-length titles are never displayed. - * @see [[http://getbootstrap.com/javascript/#tooltips]] + /** Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't + * rely on images, use CSS3 for animations, and data-attributes for local title storage. Tooltips with zero-length + * titles are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#tooltips]] */ object Tooltip extends TooltipFactory { def apply(content: Frag, placement: TooltipPlacement): AbstractTooltip = { diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TooltipStyles.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TooltipStyles.scala index 2905357..b6c6e4b 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TooltipStyles.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/TooltipStyles.scala @@ -5,17 +5,17 @@ import com.karasiq.bootstrap.context.RenderingContext trait TooltipStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class TooltipPlacement private[tooltip](val placement: String) { + final class TooltipPlacement private[tooltip] (val placement: String) { override def toString: String = placement } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object TooltipPlacement { private[this] def placement(str: String): TooltipPlacement = new TooltipPlacement(str) - val auto = placement("auto") - val left = placement("left") - val right = placement("right") - val top = placement("top") - val bottom = placement("bottom") + val auto = placement("auto") + val left = placement("left") + val right = placement("right") + val top = placement("top") + val bottom = placement("bottom") } } diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/Tooltips.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/Tooltips.scala index 9fde78b..303003b 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/Tooltips.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/tooltip/Tooltips.scala @@ -11,9 +11,18 @@ trait Tooltips extends TooltipStyles { self: RenderingContext with BootstrapComp type Tooltip <: AbstractTooltip val Tooltip: TooltipFactory - case class TooltipOptions(animation: Boolean = true, container: String = "", delay: String = "", - html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "", - title: Frag = "", trigger: String = "", viewport: String = "") { + case class TooltipOptions( + animation: Boolean = true, + container: String = "", + delay: String = "", + html: Boolean = false, + placement: TooltipPlacement = TooltipPlacement.right, + selector: String = "", + template: String = "", + title: Frag = "", + trigger: String = "", + viewport: String = "" + ) { def toStrings: Seq[(String, String)] = { def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default) Seq( @@ -35,11 +44,11 @@ trait Tooltips extends TooltipStyles { self: RenderingContext with BootstrapComp def options: TooltipOptions } - /** - * Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; - * Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage. - * Tooltips with zero-length titles are never displayed. - * @see [[http://getbootstrap.com/javascript/#tooltips]] + /** Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't + * rely on images, use CSS3 for animations, and data-attributes for local title storage. Tooltips with zero-length + * titles are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#tooltips]] */ trait TooltipFactory { def apply(content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): AbstractTooltip diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/UniversalUtils.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/UniversalUtils.scala index 77aafcf..fcc7cb0 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/UniversalUtils.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/UniversalUtils.scala @@ -19,259 +19,282 @@ trait UniversalUtils { self: RenderingContext with Icons with Buttons with Class object BootstrapAttrs extends DefaultBootstrapAttrs trait UniversalUtils extends AbstractUtils { - /** - * A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site. - * @see [[https://getbootstrap.com/docs/4.0/components/jumbotron/]] + + /** A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your + * site. + * @see + * [[https://getbootstrap.com/docs/4.0/components/jumbotron/]] */ lazy val jumbotron: Tag = div(`class` := "jumbotron") - /** - * Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. - * @see [[https://getbootstrap.com/components/#badges]] + /** Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. + * @see + * [[https://getbootstrap.com/components/#badges]] */ lazy val badge: Tag = span(`class` := "badge") - /** - * Default button + /** Default button */ lazy val button: Tag = { Button().renderTag() } - /** - * Default icon - * @param name Icon name - * @see [[https://getbootstrap.com/components/#glyphicons]] + /** Default icon + * @param name + * Icon name + * @see + * [[https://getbootstrap.com/components/#glyphicons]] */ def icon(name: String): IconModifier = { Icon(name) } - /** - * Generates unique element ID + /** Generates unique element ID */ def newId: String = { s"bs-auto-${UUID.randomUUID()}" } - /** - * Add classes to an `img` element to easily style images in any project. - * @see [[http://getbootstrap.com/css/#images-shapes]] + /** Add classes to an `img` element to easily style images in any project. + * @see + * [[http://getbootstrap.com/css/#images-shapes]] */ object image extends AbstractImageUtils { - final class ImageStyle private[bootstrap4](val styleName: String) extends AbstractImageStyle with StyleClassModifier { - val className = s"img-$styleName" + final class ImageStyle private[bootstrap4] (val styleName: String) + extends AbstractImageStyle + with StyleClassModifier { + val className = s"img-$styleName" val createModifier = className.addClass } - /** - * Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. - * This applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent element. - * To center images which use the .img-responsive class, use .center-block instead of .text-center. - * See the helper classes section for more details about .center-block usage. - * @see [[http://getbootstrap.com/css/#images-responsive]] + /** Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This + * applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the + * parent element. To center images which use the .img-responsive class, use .center-block instead of + * .text-center. See the helper classes section for more details about .center-block usage. + * @see + * [[http://getbootstrap.com/css/#images-responsive]] */ lazy val responsive = new ImageStyle("responsive") - lazy val rounded = new ImageStyle("rounded") - lazy val circle = new ImageStyle("circle") + lazy val rounded = new ImageStyle("rounded") + lazy val circle = new ImageStyle("circle") lazy val thumbnail = new ImageStyle("thumbnail") } sealed trait TextModifier extends StyleClassModifier { def styleName: String - def className = s"text-$styleName" + def className = s"text-$styleName" lazy val createModifier = className.addClass } - /** - * Easily realign text to components with text alignment classes. - * @see [[http://getbootstrap.com/css/#type-alignment]] + /** Easily realign text to components with text alignment classes. + * @see + * [[http://getbootstrap.com/css/#type-alignment]] */ object textAlign extends AbstractTextAlignments { - final class TextAlignment private[bootstrap4](val styleName: String) extends TextModifier with AbstractTextAlignment + final class TextAlignment private[bootstrap4] (val styleName: String) + extends TextModifier + with AbstractTextAlignment - lazy val left = new TextAlignment("left") - lazy val center = new TextAlignment("center") - lazy val right = new TextAlignment("right") + lazy val left = new TextAlignment("left") + lazy val center = new TextAlignment("center") + lazy val right = new TextAlignment("right") lazy val justify = new TextAlignment("justify") - lazy val nowrap = new TextAlignment("nowrap") + lazy val nowrap = new TextAlignment("nowrap") } - /** - * Transform text in components with text capitalization classes. - * @see [[http://getbootstrap.com/css/#type-transformation]] + /** Transform text in components with text capitalization classes. + * @see + * [[http://getbootstrap.com/css/#type-transformation]] */ object textTransform extends AbstractTextTransformations { - final class TextTransformation private[bootstrap4](val styleName: String) extends TextModifier with AbstractTextTransformation + final class TextTransformation private[bootstrap4] (val styleName: String) + extends TextModifier + with AbstractTextTransformation - lazy val lowercase = new TextTransformation("lowercase") - lazy val uppercase = new TextTransformation("uppercase") + lazy val lowercase = new TextTransformation("lowercase") + lazy val uppercase = new TextTransformation("uppercase") lazy val capitalize = new TextTransformation("capitalize") } - /** - * Convey meaning through color with a handful of emphasis utility classes. - * These may also be applied to links and will darken on hover just like our default link styles. - * @see [[http://getbootstrap.com/css/#helper-classes-colors]] + /** Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and + * will darken on hover just like our default link styles. + * @see + * [[http://getbootstrap.com/css/#helper-classes-colors]] */ object textStyle extends AbstractTextStyles { - final class TextStyle private[bootstrap4](val styleName: String) extends TextModifier with AbstractTextStyle - - lazy val muted = new TextStyle("muted") - lazy val primary = new TextStyle("primary") - lazy val secondary = new TextStyle("secondary") - lazy val success = new TextStyle("success") - lazy val info = new TextStyle("info") - lazy val warning = new TextStyle("warning") - lazy val danger = new TextStyle("danger") - lazy val light = new TextStyle("light") - lazy val dark = new TextStyle("dark") - lazy val white = new TextStyle("white") - lazy val hide = new TextStyle("hide") - lazy val monospace = new TextStyle("monospace") - lazy val body = new TextStyle("body") + final class TextStyle private[bootstrap4] (val styleName: String) extends TextModifier with AbstractTextStyle + + lazy val muted = new TextStyle("muted") + lazy val primary = new TextStyle("primary") + lazy val secondary = new TextStyle("secondary") + lazy val success = new TextStyle("success") + lazy val info = new TextStyle("info") + lazy val warning = new TextStyle("warning") + lazy val danger = new TextStyle("danger") + lazy val light = new TextStyle("light") + lazy val dark = new TextStyle("dark") + lazy val white = new TextStyle("white") + lazy val hide = new TextStyle("hide") + lazy val monospace = new TextStyle("monospace") + lazy val body = new TextStyle("body") lazy val `black-50%` = new TextStyle("black-50") lazy val `white-50%` = new TextStyle("white-50") } - /** - * Similar to the contextual text color classes, easily set the background of an element to any contextual class. + /** Similar to the contextual text color classes, easily set the background of an element to any contextual class. * Anchor components will darken on hover, just like the text classes. - * @see [[http://getbootstrap.com/css/#helper-classes-backgrounds]] + * @see + * [[http://getbootstrap.com/css/#helper-classes-backgrounds]] */ object background extends AbstractBackgroundStyles { - final class BackgroundStyle private[bootstrap4](val styleName: String) extends AbstractBackgroundStyle with StyleClassModifier { - val className = s"bg-$styleName" + final class BackgroundStyle private[bootstrap4] (val styleName: String) + extends AbstractBackgroundStyle + with StyleClassModifier { + val className = s"bg-$styleName" val createModifier = className.addClass } - lazy val primary = new BackgroundStyle("primary") - lazy val secondary = new BackgroundStyle("secondary") - lazy val success = new BackgroundStyle("success") - lazy val info = new BackgroundStyle("info") - lazy val warning = new BackgroundStyle("warning") - lazy val danger = new BackgroundStyle("danger") - lazy val light = new BackgroundStyle("light") - lazy val dark = new BackgroundStyle("dark") - lazy val white = new BackgroundStyle("white") + lazy val primary = new BackgroundStyle("primary") + lazy val secondary = new BackgroundStyle("secondary") + lazy val success = new BackgroundStyle("success") + lazy val info = new BackgroundStyle("info") + lazy val warning = new BackgroundStyle("warning") + lazy val danger = new BackgroundStyle("danger") + lazy val light = new BackgroundStyle("light") + lazy val dark = new BackgroundStyle("dark") + lazy val white = new BackgroundStyle("white") lazy val transparent = new BackgroundStyle("transparent") } object border extends AbstractBorders { - lazy val border = "border".addClass - lazy val border0 = "border0".addClass - lazy val borderTop0 = "border-top-0".addClass + lazy val border = "border".addClass + lazy val border0 = "border0".addClass + lazy val borderTop0 = "border-top-0".addClass lazy val borderBottom0 = "border-bottom-0".addClass - lazy val borderLeft0 = "border-left-0".addClass - lazy val borderRight0 = "border-right-0".addClass + lazy val borderLeft0 = "border-left-0".addClass + lazy val borderRight0 = "border-right-0".addClass } - final class BorderStyle private[bootstrap4](val styleName: String) extends AbstractBorderStyle with StyleClassModifier { - val className = s"border-$styleName" + final class BorderStyle private[bootstrap4] (val styleName: String) + extends AbstractBorderStyle + with StyleClassModifier { + val className = s"border-$styleName" val createModifier = className.addClass } object borderStyle extends AbstractBorderStyles { - lazy val primary = new BorderStyle("primary") + lazy val primary = new BorderStyle("primary") lazy val secondary = new BorderStyle("secondary") - lazy val success = new BorderStyle("success") - lazy val info = new BorderStyle("info") - lazy val warning = new BorderStyle("warning") - lazy val danger = new BorderStyle("danger") - lazy val light = new BorderStyle("light") - lazy val dark = new BorderStyle("dark") - lazy val white = new BorderStyle("white") + lazy val success = new BorderStyle("success") + lazy val info = new BorderStyle("info") + lazy val warning = new BorderStyle("warning") + lazy val danger = new BorderStyle("danger") + lazy val light = new BorderStyle("light") + lazy val dark = new BorderStyle("dark") + lazy val white = new BorderStyle("white") } object borderRounding extends AbstractBorderRounding { - lazy val rounded = "rounded".addClass - lazy val roundedTop = "rounded-top".addClass + lazy val rounded = "rounded".addClass + lazy val roundedTop = "rounded-top".addClass lazy val roundedBottom = "rounded-bottom".addClass - lazy val roundedRight = "rounded-right".addClass - lazy val roundedLeft = "rounded-left".addClass + lazy val roundedRight = "rounded-right".addClass + lazy val roundedLeft = "rounded-left".addClass lazy val roundedCircle = "rounded-circle".addClass - lazy val rounded0 = "rounded-0".addClass + lazy val rounded0 = "rounded-0".addClass } - /** - * Use the generic close icon for dismissing content like modals and alerts. - * @see [[http://getbootstrap.com/css/#helper-classes-close]] + /** Use the generic close icon for dismissing content like modals and alerts. + * @see + * [[http://getbootstrap.com/css/#helper-classes-close]] */ lazy val closeIcon: Tag = { - scalaTags.tags.button(`type` := "button", `class` := "close", aria.label := "Close", span(aria.hidden := true, raw("×"))) + scalaTags.tags.button( + `type` := "button", + `class` := "close", + aria.label := "Close", + span(aria.hidden := true, raw("×")) + ) } - /** - * Use carets to indicate dropdown functionality and direction. - * Note that the default caret will reverse automatically in dropup menus. - * @see [[http://getbootstrap.com/css/#helper-classes-carets]] + /** Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse + * automatically in dropup menus. + * @see + * [[http://getbootstrap.com/css/#helper-classes-carets]] */ lazy val caret: Tag = span(`class` := "caret") - /** - * Float an element to the left or right with a class. - * `!important` is included to avoid specificity issues. - * @note To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details. - * @see [[http://getbootstrap.com/css/#helper-classes-floats]] + /** Float an element to the left or right with a class. `!important` is included to avoid specificity issues. + * @note + * To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar + * docs for details. + * @see + * [[http://getbootstrap.com/css/#helper-classes-floats]] */ object pull extends AbstractPullModifiers { - final class PullModifier private[bootstrap4](val styleName: String) extends AbstractPullModifier with StyleClassModifier { - val className = s"pull-$styleName" + final class PullModifier private[bootstrap4] (val styleName: String) + extends AbstractPullModifier + with StyleClassModifier { + val className = s"pull-$styleName" val createModifier = className.addClass } - lazy val left = new PullModifier("left") + lazy val left = new PullModifier("left") lazy val right = new PullModifier("right") } - /** - * Set an element to display: block and center via margin - * @see [[http://getbootstrap.com/css/#helper-classes-center]] + /** Set an element to display: block and center via margin + * @see + * [[http://getbootstrap.com/css/#helper-classes-center]] */ lazy val centerBlock = "center-block".addClass - /** - * Easily clear floats by adding `.clearfix` to the parent element. - * Utilizes [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. - * @see [[http://getbootstrap.com/css/#helper-classes-clearfix]] + /** Easily clear floats by adding `.clearfix` to the parent element. Utilizes + * [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. + * @see + * [[http://getbootstrap.com/css/#helper-classes-clearfix]] */ lazy val clearFix = "clearfix".addClass - /** - * Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` classes. - * These classes use `!important` to avoid specificity conflicts, just like the quick floats. - * They are only available for block level toggling. They can also be used as mixins. - * `.hide` is available, but it does not always affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. - * Furthermore, `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and the element can still affect the flow of the document. - * @see [[http://getbootstrap.com/css/#helper-classes-show-hide]] + /** Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` + * classes. These classes use `!important` to avoid specificity conflicts, just like the quick floats. They are + * only available for block level toggling. They can also be used as mixins. `.hide` is available, but it does not + * always affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. Furthermore, + * `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and + * the element can still affect the flow of the document. + * @see + * [[http://getbootstrap.com/css/#helper-classes-show-hide]] */ object visibility extends AbstractVisibilityModifiers { - final class ElementVisibility private[bootstrap4](val styleName: String) extends AbstractVisibilityModifier with StyleClassModifier { - val className = styleName + final class ElementVisibility private[bootstrap4] (val styleName: String) + extends AbstractVisibilityModifier + with StyleClassModifier { + val className = styleName val createModifier = className.addClass } - lazy val visible = new ElementVisibility("visible") + lazy val visible = new ElementVisibility("visible") lazy val invisible = new ElementVisibility("invisible") } - class DisplayModifier private[bootstrap4](val size: Option[String], val styleName: String) extends AbstractDisplayModifier { - val className = size.fold("d-" + styleName)(screenSize ⇒ "d-" + screenSize + "-" + styleName) + class DisplayModifier private[bootstrap4] (val size: Option[String], val styleName: String) + extends AbstractDisplayModifier { + val className = size.fold("d-" + styleName)(screenSize ⇒ "d-" + screenSize + "-" + styleName) val createModifier = className.addClass } - class DisplayModifiers private[bootstrap4](size: Option[String]) extends AbstractDisplayModifiers { + class DisplayModifiers private[bootstrap4] (size: Option[String]) extends AbstractDisplayModifiers { protected def displayModifier(str: String): DisplayModifier = new DisplayModifier(size, str) - lazy val none = displayModifier("none") - lazy val inline = displayModifier("inline") + lazy val none = displayModifier("none") + lazy val inline = displayModifier("inline") lazy val inlineBlock = displayModifier("inline-block") - lazy val block = displayModifier("block") - lazy val table = displayModifier("table") - lazy val tableCell = displayModifier("table-cell") - lazy val flex = displayModifier("flex") - lazy val inlineFlex = displayModifier("inline-flex") + lazy val block = displayModifier("block") + lazy val table = displayModifier("table") + lazy val tableCell = displayModifier("table-cell") + lazy val flex = displayModifier("flex") + lazy val inlineFlex = displayModifier("inline-flex") } object display extends DisplayModifiers(None) { @@ -281,34 +304,37 @@ trait UniversalUtils { self: RenderingContext with Icons with Buttons with Class lazy val xl = new DisplayModifiers(Some("xl")) } - class ShadowModifier private[bootstrap4](val styleName: String) extends AbstractShadowModifier { + class ShadowModifier private[bootstrap4] (val styleName: String) extends AbstractShadowModifier { val createModifier: ModifierT = if (styleName.isEmpty) "shadow" else "shadow-" + styleName } object shadow extends AbstractShadowModifiers { - def none = new ShadowModifier("none") - def small = new ShadowModifier("sm") + def none = new ShadowModifier("none") + def small = new ShadowModifier("sm") def regular = new ShadowModifier("") - def large = new ShadowModifier("lg") + def large = new ShadowModifier("lg") } - /** - * Hide an element to all devices except screen readers with `.sr-only` - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Hide an element to all devices except screen readers with `.sr-only` + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ lazy val srOnly = "sr-only".addClass - /** - * Combine [[com.karasiq.bootstrap4.utils.UniversalUtils.UniversalUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Combine [[com.karasiq.bootstrap4.utils.UniversalUtils.UniversalUtils#srOnly() .sr-only]] with + * `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ lazy val srOnlyFocusable: Modifier = Array("sr-only", "sr-only-focusable").map(_.addClass) - /** - * Appends `data-%property%` attributes to the element - * @param props Properties - * @tparam T Value type - * @return Modifier + /** Appends `data-%property%` attributes to the element + * @param props + * Properties + * @tparam T + * Value type + * @return + * Modifier */ def dataProps[T: AttrValue](props: (String, T)*): Modifier = { props.map { case (name, value) ⇒ @@ -316,22 +342,17 @@ trait UniversalUtils { self: RenderingContext with Icons with Buttons with Class } } - /** - * Non-breaking Space - * A common character entity used in HTML is the non-breaking space:   - * A non-breaking space is a space that will not break into a new line. + /** Non-breaking Space A common character entity used in HTML is the non-breaking space:   A non-breaking space + * is a space that will not break into a new line. */ val nbsp = raw(" ") - /** - * No-op frag + /** No-op frag */ val noContent = (): FragT - /** - * No-op modifier + /** No-op modifier */ val noModifier = (): ModifierT } } - diff --git a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/Utils.scala b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/Utils.scala index c6e71a5..da161e5 100644 --- a/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/Utils.scala +++ b/library-v4/shared/src/main/scala/com/karasiq/bootstrap4/utils/Utils.scala @@ -15,18 +15,18 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers val BootstrapAttrs: BootstrapAttrs trait DefaultBootstrapAttrs { - lazy val `data-toggle` = attr("data-toggle") - lazy val `data-target` = attr("data-target") + lazy val `data-toggle` = attr("data-toggle") + lazy val `data-target` = attr("data-target") lazy val `data-slide-to` = attr("data-slide-to") - lazy val `data-ride` = attr("data-ride") - lazy val `data-slide` = attr("data-slide") - lazy val `data-dismiss` = attr("data-dismiss") + lazy val `data-ride` = attr("data-ride") + lazy val `data-slide` = attr("data-slide") + lazy val `data-dismiss` = attr("data-dismiss") } trait AbstractUtils { - type FragT = Frag - type ModifierT = Modifier - type ElementT = Tag + type FragT = Frag + type ModifierT = Modifier + type ElementT = Tag type ElementIdT = String val image: AbstractImageUtils @@ -42,95 +42,94 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers val display: AbstractDisplayModifiers val shadow: AbstractShadowModifiers - /** - * Generates unique element ID + /** Generates unique element ID */ def newId: ElementIdT - /** - * A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site. - * @see [[https://getbootstrap.com/components/#jumbotron]] + /** A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your + * site. + * @see + * [[https://getbootstrap.com/components/#jumbotron]] */ def jumbotron: ElementT - /** - * Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. - * @see [[https://getbootstrap.com/components/#badges]] + /** Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. + * @see + * [[https://getbootstrap.com/components/#badges]] */ def badge: ElementT - /** - * Default button + /** Default button */ def button: ElementT - /** - * Default icon - * @param name Icon name - * @see [[https://getbootstrap.com/components/#glyphicons]] + /** Default icon + * @param name + * Icon name + * @see + * [[https://getbootstrap.com/components/#glyphicons]] */ def icon(name: String): IconModifier - /** - * Use the generic close icon for dismissing content like modals and alerts. - * @see [[http://getbootstrap.com/css/#helper-classes-close]] + /** Use the generic close icon for dismissing content like modals and alerts. + * @see + * [[http://getbootstrap.com/css/#helper-classes-close]] */ def closeIcon: ElementT - /** - * Use carets to indicate dropdown functionality and direction. - * Note that the default caret will reverse automatically in dropup menus. - * @see [[http://getbootstrap.com/css/#helper-classes-carets]] + /** Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse + * automatically in dropup menus. + * @see + * [[http://getbootstrap.com/css/#helper-classes-carets]] */ def caret: ElementT - /** - * Set an element to display: block and center via margin - * @see [[http://getbootstrap.com/css/#helper-classes-center]] + /** Set an element to display: block and center via margin + * @see + * [[http://getbootstrap.com/css/#helper-classes-center]] */ def centerBlock: ModifierT - /** - * Easily clear floats by adding `.clearfix` to the parent element. - * Utilizes [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. - * @see [[http://getbootstrap.com/css/#helper-classes-clearfix]] + /** Easily clear floats by adding `.clearfix` to the parent element. Utilizes + * [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. + * @see + * [[http://getbootstrap.com/css/#helper-classes-clearfix]] */ def clearFix: ModifierT - /** - * Hide an element to all devices except screen readers with `.sr-only` - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Hide an element to all devices except screen readers with `.sr-only` + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ def srOnly: ModifierT - /** - * Combine [[com.karasiq.bootstrap4.utils.Utils.AbstractUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Combine [[com.karasiq.bootstrap4.utils.Utils.AbstractUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show + * the element again when it's focused (e.g. by a keyboard-only user) + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ def srOnlyFocusable: ModifierT - /** - * Appends `data-%property%` attributes to the element - * @param props Properties - * @tparam T Value type - * @return Modifier + /** Appends `data-%property%` attributes to the element + * @param props + * Properties + * @tparam T + * Value type + * @return + * Modifier */ def dataProps[T: AttrValue](props: (String, T)*): ModifierT - /** - * Non-breaking Space - * A common character entity used in HTML is the non-breaking space:   - * A non-breaking space is a space that will not break into a new line. + /** Non-breaking Space A common character entity used in HTML is the non-breaking space:   A non-breaking space + * is a space that will not break into a new line. */ def nbsp: ModifierT - /** - * No-op frag + /** No-op frag */ def noContent: FragT - /** - * No-op modifier + /** No-op modifier */ def noModifier: ModifierT } @@ -143,28 +142,29 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def className: String } - trait AbstractImageStyle extends StyleModifier - trait AbstractTextStyle extends StyleModifier - trait AbstractTextAlignment extends AbstractTextStyle + trait AbstractImageStyle extends StyleModifier + trait AbstractTextStyle extends StyleModifier + trait AbstractTextAlignment extends AbstractTextStyle trait AbstractTextTransformation extends AbstractTextStyle - trait AbstractBackgroundStyle extends StyleModifier - trait AbstractBorderStyle extends StyleModifier - trait AbstractPullModifier extends StyleModifier + trait AbstractBackgroundStyle extends StyleModifier + trait AbstractBorderStyle extends StyleModifier + trait AbstractPullModifier extends StyleModifier trait AbstractVisibilityModifier extends StyleModifier - trait AbstractDisplayModifier extends StyleModifier - trait AbstractShadowModifier extends StyleModifier + trait AbstractDisplayModifier extends StyleModifier + trait AbstractShadowModifier extends StyleModifier - /** - * Add classes to an `img` element to easily style images in any project. - * @see [[http://getbootstrap.com/css/#images-shapes]] + /** Add classes to an `img` element to easily style images in any project. + * @see + * [[http://getbootstrap.com/css/#images-shapes]] */ trait AbstractImageUtils { - /** - * Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. - * This applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent element. - * To center images which use the .img-responsive class, use .center-block instead of .text-center. - * See the helper classes section for more details about .center-block usage. - * @see [[http://getbootstrap.com/css/#images-responsive]] + + /** Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This + * applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent + * element. To center images which use the .img-responsive class, use .center-block instead of .text-center. See + * the helper classes section for more details about .center-block usage. + * @see + * [[http://getbootstrap.com/css/#images-responsive]] */ def responsive: AbstractImageStyle @@ -173,9 +173,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def thumbnail: AbstractImageStyle } - /** - * Easily realign text to components with text alignment classes. - * @see [[http://getbootstrap.com/css/#type-alignment]] + /** Easily realign text to components with text alignment classes. + * @see + * [[http://getbootstrap.com/css/#type-alignment]] */ trait AbstractTextAlignments { def left: AbstractTextAlignment @@ -185,9 +185,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def nowrap: AbstractTextAlignment } - /** - * Transform text in components with text capitalization classes. - * @see [[http://getbootstrap.com/css/#type-transformation]] + /** Transform text in components with text capitalization classes. + * @see + * [[http://getbootstrap.com/css/#type-transformation]] */ trait AbstractTextTransformations { def lowercase: AbstractTextTransformation @@ -195,10 +195,10 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def capitalize: AbstractTextTransformation } - /** - * Convey meaning through color with a handful of emphasis utility classes. - * These may also be applied to links and will darken on hover just like our default link styles. - * @see [[http://getbootstrap.com/css/#helper-classes-colors]] + /** Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and + * will darken on hover just like our default link styles. + * @see + * [[http://getbootstrap.com/css/#helper-classes-colors]] */ trait AbstractTextStyles { def muted: AbstractTextStyle @@ -212,11 +212,14 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def dark: AbstractTextStyle def white: AbstractTextStyle - /** - * Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. - * @see [[http://getbootstrap.com/css/#helper-classes-image-replacement]] + /** Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. + * @see + * [[http://getbootstrap.com/css/#helper-classes-image-replacement]] */ - @deprecated("Deprecated .text-hide—you’ll see a warning during compilation—as it’s a dated and undocumented feature.", "4.1") + @deprecated( + "Deprecated .text-hide—you’ll see a warning during compilation—as it’s a dated and undocumented feature.", + "4.1" + ) def hide: AbstractTextStyle // See https://blog.getbootstrap.com/2018/04/09/bootstrap-4-1/ @@ -226,10 +229,10 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def `white-50%`: AbstractTextStyle } - /** - * Similar to the contextual text color classes, easily set the background of an element to any contextual class. + /** Similar to the contextual text color classes, easily set the background of an element to any contextual class. * Anchor components will darken on hover, just like the text classes. - * @see [[http://getbootstrap.com/css/#helper-classes-backgrounds]] + * @see + * [[http://getbootstrap.com/css/#helper-classes-backgrounds]] */ trait AbstractBackgroundStyles { def primary: AbstractBackgroundStyle @@ -243,9 +246,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def white: AbstractBackgroundStyle } - /** - * Change the border color using utilities built on our theme colors. - * @see [[https://getbootstrap.com/docs/4.0/utilities/borders/#border-color]] + /** Change the border color using utilities built on our theme colors. + * @see + * [[https://getbootstrap.com/docs/4.0/utilities/borders/#border-color]] */ trait AbstractBorderStyles { def primary: AbstractBorderStyle @@ -259,9 +262,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def white: AbstractBorderStyle } - /** - * Add classes to an element to remove all borders or some borders. - * @see [[https://getbootstrap.com/docs/4.0/utilities/borders/]] + /** Add classes to an element to remove all borders or some borders. + * @see + * [[https://getbootstrap.com/docs/4.0/utilities/borders/]] */ trait AbstractBorders { def border: Modifier @@ -272,9 +275,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def borderRight0: Modifier } - /** - * Add classes to an element to easily round its corners. - * @see [[https://getbootstrap.com/docs/4.0/utilities/borders/#border-radius]] + /** Add classes to an element to easily round its corners. + * @see + * [[https://getbootstrap.com/docs/4.0/utilities/borders/#border-radius]] */ trait AbstractBorderRounding { def rounded: Modifier @@ -286,28 +289,29 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def rounded0: Modifier } - /** - * Float an element to the left or right with a class. - * `!important` is included to avoid specificity issues. - * @note To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details. - * @see [[http://getbootstrap.com/css/#helper-classes-floats]] + /** Float an element to the left or right with a class. `!important` is included to avoid specificity issues. + * @note + * To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar + * docs for details. + * @see + * [[http://getbootstrap.com/css/#helper-classes-floats]] */ trait AbstractPullModifiers { def left: AbstractPullModifier def right: AbstractPullModifier } - /** - * Control the visibility, without modifying the display, of elements with visibility utilities. - * @see [[https://getbootstrap.com/docs/4.0/utilities/visibility/]] + /** Control the visibility, without modifying the display, of elements with visibility utilities. + * @see + * [[https://getbootstrap.com/docs/4.0/utilities/visibility/]] */ trait AbstractVisibilityModifiers { def visible: AbstractVisibilityModifier def invisible: AbstractVisibilityModifier } - /** - * @see [[https://getbootstrap.com/docs/4.0/utilities/display/]] + /** @see + * [[https://getbootstrap.com/docs/4.0/utilities/display/]] */ trait AbstractDisplayModifiers { def none: AbstractDisplayModifier @@ -320,10 +324,10 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def inlineFlex: AbstractDisplayModifier } - /** - * Add or remove shadows to elements with `box-shadow` utilities. + /** Add or remove shadows to elements with `box-shadow` utilities. * @since 4.1 - * @see [[https://getbootstrap.com/docs/4.1/utilities/shadows/]] + * @see + * [[https://getbootstrap.com/docs/4.1/utilities/shadows/]] */ trait AbstractShadowModifiers { def none: AbstractShadowModifier @@ -332,4 +336,3 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def large: AbstractShadowModifier } } - diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala b/library/js/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala index e2c536a..06412f4 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala @@ -2,8 +2,7 @@ package com.karasiq.bootstrap import rx._ -/** - * Global context +/** Global context */ object Bootstrap { private[this] lazy val _scalaRxContext = Ctx.Owner.safe() @@ -17,4 +16,4 @@ object Bootstrap { } lazy val default: JSBootstrapBundle = js -} \ No newline at end of file +} diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/JSBootstrapBundle.scala b/library/js/src/main/scala/com/karasiq/bootstrap/JSBootstrapBundle.scala index 7cd26ac..cd95a89 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/JSBootstrapBundle.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/JSBootstrapBundle.scala @@ -13,8 +13,15 @@ import com.karasiq.bootstrap.popover.JSPopovers import com.karasiq.bootstrap.tooltip.JSTooltips // JS components implementation -trait JSBootstrapBundle extends UniversalBootstrapBundle with JSRenderingContext with JSModals with JSTooltips - with JSPopovers with JSNavigationBars with JSCarousels with BootstrapJQueryContext +trait JSBootstrapBundle + extends UniversalBootstrapBundle + with JSRenderingContext + with JSModals + with JSTooltips + with JSPopovers + with JSNavigationBars + with JSCarousels + with BootstrapJQueryContext object JSBootstrapBundle { def apply()(implicit rx: Ctx.Owner): JSBootstrapBundle = { diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarouselOptions.scala b/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarouselOptions.scala index 5239a36..69453be 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarouselOptions.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarouselOptions.scala @@ -4,8 +4,8 @@ import scala.scalajs.js @js.native trait JSCarouselOptions extends js.Object { - var interval: Int = js.native - var pause: String = js.native - var wrap: Boolean = js.native + var interval: Int = js.native + var pause: String = js.native + var wrap: Boolean = js.native var keyboard: Boolean = js.native } diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarousels.scala b/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarousels.scala index 7b9ee28..bd855d2 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarousels.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/carousel/JSCarousels.scala @@ -11,7 +11,8 @@ import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.jquery.BootstrapJQueryContext import com.karasiq.bootstrap.utils.Utils -trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒ +trait JSCarousels extends UniversalCarousels { + self: JSRenderingContext with Carousels with Utils with Icons with BootstrapComponents with BootstrapJQueryContext ⇒ import scalaTags.all._ type Carousel = JSCarousel @@ -26,9 +27,13 @@ trait JSCarousels extends UniversalCarousels { self: JSRenderingContext with Car } class JSCarousel(carouselId: String, content: Rx[Seq[Modifier]]) extends UniversalCarousel(carouselId, content) { - def create(interval: Int = 5000, pause: String = "hover", - wrap: Boolean = true, keyboard: Boolean = true, - modifiers: Modifier = Bootstrap.noModifier): Element = { + def create( + interval: Int = 5000, + pause: String = "hover", + wrap: Boolean = true, + keyboard: Boolean = true, + modifiers: Modifier = Bootstrap.noModifier + ): Element = { val element = carousel(modifiers).render val options = js.Object().asInstanceOf[JSCarouselOptions] options.interval = interval diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/modal/JSModalOptions.scala b/library/js/src/main/scala/com/karasiq/bootstrap/modal/JSModalOptions.scala index c91a9aa..21c3ccb 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/modal/JSModalOptions.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/modal/JSModalOptions.scala @@ -6,6 +6,6 @@ import scala.scalajs.js.| @js.native trait JSModalOptions extends js.Object { var backdrop: Boolean | String = js.native - var keyboard: Boolean = js.native - var show: Boolean = js.native + var keyboard: Boolean = js.native + var show: Boolean = js.native } diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/navbar/JSNavigationBars.scala b/library/js/src/main/scala/com/karasiq/bootstrap/navbar/JSNavigationBars.scala index 42b64ca..8b96bfd 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/navbar/JSNavigationBars.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/navbar/JSNavigationBars.scala @@ -8,17 +8,17 @@ import com.karasiq.bootstrap.jquery.BootstrapJQueryContext trait JSNavigationBars { self: JSRenderingContext with NavigationBars with BootstrapJQueryContext ⇒ implicit class JSNavigation(nav: NavComponent) { - /** - * Selects tab by ID - * @param id Tab ID + /** Selects tab by ID + * @param id + * Tab ID */ def selectTab(id: String): Unit = { jQuery(s"a[data-target='#${nav.tabId(id)}']").tab("show") } - /** - * Selects tab by index - * @param i Tab index, starting from `0` + /** Selects tab by index + * @param i + * Tab index, starting from `0` */ def selectTab(i: Int): Unit = { val tabs = nav.navTabs.now diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/popover/JSPopovers.scala b/library/js/src/main/scala/com/karasiq/bootstrap/popover/JSPopovers.scala index dc45e54..c6e47eb 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/popover/JSPopovers.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/popover/JSPopovers.scala @@ -9,14 +9,15 @@ import com.karasiq.bootstrap.context.JSRenderingContext import com.karasiq.bootstrap.jquery.BootstrapJQueryContext import com.karasiq.bootstrap.tooltip.Tooltips -trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒ +trait JSPopovers { + self: JSRenderingContext with BootstrapComponents with Popovers with Tooltips with BootstrapJQueryContext ⇒ import scalaTags.all._ class JSPopover(val options: PopoverOptions) extends Popover { - //noinspection ConvertExpressionToSAM + // noinspection ConvertExpressionToSAM def toggle: Modifier = new Modifier { def applyTo(t: Element): Unit = { - val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions] + val jsOptions = scalajs.js.Object().asInstanceOf[JSPopoverOptions] def set(value: String, f: String ⇒ Unit): Unit = if (value.nonEmpty) f(value) jsOptions.animation = options.animation jsOptions.content = options.content.render @@ -38,10 +39,10 @@ trait JSPopovers { self: JSRenderingContext with BootstrapComponents with Popove } } - /** - * Add small overlays of content, like those on the iPad, to any element for housing secondary information. - * Popovers whose both title and content are zero-length are never displayed. - * @see [[http://getbootstrap.com/javascript/#popovers]] + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#popovers]] */ object Popover extends PopoverFactory { def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): JSPopover = { diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltipOptions.scala b/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltipOptions.scala index bffd7a3..51bdb80 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltipOptions.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltipOptions.scala @@ -5,13 +5,13 @@ import scala.scalajs.js @js.native trait JSTooltipOptions extends js.Object { var animation: Boolean = js.native - var container: js.Any = js.native - var delay: js.Any = js.native - var html: Boolean = js.native - var placement: js.Any = js.native - var selector: js.Any = js.native - var template: String = js.native - var title: js.Any = js.native - var trigger: String = js.native - var viewport: js.Any = js.native + var container: js.Any = js.native + var delay: js.Any = js.native + var html: Boolean = js.native + var placement: js.Any = js.native + var selector: js.Any = js.native + var template: String = js.native + var title: js.Any = js.native + var trigger: String = js.native + var viewport: js.Any = js.native } diff --git a/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltips.scala b/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltips.scala index 1d42472..fb63fe0 100644 --- a/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltips.scala +++ b/library/js/src/main/scala/com/karasiq/bootstrap/tooltip/JSTooltips.scala @@ -17,7 +17,7 @@ trait JSTooltips { self: JSRenderingContext with BootstrapComponents with Toolti class JSTooltip(val options: TooltipOptions) extends AbstractTooltip { def toggle: Modifier = new Modifier { def applyTo(t: Element): Unit = { - val jsOptions = scalajs.js.Object().asInstanceOf[JSTooltipOptions] + val jsOptions = scalajs.js.Object().asInstanceOf[JSTooltipOptions] def set(value: String, f: String ⇒ Unit) = if (value.nonEmpty) f(value) jsOptions.animation = options.animation jsOptions.html = options.html diff --git a/library/jvm/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala b/library/jvm/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala index 352dbb1..3f35106 100644 --- a/library/jvm/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala +++ b/library/jvm/src/main/scala/com/karasiq/bootstrap/Bootstrap.scala @@ -2,8 +2,7 @@ package com.karasiq.bootstrap import rx._ -/** - * Global context +/** Global context */ object Bootstrap { private[this] lazy val _scalaRxContext = Ctx.Owner.safe() @@ -13,4 +12,4 @@ object Bootstrap { } lazy val default: TextBootstrapBundle = text -} \ No newline at end of file +} diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/BootstrapBundle.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/BootstrapBundle.scala index a5f2d50..2dcbed6 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/BootstrapBundle.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/BootstrapBundle.scala @@ -23,14 +23,47 @@ import com.karasiq.bootstrap.tooltip.Tooltips import com.karasiq.bootstrap.utils.{UniversalUtils, Utils} // Abstract components -trait BootstrapBundle extends RenderingContext with BootstrapComponents with ClassModifiers with Alerts with Buttons - with Carousels with Collapses with Dropdowns with Forms with Grids with Icons with Modals with NavigationBars - with Panels with Popovers with ProgressBars with Tables with PageSelectors with PagedTables with SortableTables - with Tooltips with Utils +trait BootstrapBundle + extends RenderingContext + with BootstrapComponents + with ClassModifiers + with Alerts + with Buttons + with Carousels + with Collapses + with Dropdowns + with Forms + with Grids + with Icons + with Modals + with NavigationBars + with Panels + with Popovers + with ProgressBars + with Tables + with PageSelectors + with PagedTables + with SortableTables + with Tooltips + with Utils // Default components implementation -trait UniversalBootstrapBundle extends BootstrapBundle - with UniversalPageSelectors with UniversalTables with UniversalPagedTables with UniversalSortableTables - with UniversalProgressBars with UniversalPanels with UniversalNavigationBars with UniversalModals - with UniversalIcons with UniversalGrids with UniversalForms with UniversalDropdowns with UniversalCollapses - with UniversalCarousels with UniversalButtons with UniversalAlerts with UniversalUtils +trait UniversalBootstrapBundle + extends BootstrapBundle + with UniversalPageSelectors + with UniversalTables + with UniversalPagedTables + with UniversalSortableTables + with UniversalProgressBars + with UniversalPanels + with UniversalNavigationBars + with UniversalModals + with UniversalIcons + with UniversalGrids + with UniversalForms + with UniversalDropdowns + with UniversalCollapses + with UniversalCarousels + with UniversalButtons + with UniversalAlerts + with UniversalUtils diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/TextBootstrapBundle.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/TextBootstrapBundle.scala index 39816bf..84bfe01 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/TextBootstrapBundle.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/TextBootstrapBundle.scala @@ -10,8 +10,12 @@ import com.karasiq.bootstrap.popover.TextPopovers import com.karasiq.bootstrap.tooltip.TextTooltips // Text components implementation -trait TextBootstrapBundle extends UniversalBootstrapBundle with TextRenderingContext - with TextCarousels with TextTooltips with TextPopovers +trait TextBootstrapBundle + extends UniversalBootstrapBundle + with TextRenderingContext + with TextCarousels + with TextTooltips + with TextPopovers object TextBootstrapBundle { def apply()(implicit ctx: Ctx.Owner): TextBootstrapBundle = { @@ -19,4 +23,4 @@ object TextBootstrapBundle { implicit val scalaRxContext = ctx } } -} \ No newline at end of file +} diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/AlertStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/AlertStyles.scala index e3a5be5..3925828 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/AlertStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/AlertStyles.scala @@ -5,14 +5,14 @@ import com.karasiq.bootstrap.context.RenderingContext trait AlertStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class AlertStyle private[alert](val styleName: String) extends ModifierFactory { + final class AlertStyle private[alert] (val styleName: String) extends ModifierFactory { val createModifier = s"alert-$styleName".addClass } object AlertStyle { lazy val success = new AlertStyle("success") - lazy val info = new AlertStyle("info") + lazy val info = new AlertStyle("info") lazy val warning = new AlertStyle("warning") - lazy val danger = new AlertStyle("danger") + lazy val danger = new AlertStyle("danger") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/Alerts.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/Alerts.scala index b8bde42..e660f68 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/Alerts.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/Alerts.scala @@ -11,16 +11,17 @@ trait Alerts extends AlertStyles { self: RenderingContext ⇒ def style: AlertStyle } - /** - * Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. - * @see [[http://getbootstrap.com/components/#alerts]] + /** Provide contextual feedback messages for typical user actions with the handful of available and flexible alert + * messages. + * @see + * [[http://getbootstrap.com/components/#alerts]] */ trait AlertFactory { def create(style: AlertStyle): Alert def link: Tag def apply(style: AlertStyle, content: Modifier*): Tag = { - create(style).renderTag(content:_*) + create(style).renderTag(content: _*) } } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/UniversalAlerts.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/UniversalAlerts.scala index f96cc44..508f131 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/alert/UniversalAlerts.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/alert/UniversalAlerts.scala @@ -23,8 +23,13 @@ trait UniversalAlerts { self: RenderingContext with Alerts with Utils ⇒ private[this] val classes = Seq("alert", "alert-dismissible", "fade", "in") def closeButton: Tag = { - button(`type` := "button", "close".addClass, `data-dismiss` := "alert", - aria.label := "Close", span(aria.hidden := true, raw("×"))) + button( + `type` := "button", + "close".addClass, + `data-dismiss` := "alert", + aria.label := "Close", + span(aria.hidden := true, raw("×")) + ) } override def renderTag(md: ModifierT*): TagT = { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonGroupStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonGroupStyles.scala index 1f93fd0..31a135c 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonGroupStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonGroupStyles.scala @@ -12,15 +12,15 @@ trait ButtonGroupStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class ButtonGroupSizeValue private[buttons](val size: String) extends ButtonGroupSize { - val className = s"btn-group-$size" + final class ButtonGroupSizeValue private[buttons] (val size: String) extends ButtonGroupSize { + val className = s"btn-group-$size" val createModifier = className.addClass } object ButtonGroupSize { - def default: ButtonGroupSize = DefaultButtonGroupSize - lazy val large: ButtonGroupSize = new ButtonGroupSizeValue("lg") - lazy val small: ButtonGroupSize = new ButtonGroupSizeValue("sm") + def default: ButtonGroupSize = DefaultButtonGroupSize + lazy val large: ButtonGroupSize = new ButtonGroupSizeValue("lg") + lazy val small: ButtonGroupSize = new ButtonGroupSizeValue("sm") lazy val extraSmall: ButtonGroupSize = new ButtonGroupSizeValue("xs") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonStyles.scala index f61d702..0716f48 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/ButtonStyles.scala @@ -12,38 +12,36 @@ trait ButtonStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class ButtonSizeValue private[buttons](size: String) extends ButtonSize { - val className = s"btn-$size" + final class ButtonSizeValue private[buttons] (size: String) extends ButtonSize { + val className = s"btn-$size" val createModifier = className.addClass } - /** - * @see [[https://getbootstrap.com/css/#buttons-sizes]] + /** @see + * [[https://getbootstrap.com/css/#buttons-sizes]] */ object ButtonSize { - def default = DefaultButtonSize - lazy val large = new ButtonSizeValue("lg") - lazy val small = new ButtonSizeValue("sm") + def default = DefaultButtonSize + lazy val large = new ButtonSizeValue("lg") + lazy val small = new ButtonSizeValue("sm") lazy val extraSmall = new ButtonSizeValue("xs") } - - - final class ButtonStyle private[buttons](style: String) extends ModifierFactory { - val className = s"btn-$style" + final class ButtonStyle private[buttons] (style: String) extends ModifierFactory { + val className = s"btn-$style" val createModifier = className.addClass } - /** - * @see [[https://getbootstrap.com/css/#buttons-options]] + /** @see + * [[https://getbootstrap.com/css/#buttons-options]] */ object ButtonStyle { lazy val default = new ButtonStyle("default") lazy val primary = new ButtonStyle("primary") lazy val success = new ButtonStyle("success") - lazy val info = new ButtonStyle("info") + lazy val info = new ButtonStyle("info") lazy val warning = new ButtonStyle("warning") - lazy val danger = new ButtonStyle("danger") - lazy val link = new ButtonStyle("link") + lazy val danger = new ButtonStyle("danger") + lazy val link = new ButtonStyle("link") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/Buttons.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/Buttons.scala index 3fae6d4..bf6dc3c 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/Buttons.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/Buttons.scala @@ -6,7 +6,8 @@ import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap.utils.Utils -trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒ +trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { + self: RenderingContext with BootstrapComponents with ClassModifiers with Utils ⇒ import scalaTags.all._ type Button <: AbstractButton @@ -21,16 +22,27 @@ trait Buttons extends ButtonStyles with ButtonGroups with ButtonStates { self: R } trait ButtonFactory { - /** - * Creates button - * @param style Use any of the available button classes to quickly create a styled button - * @param size Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes - * @param block Create block level buttons—those that span the full width of a parent— by adding `.btn-block` - * @param active Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active - * @param disabled Make buttons look unclickable by fading them back with `opacity` - * @see [[http://getbootstrap.com/css/#buttons]] + + /** Creates button + * @param style + * Use any of the available button classes to quickly create a styled button + * @param size + * Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes + * @param block + * Create block level buttons—those that span the full width of a parent— by adding `.btn-block` + * @param active + * Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active + * @param disabled + * Make buttons look unclickable by fading them back with `opacity` + * @see + * [[http://getbootstrap.com/css/#buttons]] */ - def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false): Button + def apply( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ): Button } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtonGroups.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtonGroups.scala index af09675..27f9436 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtonGroups.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtonGroups.scala @@ -9,14 +9,14 @@ trait UniversalButtonGroups { self: RenderingContext with ButtonGroups with Boot type ButtonGroup = UniversalButtonGroup object ButtonGroup extends ButtonGroupFactory { def apply(size: ButtonGroupSize, buttons: Modifier*): ButtonGroup = { - new UniversalButtonGroup(size, buttons:_*) + new UniversalButtonGroup(size, buttons: _*) } } type ButtonToolbar = UniversalButtonToolbar object ButtonToolbar extends ButtonToolbarFactory { def apply(buttonGroups: ButtonGroup*): ButtonToolbar = { - new UniversalButtonToolbar(buttonGroups:_*) + new UniversalButtonToolbar(buttonGroups: _*) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtons.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtons.scala index 79f4a9e..5d60d2f 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtons.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/buttons/UniversalButtons.scala @@ -5,16 +5,22 @@ import scala.language.postfixOps import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} -trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒ +trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups { + self: RenderingContext with BootstrapComponents with ClassModifiers with Buttons ⇒ import scalaTags.all._ type Button = ButtonBuilder object Button extends ButtonFactory { - /** - * Shortcut to [[com.karasiq.bootstrap.buttons.UniversalButtons.ButtonBuilder ButtonBuilder]]. + + /** Shortcut to [[com.karasiq.bootstrap.buttons.UniversalButtons.ButtonBuilder ButtonBuilder]]. */ - def apply(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false): ButtonBuilder = { + def apply( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ): ButtonBuilder = { ButtonBuilder(style, size, block, active, disabled) } } @@ -22,25 +28,39 @@ trait UniversalButtons extends UniversalButtonStates with UniversalButtonGroups trait UniversalButton extends AbstractButton { override def renderTag(md: ModifierT*): TagT = { @inline def optional(flag: Boolean, className: String) = if (flag) Some(className) else None - val classList = Seq(Some("btn"), optional(block, "btn-block"), optional(active, "active"), optional(disabled, "disabled")).flatten.map(_.addClass) - scalaTags.tags.button(`type` := "button", classList, style, size)(md:_*) + val classList = Seq( + Some("btn"), + optional(block, "btn-block"), + optional(active, "active"), + optional(disabled, "disabled") + ).flatten.map(_.addClass) + scalaTags.tags.button(`type` := "button", classList, style, size)(md: _*) } } - /** - * Button builder - * @param style Use any of the available button classes to quickly create a styled button - * @param size Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes - * @param block Create block level buttons—those that span the full width of a parent— by adding `.btn-block` - * @param active Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active - * @param disabled Make buttons look unclickable by fading them back with `opacity` - * @see [[http://getbootstrap.com/css/#buttons]] + /** Button builder + * @param style + * Use any of the available button classes to quickly create a styled button + * @param size + * Fancy larger or smaller buttons? Add `.btn-lg`, `.btn-sm`, or `.btn-xs` for additional sizes + * @param block + * Create block level buttons—those that span the full width of a parent— by adding `.btn-block` + * @param active + * Buttons will appear pressed (with a darker background, darker border, and inset shadow) when active + * @param disabled + * Make buttons look unclickable by fading them back with `opacity` + * @see + * [[http://getbootstrap.com/css/#buttons]] */ - case class ButtonBuilder(style: ButtonStyle = ButtonStyle.default, size: ButtonSize = ButtonSize.default, - block: Boolean = false, active: Boolean = false, disabled: Boolean = false) - extends UniversalButton { + case class ButtonBuilder( + style: ButtonStyle = ButtonStyle.default, + size: ButtonSize = ButtonSize.default, + block: Boolean = false, + active: Boolean = false, + disabled: Boolean = false + ) extends UniversalButton { def withStyle(style: ButtonStyle): ButtonBuilder = copy(style = style) - def withSize(size: ButtonSize): ButtonBuilder = copy(size = size) + def withSize(size: ButtonSize): ButtonBuilder = copy(size = size) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/Carousels.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/Carousels.scala index bff1326..5b5810a 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/Carousels.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/Carousels.scala @@ -16,10 +16,11 @@ trait Carousels { self: RenderingContext with Utils ⇒ def content: Rx[Seq[Modifier]] } - /** - * A slideshow component for cycling through elements, like a carousel. - * @note Nested carousels are not supported. - * @see [[http://getbootstrap.com/javascript/#carousel]] + /** A slideshow component for cycling through elements, like a carousel. + * @note + * Nested carousels are not supported. + * @see + * [[http://getbootstrap.com/javascript/#carousel]] */ trait CarouselFactory { def apply(data: Rx[Seq[Modifier]], id: String = Bootstrap.newId): Carousel diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/TextCarousels.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/TextCarousels.scala index c3b69cf..1a5aec3 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/TextCarousels.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/TextCarousels.scala @@ -9,7 +9,8 @@ import com.karasiq.bootstrap.context.RenderingContext import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait TextCarousels extends UniversalCarousels { self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒ +trait TextCarousels extends UniversalCarousels { + self: RenderingContext with Carousels with Utils with Icons with BootstrapComponents ⇒ import scalaTags.all._ type Carousel = UniversalCarousel diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/UniversalCarousels.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/UniversalCarousels.scala index 97605d0..1aa1a75 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/UniversalCarousels.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/carousel/UniversalCarousels.scala @@ -23,7 +23,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with val indexes = content().indices ol(`class` := "carousel-indicators")( mkIndicator(indexes.head)(`class` := "active"), - for (i <- indexes.tail) yield mkIndicator(i) + for (i ← indexes.tail) yield mkIndicator(i) ) } @@ -31,7 +31,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with val data = content() div(`class` := "carousel-inner", role := "listbox")( div(`class` := "item active", data.head), - for (slide <- data.tail) yield div(`class` := "item", slide) + for (slide ← data.tail) yield div(`class` := "item", slide) ) } @@ -43,7 +43,12 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with Bootstrap.icon("chevron-left"), span(`class` := "sr-only", "Previous") ), - a(`class` := "right carousel-control", href := s"#$carouselElementId", role := "button", `data-slide` := "next")( + a( + `class` := "right carousel-control", + href := s"#$carouselElementId", + role := "button", + `data-slide` := "next" + )( Bootstrap.icon("chevron-right"), span(`class` := "sr-only", "Next") ) @@ -51,7 +56,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with } def render(md: Modifier*): Modifier = { - carousel(`data-ride` := "carousel")(md:_*) + carousel(`data-ride` := "carousel")(md: _*) } } @@ -59,7 +64,7 @@ trait UniversalCarousels { self: RenderingContext with Carousels with Utils with def slide(image: String, content: Modifier*): Modifier = { Seq( img(src := image), - div(`class` := "carousel-caption")(content:_*) + div(`class` := "carousel-caption")(content: _*) ) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/Collapses.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/Collapses.scala index dcbf393..971b639 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/Collapses.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/Collapses.scala @@ -20,7 +20,7 @@ trait Collapses { self: RenderingContext with Utils with BootstrapComponents ⇒ def create(title: Modifier, collapseId: String = Bootstrap.newId): Collapse def apply(title: Modifier)(content: Modifier*): Tag = { - create(title, Bootstrap.newId).renderTag(content:_*) + create(title, Bootstrap.newId).renderTag(content: _*) } } -} \ No newline at end of file +} diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/UniversalCollapses.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/UniversalCollapses.scala index d2832bd..b85f47b 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/UniversalCollapses.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/collapse/UniversalCollapses.scala @@ -15,8 +15,7 @@ trait UniversalCollapses { self: RenderingContext with Collapses with Utils ⇒ } } - class UniversalCollapse(val title: Modifier, - val collapseId: String = Bootstrap.newId) extends AbstractCollapse { + class UniversalCollapse(val title: Modifier, val collapseId: String = Bootstrap.newId) extends AbstractCollapse { protected val collapseElementId = s"$collapseId-collapse" @@ -37,4 +36,4 @@ trait UniversalCollapses { self: RenderingContext with Collapses with Utils ⇒ div(Bootstrap.button(title, this.toggle), container(Bootstrap.well(md))) } } -} \ No newline at end of file +} diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/Dropdowns.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/Dropdowns.scala index 72f6d4d..238fc5e 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/Dropdowns.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/Dropdowns.scala @@ -17,7 +17,7 @@ trait Dropdowns { self: RenderingContext ⇒ def dropup: Tag def renderTag(md: ModifierT*): TagT = { - this.dropdown(md:_*) + this.dropdown(md: _*) } } @@ -25,7 +25,7 @@ trait Dropdowns { self: RenderingContext ⇒ def apply(title: Modifier, items: Modifier*): Dropdown def link(targetId: String, md: Modifier*): Tag - def dropup(title: Modifier, items: Modifier*): Tag = apply(title, items:_*).dropup - def item(md: Modifier*): Tag = this.link("javascript:void(0);", md:_*) + def dropup(title: Modifier, items: Modifier*): Tag = apply(title, items: _*).dropup + def item(md: Modifier*): Tag = this.link("javascript:void(0);", md: _*) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/UniversalDropdowns.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/UniversalDropdowns.scala index ca59da3..d7b8ef9 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/UniversalDropdowns.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/dropdown/UniversalDropdowns.scala @@ -19,16 +19,17 @@ trait UniversalDropdowns { self: RenderingContext with Dropdowns with Utils ⇒ } } - private[dropdown] final class UniversalDropdown(val title: Modifier, - val items: Seq[Modifier], - val dropdownId: String = Bootstrap.newId) - extends AbstractDropdown { + private[dropdown] final class UniversalDropdown( + val title: Modifier, + val items: Seq[Modifier], + val dropdownId: String = Bootstrap.newId + ) extends AbstractDropdown { def dropdown: Tag = { div(`class` := "dropdown")( Bootstrap.button( "dropdown-toggle".addClass, - id := dropdownId, + id := dropdownId, `data-toggle` := "dropdown", aria.haspopup := true, aria.expanded := false, @@ -36,7 +37,7 @@ trait UniversalDropdowns { self: RenderingContext with Dropdowns with Utils ⇒ Bootstrap.nbsp, span(`class` := "caret") ), - ul(`class` := "dropdown-menu", aria.labelledby := dropdownId)(items:_*) + ul(`class` := "dropdown-menu", aria.labelledby := dropdownId)(items: _*) ) } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/form/Forms.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/form/Forms.scala index c31a37d..3e89a42 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/form/Forms.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/form/Forms.scala @@ -23,9 +23,9 @@ trait Forms { self: RenderingContext with Utils ⇒ } trait FormFactory { - type FormT = Tag + type FormT = Tag type InlineFormT = Tag - type SubmitT = Tag + type SubmitT = Tag def apply(md: Modifier*): FormT def inline(md: Modifier*): InlineFormT @@ -53,7 +53,7 @@ trait Forms { self: RenderingContext with Utils ⇒ def isDefaultOption: Boolean def inputType: String = "radio" - def inputId: String = this.radioId + def inputId: String = this.radioId } trait AbstractFormRadioGroup extends AbstractFormInput { @@ -64,22 +64,27 @@ trait Forms { self: RenderingContext with Utils ⇒ } trait FormInputFactory { - type InputT = Tag - type RadioT = AbstractFormRadio + type InputT = Tag + type RadioT = AbstractFormRadio type RadioGroupT = AbstractFormRadioGroup - type SelectT = AbstractFormSelect + type SelectT = AbstractFormSelect def ofType(inputType: String, label: Modifier, md: Modifier*): InputT - def text(label: Modifier, md: Modifier*): Tag = this.ofType("text", label, md:_*) - def number(label: Modifier, md: Modifier*): Tag = this.ofType("number", label, md:_*) - def email(label: Modifier, md: Modifier*): Tag = this.ofType("email", label, md:_*) - def password(label: Modifier, md: Modifier*): Tag = this.ofType("password", label, md:_*) + def text(label: Modifier, md: Modifier*): Tag = this.ofType("text", label, md: _*) + def number(label: Modifier, md: Modifier*): Tag = this.ofType("number", label, md: _*) + def email(label: Modifier, md: Modifier*): Tag = this.ofType("email", label, md: _*) + def password(label: Modifier, md: Modifier*): Tag = this.ofType("password", label, md: _*) def file(label: Modifier, md: Modifier*): Tag def textArea(title: Modifier, md: Modifier*): InputT def checkbox(label: Modifier, md: Modifier*): InputT - def radio(title: Modifier, radioName: String, radioValue: String, - initialState: Boolean = false, radioId: String = Bootstrap.newId): RadioT + def radio( + title: Modifier, + radioName: String, + radioValue: String, + initialState: Boolean = false, + radioId: String = Bootstrap.newId + ): RadioT def radioGroup[T <: RadioT](radios: Rx[Seq[T]]): RadioGroupT @@ -108,7 +113,7 @@ trait Forms { self: RenderingContext with Utils ⇒ } // Default - def apply(label: Modifier, md: Modifier*): Tag = this.text(label, md:_*) + def apply(label: Modifier, md: Modifier*): Tag = this.text(label, md: _*) } trait FormInputGroupFactory { @@ -120,11 +125,10 @@ trait Forms { self: RenderingContext with Utils ⇒ def addon(md: Modifier*): AddonT def apply(label: Modifier, md: Modifier*): GroupT - def label(md: Modifier*): InputT = scalaTags.tags.label(md) - def text(md: Modifier*): InputT = this.createInput("text", md:_*) - def number(md: Modifier*): InputT = this.createInput("number", md:_*) - def email(md: Modifier*): InputT = this.createInput("email", md:_*) - def password(md: Modifier*): InputT = this.createInput("password", md:_*) + def label(md: Modifier*): InputT = scalaTags.tags.label(md) + def text(md: Modifier*): InputT = this.createInput("text", md: _*) + def number(md: Modifier*): InputT = this.createInput("number", md: _*) + def email(md: Modifier*): InputT = this.createInput("email", md: _*) + def password(md: Modifier*): InputT = this.createInput("password", md: _*) } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/grid/Grids.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/grid/Grids.scala index 35145d6..0023a59 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/grid/Grids.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/grid/Grids.scala @@ -10,12 +10,12 @@ trait Grids { self: RenderingContext ⇒ type GridSystem <: AbstractGridSystem val GridSystem: GridSystem - /** - * @see [[https://getbootstrap.com/css/#grid-options]] + /** @see + * [[https://getbootstrap.com/css/#grid-options]] */ trait AbstractGridSystem { type ContainerT = Tag - type RowT = Tag + type RowT = Tag def container: ContainerT def containerFluid: ContainerT @@ -42,7 +42,7 @@ trait Grids { self: RenderingContext ⇒ trait AbstractColumn extends ModifierFactory { def size: Int def asDiv: Tag - def apply(md: ModifierT*): Tag = this.asDiv.apply(md:_*) + def apply(md: ModifierT*): Tag = this.asDiv.apply(md: _*) } trait AbstractColumnFactory { @@ -56,8 +56,8 @@ trait Grids { self: RenderingContext ⇒ def responsive(xsSize: Int, smSize: Int, mdSize: Int, lgSize: Int): AbstractColumn = new AbstractColumn { override val createModifier: ModifierT = Seq[ModifierT](xs(xsSize), sm(smSize), md(mdSize), lg(lgSize)) - def size: Int = lgSize - def asDiv: Tag = div(createModifier) + def size: Int = lgSize + def asDiv: Tag = div(createModifier) } def apply(size: Int): AbstractColumn = this.responsive(size, size, size, size) @@ -76,4 +76,3 @@ trait Grids { self: RenderingContext ⇒ def print: AbstractGridVisibility } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/grid/UniversalGrids.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/grid/UniversalGrids.scala index 5f49b30..52f411b 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/grid/UniversalGrids.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/grid/UniversalGrids.scala @@ -9,11 +9,11 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ type GridSystem = UniversalGridSystem object GridSystem extends UniversalGridSystem - + trait UniversalGridSystem extends AbstractGridSystem { - val container: Tag = div(`class` := "container") + val container: Tag = div(`class` := "container") val containerFluid: Tag = div(`class` := "container-fluid") - val row: Tag = div(`class` := "row") + val row: Tag = div(`class` := "row") object col extends AbstractColumnFactory { val minSize: Int = 1 @@ -27,21 +27,21 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ private[this] def singleColSize(screenSize: String, _size: Int): GridColSize = new GridColSize { // require(modifier.nonEmpty && size <= 12 && size > 0, "Invalid grid column properties") override val createModifier = ("col-" + screenSize + "-" + _size).addClass - override val size: Int = _size + override val size: Int = _size } - + def xs(size: Int): GridColSize = singleColSize("xs", size) def sm(size: Int): GridColSize = singleColSize("sm", size) def md(size: Int): GridColSize = singleColSize("md", size) def lg(size: Int): GridColSize = singleColSize("lg", size) } - /** - * @see [[http://getbootstrap.com/css/#responsive-utilities]] + /** @see + * [[http://getbootstrap.com/css/#responsive-utilities]] */ object hidden extends AbstractGridVisibilityFactory { - final class UniversalGridHiddenModifier private[grid](val screenSize: String) extends AbstractGridVisibility { - val hidden = true + final class UniversalGridHiddenModifier private[grid] (val screenSize: String) extends AbstractGridVisibility { + val hidden = true val createModifier = ("hidden-" + screenSize).addClass } @@ -50,37 +50,40 @@ trait UniversalGrids { self: RenderingContext with Grids with ClassModifiers ⇒ new UniversalGridHiddenModifier(size) } - lazy val xs: UniversalGridHiddenModifier = "xs" - lazy val sm: UniversalGridHiddenModifier = "sm" - lazy val md: UniversalGridHiddenModifier = "md" - lazy val lg: UniversalGridHiddenModifier = "lg" + lazy val xs: UniversalGridHiddenModifier = "xs" + lazy val sm: UniversalGridHiddenModifier = "sm" + lazy val md: UniversalGridHiddenModifier = "md" + lazy val lg: UniversalGridHiddenModifier = "lg" lazy val print: UniversalGridHiddenModifier = "print" } - /** - * @see [[http://getbootstrap.com/css/#responsive-utilities]] + /** @see + * [[http://getbootstrap.com/css/#responsive-utilities]] */ object visible extends AbstractGridVisibilityFactory { - class UniversalGridVisibleModifier private[grid](val screenSize: String, as: String) extends AbstractGridVisibility { - val hidden = false + class UniversalGridVisibleModifier private[grid] (val screenSize: String, as: String) + extends AbstractGridVisibility { + val hidden = false val createModifier = ("visible-" + screenSize + "-" + as).addClass } - final class UniversalGridVisibility private[grid](screenSize: String) extends UniversalGridVisibleModifier(screenSize, "block") { + final class UniversalGridVisibility private[grid] (screenSize: String) + extends UniversalGridVisibleModifier(screenSize, "block") { val block: UniversalGridVisibleModifier = this - lazy val inline = new UniversalGridVisibleModifier(screenSize, "inline") - lazy val `inline-block` = new UniversalGridVisibleModifier(screenSize, "inline-block") + lazy val inline = new UniversalGridVisibleModifier(screenSize, "inline") + lazy val `inline-block` = new UniversalGridVisibleModifier(screenSize, "inline-block") } @inline - private[this] implicit def gridVisibility(size: String): UniversalGridVisibility = new UniversalGridVisibility(size) + private[this] implicit def gridVisibility(size: String): UniversalGridVisibility = new UniversalGridVisibility( + size + ) - lazy val xs: UniversalGridVisibility = "xs" - lazy val sm: UniversalGridVisibility = "sm" - lazy val md: UniversalGridVisibility = "md" - lazy val lg: UniversalGridVisibility = "lg" + lazy val xs: UniversalGridVisibility = "xs" + lazy val sm: UniversalGridVisibility = "sm" + lazy val md: UniversalGridVisibility = "md" + lazy val lg: UniversalGridVisibility = "lg" lazy val print: UniversalGridVisibility = "print" } } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/icons/UniversalIcons.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/icons/UniversalIcons.scala index fe257b0..31ab59f 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/icons/UniversalIcons.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/icons/UniversalIcons.scala @@ -14,17 +14,17 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit } def fa(iconName: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { - FontAwesome(iconName, styles:_*) + FontAwesome(iconName, styles: _*) } def faFw(iconName: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { - FontAwesome(iconName, FontAwesome.fixedWidth +: styles:_*) + FontAwesome(iconName, FontAwesome.fixedWidth +: styles: _*) } } final class BootstrapGlyphicon(val iconName: String) extends BootstrapHtmlComponent with IconModifier { override def renderTag(md: ModifierT*): TagT = { - span(`class` := "glyphicon glyphicon-" + iconName, aria.hidden := true)(md:_*) + span(`class` := "glyphicon glyphicon-" + iconName, aria.hidden := true)(md: _*) } } @@ -34,9 +34,11 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit } } - final class FontAwesomeIcon(val iconName: String, val styles: Seq[FontAwesomeStyle]) extends BootstrapHtmlComponent with IconModifier { + final class FontAwesomeIcon(val iconName: String, val styles: Seq[FontAwesomeStyle]) + extends BootstrapHtmlComponent + with IconModifier { override def renderTag(md: ModifierT*): TagT = { - i(`class` := "fa fa-" + iconName, styles, aria.hidden := true)(md:_*) + i(`class` := "fa fa-" + iconName, styles, aria.hidden := true)(md: _*) } } @@ -44,8 +46,8 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit override val createModifier = ("fa-" + styleName).addClass } - /** - * @see [[https://fortawesome.github.io/Font-Awesome/examples]] + /** @see + * [[https://fortawesome.github.io/Font-Awesome/examples]] */ object FontAwesome { def apply(name: String, styles: FontAwesomeStyle*): FontAwesomeIcon = { @@ -59,10 +61,10 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit // Size modifiers lazy val large: FontAwesomeStyle = "lg" - lazy val x2: FontAwesomeStyle = "2x" - lazy val x3: FontAwesomeStyle = "3x" - lazy val x4: FontAwesomeStyle = "4x" - lazy val x5: FontAwesomeStyle = "5x" + lazy val x2: FontAwesomeStyle = "2x" + lazy val x3: FontAwesomeStyle = "3x" + lazy val x4: FontAwesomeStyle = "4x" + lazy val x5: FontAwesomeStyle = "5x" // Fixed width lazy val fixedWidth: FontAwesomeStyle = "fw" @@ -72,20 +74,20 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit lazy val line: FontAwesomeStyle = "li" // Bordered & Pulled icons - lazy val border: FontAwesomeStyle = "border" + lazy val border: FontAwesomeStyle = "border" lazy val pullRight: FontAwesomeStyle = "pull-right" - lazy val pullLeft: FontAwesomeStyle = "pull-left" + lazy val pullLeft: FontAwesomeStyle = "pull-left" // Animated icons - lazy val spin: FontAwesomeStyle = "spin" + lazy val spin: FontAwesomeStyle = "spin" lazy val pulse: FontAwesomeStyle = "pulse" // Rotated & Flipped - lazy val rotate90: FontAwesomeStyle = "rotate-90" - lazy val rotate180: FontAwesomeStyle = "rotate-90" - lazy val rotate270: FontAwesomeStyle = "rotate-90" + lazy val rotate90: FontAwesomeStyle = "rotate-90" + lazy val rotate180: FontAwesomeStyle = "rotate-90" + lazy val rotate270: FontAwesomeStyle = "rotate-90" lazy val flipHorizontal: FontAwesomeStyle = "flip-horizontal" - lazy val flipVertical: FontAwesomeStyle = "flip-vertical" + lazy val flipVertical: FontAwesomeStyle = "flip-vertical" // Stacked icons def stacked(icons: Tag*): Tag = { @@ -96,13 +98,13 @@ trait UniversalIcons { self: RenderingContext with Icons with ClassModifiers wit lazy val stacked2x: FontAwesomeStyle = "stack-2x" } - //noinspection SpellCheckingInspection + // noinspection SpellCheckingInspection implicit class BootstrapIconsOps(iconName: String) { - def glyphicon: BootstrapGlyphicon = Icon(iconName) - def fontAwesome(styles: FontAwesomeStyle*): FontAwesomeIcon = Icon.fa(iconName, styles:_*) + def glyphicon: BootstrapGlyphicon = Icon(iconName) + def fontAwesome(styles: FontAwesomeStyle*): FontAwesomeIcon = Icon.fa(iconName, styles: _*) // Shortcuts - def faIcon: FontAwesomeIcon = this.fontAwesome() + def faIcon: FontAwesomeIcon = this.fontAwesome() def faFwIcon: FontAwesomeIcon = this.fontAwesome(FontAwesome.fixedWidth) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/ModalStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/ModalStyles.scala index 6e40589..03bc54c 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/ModalStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/ModalStyles.scala @@ -12,15 +12,15 @@ trait ModalStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class CustomModalDialogSize private[modal](size: String) extends ModalDialogSize { + final class CustomModalDialogSize private[modal] (size: String) extends ModalDialogSize { val className: String = size - val createModifier = className.addClass + val createModifier = className.addClass } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object ModalDialogSize { val default = DefaultModalDialogSize - val small = new CustomModalDialogSize("modal-sm") - val large = new CustomModalDialogSize("modal-lg") + val small = new CustomModalDialogSize("modal-sm") + val large = new CustomModalDialogSize("modal-lg") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/Modals.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/Modals.scala index d083eb6..bb2a704 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/Modals.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/Modals.scala @@ -5,7 +5,8 @@ import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap.utils.Utils -trait Modals extends ModalStyles { self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons ⇒ +trait Modals extends ModalStyles { + self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons ⇒ import scalaTags.all._ type Modal <: AbstractModal with BootstrapHtmlComponent @@ -23,17 +24,22 @@ trait Modals extends ModalStyles { self: RenderingContext with Utils with Bootst def dismiss: Modifier } - /** - * Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. - * @see [[https://getbootstrap.com/javascript/#modals]] + /** Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. + * @see + * [[https://getbootstrap.com/javascript/#modals]] */ trait ModalFactory { def closeButton(title: String = "Close"): Tag def button(md: Modifier*): Tag - def apply(title: Modifier = "Modal dialog", body: Modifier = "", buttons: Modifier = closeButton(), - style: Modifier = Bootstrap.noModifier, dialogStyle: Modifier = ModalDialogSize.default, - contentStyle: Modifier = Bootstrap.noModifier, modalId: String = Bootstrap.newId): Modal + def apply( + title: Modifier = "Modal dialog", + body: Modifier = "", + buttons: Modifier = closeButton(), + style: Modifier = Bootstrap.noModifier, + dialogStyle: Modifier = ModalDialogSize.default, + contentStyle: Modifier = Bootstrap.noModifier, + modalId: String = Bootstrap.newId + ): Modal } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/UniversalModals.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/UniversalModals.scala index 92306d9..3c758f9 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/modal/UniversalModals.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/modal/UniversalModals.scala @@ -5,16 +5,23 @@ import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap.utils.Utils -trait UniversalModals { self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Buttons with Modals with ModalStyles ⇒ +trait UniversalModals { + self: RenderingContext + with Utils + with BootstrapComponents + with ClassModifiers + with Buttons + with Modals + with ModalStyles ⇒ import scalaTags.all._ import BootstrapAttrs._ type Modal = ModalBuilder - /** - * Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. - * @see [[https://getbootstrap.com/javascript/#modals]] + /** Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults. + * @see + * [[https://getbootstrap.com/javascript/#modals]] */ object Modal extends ModalFactory { val dismiss: Modifier = { @@ -29,9 +36,15 @@ trait UniversalModals { self: RenderingContext with Utils with BootstrapComponen Button(ButtonStyle.primary)(md) } - def apply(title: Modifier = "Modal dialog", body: Modifier = "", buttons: Modifier = closeButton(), - style: Modifier = Bootstrap.noModifier, dialogStyle: Modifier = ModalDialogSize.default, - contentStyle: Modifier = Bootstrap.noModifier, modalId: String = Bootstrap.newId): ModalBuilder = { + def apply( + title: Modifier = "Modal dialog", + body: Modifier = "", + buttons: Modifier = closeButton(), + style: Modifier = Bootstrap.noModifier, + dialogStyle: Modifier = ModalDialogSize.default, + contentStyle: Modifier = Bootstrap.noModifier, + modalId: String = Bootstrap.newId + ): ModalBuilder = { ModalBuilder(title, body, buttons, style, dialogStyle, contentStyle, modalId) } } @@ -75,19 +88,26 @@ trait UniversalModals { self: RenderingContext with Utils with BootstrapComponen } def renderTag(md: ModifierT*): TagT = { - modal(md:_*) + modal(md: _*) } } - case class ModalBuilder(title: Modifier, body: Modifier, buttons: Modifier, style: Modifier, - dialogStyle: Modifier, contentStyle: Modifier, modalId: String) extends UniversalModal { - - def withTitle(md: Modifier*): ModalBuilder = copy(title = md) - def withBody(md: Modifier*): ModalBuilder = copy(body = md) - def withButtons(md: Modifier*): ModalBuilder = copy(buttons = md) - def withStyle(md: Modifier*): ModalBuilder = copy(style = md) - def withDialogStyle(md: Modifier*): ModalBuilder = copy(dialogStyle = md) + case class ModalBuilder( + title: Modifier, + body: Modifier, + buttons: Modifier, + style: Modifier, + dialogStyle: Modifier, + contentStyle: Modifier, + modalId: String + ) extends UniversalModal { + + def withTitle(md: Modifier*): ModalBuilder = copy(title = md) + def withBody(md: Modifier*): ModalBuilder = copy(body = md) + def withButtons(md: Modifier*): ModalBuilder = copy(buttons = md) + def withStyle(md: Modifier*): ModalBuilder = copy(style = md) + def withDialogStyle(md: Modifier*): ModalBuilder = copy(dialogStyle = md) def withContentStyle(md: Modifier*): ModalBuilder = copy(contentStyle = md) - def withId(id: String): ModalBuilder = copy(modalId = id) + def withId(id: String): ModalBuilder = copy(modalId = id) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBarStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBarStyles.scala index 81e8e13..0c4c350 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBarStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBarStyles.scala @@ -5,8 +5,8 @@ import com.karasiq.bootstrap.context.RenderingContext trait NavigationBarStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class NavigationBarStyle private[navbar](style: String) extends ModifierFactory { - val className = s"navbar-$style" + final class NavigationBarStyle private[navbar] (style: String) extends ModifierFactory { + val className = s"navbar-$style" val createModifier = className.addClass } @@ -16,8 +16,8 @@ trait NavigationBarStyles { self: RenderingContext ⇒ lazy val inverse = new NavigationBarStyle("inverse") // Position - lazy val fixedTop = new NavigationBarStyle("fixed-top") + lazy val fixedTop = new NavigationBarStyle("fixed-top") lazy val fixedBottom = new NavigationBarStyle("fixed-bottom") - lazy val staticTop = new NavigationBarStyle("static-top") + lazy val staticTop = new NavigationBarStyle("static-top") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBars.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBars.scala index 5da626e..f695106 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBars.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/NavigationBars.scala @@ -10,7 +10,8 @@ import com.karasiq.bootstrap.grid.Grids import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait NavigationBars extends NavigationBarStyles { self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers ⇒ +trait NavigationBars extends NavigationBarStyles { + self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers ⇒ import scalaTags.all._ // ----------------------------------------------------------------------- @@ -20,9 +21,9 @@ trait NavigationBars extends NavigationBarStyles { self: RenderingContext with I case class NavigationTabs(tabs: Rx[Seq[NavigationTab]]) object NavigationTabs { - implicit def toRxSeq(nt: NavigationTabs): Rx[Seq[NavigationTab]] = nt.tabs + implicit def toRxSeq(nt: NavigationTabs): Rx[Seq[NavigationTab]] = nt.tabs implicit def fromRxSeq(seq: Rx[Seq[NavigationTab]]): NavigationTabs = new NavigationTabs(seq) - implicit def fromSeq(seq: Seq[NavigationTab]): NavigationTabs = fromRxSeq(Rx(seq)) + implicit def fromSeq(seq: Seq[NavigationTab]): NavigationTabs = fromRxSeq(Rx(seq)) } // ----------------------------------------------------------------------- @@ -52,20 +53,30 @@ trait NavigationBars extends NavigationBarStyles { self: RenderingContext with I } trait NavigationBarFactory { - /** - * Creates navigation bar - * @param tabs Navbar tabs - * @param barId Bar id attribute - * @param brand Navbar "brand" content - * @param styles Navbar styles - * @param container Navbar container type - * @param contentContainer Navbar content container type - * @return Navigation bar + + /** Creates navigation bar + * @param tabs + * Navbar tabs + * @param barId + * Bar id attribute + * @param brand + * Navbar "brand" content + * @param styles + * Navbar styles + * @param container + * Navbar container type + * @param contentContainer + * Navbar content container type + * @return + * Navigation bar */ - def apply(tabs: Seq[NavigationTab] = Nil, barId: String = Bootstrap.newId, brand: Modifier = "Navigation", - styles: Seq[NavigationBarStyle] = Seq(NavigationBarStyle.default, NavigationBarStyle.fixedTop), - container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), - contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md))): NavigationBar + def apply( + tabs: Seq[NavigationTab] = Nil, + barId: String = Bootstrap.newId, + brand: Modifier = "Navigation", + styles: Seq[NavigationBarStyle] = Seq(NavigationBarStyle.default, NavigationBarStyle.fixedTop), + container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), + contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md)) + ): NavigationBar } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/UniversalNavigationBars.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/UniversalNavigationBars.scala index 6e98f95..22d0750 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/UniversalNavigationBars.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/navbar/UniversalNavigationBars.scala @@ -8,7 +8,15 @@ import com.karasiq.bootstrap.grid.Grids import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait UniversalNavigationBars { self: RenderingContext with Icons with Grids with Utils with BootstrapComponents with ClassModifiers with NavigationBars with NavigationBarStyles ⇒ +trait UniversalNavigationBars { + self: RenderingContext + with Icons + with Grids + with Utils + with BootstrapComponents + with ClassModifiers + with NavigationBars + with NavigationBarStyles ⇒ import scalaTags.all._ import BootstrapAttrs._ @@ -26,14 +34,24 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit type NavigationBar = NavigationBarBuilder object NavigationBar extends NavigationBarFactory { - def apply(tabs: Seq[NavigationTab] = Nil, barId: String = Bootstrap.newId, brand: Modifier = "Navigation", styles: Seq[NavigationBarStyle] = Seq(NavigationBarStyle.default, NavigationBarStyle.fixedTop), container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md))): NavigationBarBuilder = { + def apply( + tabs: Seq[NavigationTab] = Nil, + barId: String = Bootstrap.newId, + brand: Modifier = "Navigation", + styles: Seq[NavigationBarStyle] = Seq(NavigationBarStyle.default, NavigationBarStyle.fixedTop), + container: Modifier ⇒ Modifier = md ⇒ GridSystem.container(md), + contentContainer: Modifier ⇒ Modifier = md ⇒ GridSystem.container(GridSystem.mkRow(md)) + ): NavigationBarBuilder = { NavigationBarBuilder(tabs, barId, brand, styles, container, contentContainer) } } - class UniversalNavigation(val navTabs: NavigationTabs, val navType: String = "tabs", - val navId: String = Bootstrap.newId) - extends AbstractNavigation with BootstrapHtmlComponent { + class UniversalNavigation( + val navTabs: NavigationTabs, + val navType: String = "tabs", + val navId: String = Bootstrap.newId + ) extends AbstractNavigation + with BootstrapHtmlComponent { private def tabContainer = Rx { def renderTab(tab: NavigationTab): Tag = { @@ -49,7 +67,7 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() ul(`class` := s"nav nav-$navType", role := "tablist")( renderTab(tabs.head)("active".addClass), - for (t <- tabs.tail) yield renderTab(t) + for (t ← tabs.tail) yield renderTab(t) ) } @@ -63,7 +81,7 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() div("tab-content".addClass)( renderPanel(tabs.head)("active".addClass, "in".addClass), - for (t <- tabs.tail) yield renderPanel(t) + for (t ← tabs.tail) yield renderPanel(t) ) } @@ -72,16 +90,17 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } } - /** - * Simple bootstrap navigation bar + /** Simple bootstrap navigation bar */ - class UniversalNavigationBar(val navTabs: NavigationTabs, - val navId: String, - brand: Modifier, - styles: Seq[NavigationBarStyle], - container: Modifier ⇒ Modifier, - contentContainer: Modifier ⇒ Modifier) - extends AbstractNavigationBar with BootstrapComponent { + class UniversalNavigationBar( + val navTabs: NavigationTabs, + val navId: String, + brand: Modifier, + styles: Seq[NavigationBarStyle], + container: Modifier ⇒ Modifier, + contentContainer: Modifier ⇒ Modifier + ) extends AbstractNavigationBar + with BootstrapComponent { private[this] val nav = tag("nav") @@ -101,13 +120,17 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() ul(`class` := "nav navbar-nav")( renderTab(active = true, tabs.head), - for (tab <- tabs.tail) yield renderTab(active = false, tab) + for (tab ← tabs.tail) yield renderTab(active = false, tab) ) } private[this] val tabContentContainer = Rx { def renderContent(active: Boolean, tab: NavigationTab): Tag = { - div(id := this.tabId(tab.id), role := "tabpanel", `class` := (if (active) "tab-pane active fade in" else "tab-pane fade"))( + div( + id := this.tabId(tab.id), + role := "tabpanel", + `class` := (if (active) "tab-pane active fade in" else "tab-pane fade") + )( tab.content ) } @@ -115,27 +138,34 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit val tabs = navTabs() div(id := s"$navId-tabcontent", `class` := "tab-content")( renderContent(active = true, tabs.head), - for (tab <- tabs.tail) yield renderContent(active = false, tab) + for (tab ← tabs.tail) yield renderContent(active = false, tab) ) } def navbar: Tag = { nav("navbar".addClass, styles)( - container(Seq( - // Header - div(`class` := "navbar-header")( - button(`type` := "button", `data-toggle` := "collapse", `data-target` := s"#$navId", `class` := "navbar-toggle collapsed")( - span(`class` := "sr-only", "Toggle navigation"), - span(`class` := "icon-bar"), - span(`class` := "icon-bar"), - span(`class` := "icon-bar") + container( + Seq( + // Header + div(`class` := "navbar-header")( + button( + `type` := "button", + `data-toggle` := "collapse", + `data-target` := s"#$navId", + `class` := "navbar-toggle collapsed" + )( + span(`class` := "sr-only", "Toggle navigation"), + span(`class` := "icon-bar"), + span(`class` := "icon-bar"), + span(`class` := "icon-bar") + ), + a(href := "#", `class` := "navbar-brand", brand) ), - a(href := "#", `class` := "navbar-brand", brand) - ), - div(id := navId, `class` := "navbar-collapse collapse")( - tabContainer + div(id := navId, `class` := "navbar-collapse collapse")( + tabContainer + ) ) - )) + ) ) } @@ -148,17 +178,23 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } } - //noinspection TypeAnnotation - case class NavigationBarBuilder(navTabs: NavigationTabs, navId: String, - brand: Modifier, styles: Seq[NavigationBarStyle], - container: Modifier ⇒ Modifier, contentContainer: Modifier ⇒ Modifier) extends AbstractNavigationBar with BootstrapComponent { - - def withTabs(tabs: NavigationTabs) = copy(navTabs = tabs) - def withTabs(tabs: NavigationTab*) = copy(navTabs = NavigationTabs.fromSeq(tabs)) - def withId(id: String) = copy(navId = id) - def withBrand(brand: Modifier*) = copy(brand = brand) - def withStyles(styles: NavigationBarStyle*) = copy(styles = styles) - def withContainer(container: Modifier ⇒ Modifier) = copy(container = container) + // noinspection TypeAnnotation + case class NavigationBarBuilder( + navTabs: NavigationTabs, + navId: String, + brand: Modifier, + styles: Seq[NavigationBarStyle], + container: Modifier ⇒ Modifier, + contentContainer: Modifier ⇒ Modifier + ) extends AbstractNavigationBar + with BootstrapComponent { + + def withTabs(tabs: NavigationTabs) = copy(navTabs = tabs) + def withTabs(tabs: NavigationTab*) = copy(navTabs = NavigationTabs.fromSeq(tabs)) + def withId(id: String) = copy(navId = id) + def withBrand(brand: Modifier*) = copy(brand = brand) + def withStyles(styles: NavigationBarStyle*) = copy(styles = styles) + def withContainer(container: Modifier ⇒ Modifier) = copy(container = container) def withContentContainer(contentContainer: Modifier ⇒ Modifier) = copy(contentContainer = contentContainer) def build(): UniversalNavigationBar = { @@ -166,7 +202,7 @@ trait UniversalNavigationBars { self: RenderingContext with Icons with Grids wit } def render(md: ModifierT*): ModifierT = { - build().render(md:_*) + build().render(md: _*) } } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/pagination/UniversalPageSelectors.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/pagination/UniversalPageSelectors.scala index 54eee10..d1ba797 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/pagination/UniversalPageSelectors.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/pagination/UniversalPageSelectors.scala @@ -15,18 +15,29 @@ trait UniversalPageSelectors extends PageSelectors { self: RenderingContext ⇒ } class UniversalPageSelector(val pages: Rx[Int], val currentPage: Var[Int]) - extends AbstractPageSelector with BootstrapHtmlComponent { + extends AbstractPageSelector + with BootstrapHtmlComponent { def previousLink: TagT = { - a(href := "#", aria.label := "Previous", onclick := Callback.onClick { _ ⇒ - if (currentPage.now > 1) currentPage.update(currentPage.now - 1) - }, span(aria.hidden := true, raw("«"))) + a( + href := "#", + aria.label := "Previous", + onclick := Callback.onClick { _ ⇒ + if (currentPage.now > 1) currentPage.update(currentPage.now - 1) + }, + span(aria.hidden := true, raw("«")) + ) } def nextLink: TagT = { - a(href := "#", aria.label := "Next", onclick := Callback.onClick { _ ⇒ - if (currentPage.now < pages.now) currentPage.update(currentPage.now + 1) - }, span(aria.hidden := true, raw("»"))) + a( + href := "#", + aria.label := "Next", + onclick := Callback.onClick { _ ⇒ + if (currentPage.now < pages.now) currentPage.update(currentPage.now + 1) + }, + span(aria.hidden := true, raw("»")) + ) } def pageLink(page: Int): TagT = { @@ -55,11 +66,15 @@ trait UniversalPageSelectors extends PageSelectors { self: RenderingContext ⇒ } def renderTag(md: ModifierT*): TagT = { - div(Rx(ul(`class` := "pagination", Rx(pages() == 1).reactiveHide, md)( - previousPageButton, - for(page <- 1 to pages()) yield pageButton(page), - nextPageButton - ))) + div( + Rx( + ul(`class` := "pagination", Rx(pages() == 1).reactiveHide, md)( + previousPageButton, + for (page ← 1 to pages()) yield pageButton(page), + nextPageButton + ) + ) + ) } } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/PanelStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/PanelStyles.scala index f5df14d..3d4bc00 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/PanelStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/PanelStyles.scala @@ -12,18 +12,18 @@ trait PanelStyles { self: RenderingContext with Utils ⇒ val createModifier = Bootstrap.noModifier } - final class PanelStyleValue private[panel](style: String) extends PanelStyle { - val className = s"panel-$style" + final class PanelStyleValue private[panel] (style: String) extends PanelStyle { + val className = s"panel-$style" val createModifier = className.addClass } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object PanelStyle { - val default = DefaultPanelStyle + val default = DefaultPanelStyle lazy val primary = new PanelStyleValue("primary") lazy val success = new PanelStyleValue("success") - lazy val info = new PanelStyleValue("info") + lazy val info = new PanelStyleValue("info") lazy val warning = new PanelStyleValue("warning") - lazy val danger = new PanelStyleValue("danger") + lazy val danger = new PanelStyleValue("danger") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/Panels.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/Panels.scala index 35cce0a..e19241a 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/Panels.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/Panels.scala @@ -5,7 +5,8 @@ import com.karasiq.bootstrap.context.{ClassModifiers, RenderingContext} import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait Panels extends PanelStyles { self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Icons ⇒ +trait Panels extends PanelStyles { + self: RenderingContext with Utils with BootstrapComponents with ClassModifiers with Icons ⇒ import scalaTags.all._ type Panel <: AbstractPanel with BootstrapHtmlComponent @@ -24,7 +25,11 @@ trait Panels extends PanelStyles { self: RenderingContext with Utils with Bootst def button(icon: IconModifier, modifiers: Modifier*): Tag def buttons(buttons: Modifier*): Tag - def apply(panelId: String = Bootstrap.newId, style: PanelStyle = PanelStyle.default, - header: Option[Modifier] = None, footer: Option[Modifier] = None): Panel + def apply( + panelId: String = Bootstrap.newId, + style: PanelStyle = PanelStyle.default, + header: Option[Modifier] = None, + footer: Option[Modifier] = None + ): Panel } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/UniversalPanels.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/UniversalPanels.scala index 5e13d52..687990b 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/panel/UniversalPanels.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/panel/UniversalPanels.scala @@ -5,7 +5,8 @@ import com.karasiq.bootstrap.context.RenderingContext import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait UniversalPanels { self: RenderingContext with BootstrapComponents with Utils with Icons with Panels with PanelStyles ⇒ +trait UniversalPanels { + self: RenderingContext with BootstrapComponents with Utils with Icons with Panels with PanelStyles ⇒ import scalaTags.all._ import BootstrapAttrs._ @@ -33,18 +34,25 @@ trait UniversalPanels { self: RenderingContext with BootstrapComponents with Uti div(`class` := "pull-right panel-head-buttons", buttons) } - /** - * Shortcut to PanelBuilder() + /** Shortcut to PanelBuilder() */ - def apply(panelId: String = Bootstrap.newId, style: PanelStyle = PanelStyle.default, - header: Option[Modifier] = None, footer: Option[Modifier] = None): PanelBuilder = { + def apply( + panelId: String = Bootstrap.newId, + style: PanelStyle = PanelStyle.default, + header: Option[Modifier] = None, + footer: Option[Modifier] = None + ): PanelBuilder = { PanelBuilder(panelId, style, header, footer) } } - case class PanelBuilder(panelId: String, style: PanelStyle = PanelStyle.default, - header: Option[Modifier] = None, footer: Option[Modifier] = None) - extends AbstractPanel with BootstrapHtmlComponent { + case class PanelBuilder( + panelId: String, + style: PanelStyle = PanelStyle.default, + header: Option[Modifier] = None, + footer: Option[Modifier] = None + ) extends AbstractPanel + with BootstrapHtmlComponent { def withId(newId: String): PanelBuilder = { copy(panelId = newId) diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/popover/Popovers.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/popover/Popovers.scala index 38907ca..1e82795 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/popover/Popovers.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/popover/Popovers.scala @@ -10,9 +10,19 @@ import com.karasiq.bootstrap.utils.Utils trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips with Utils ⇒ import scalaTags.all._ - case class PopoverOptions(animation: Boolean = true, container: String = "", content: Frag = "", delay: String = "", - html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "", - title: Frag = "", trigger: String = "", viewport: String = "") { + case class PopoverOptions( + animation: Boolean = true, + container: String = "", + content: Frag = "", + delay: String = "", + html: Boolean = false, + placement: TooltipPlacement = TooltipPlacement.right, + selector: String = "", + template: String = "", + title: Frag = "", + trigger: String = "", + viewport: String = "" + ) { def toStrings: Seq[(String, String)] = { def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default) Seq( @@ -35,10 +45,10 @@ trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips w def options: PopoverOptions } - /** - * Add small overlays of content, like those on the iPad, to any element for housing secondary information. - * Popovers whose both title and content are zero-length are never displayed. - * @see [[http://getbootstrap.com/javascript/#popovers]] + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#popovers]] */ trait PopoverFactory { def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover @@ -46,4 +56,3 @@ trait Popovers { self: RenderingContext with BootstrapComponents with Tooltips w val Popover: PopoverFactory } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/popover/TextPopovers.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/popover/TextPopovers.scala index 3ae4792..1425d9d 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/popover/TextPopovers.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/popover/TextPopovers.scala @@ -11,17 +11,17 @@ trait TextPopovers { self: RenderingContext with BootstrapComponents with Toolti import scalaTags.all._ import BootstrapAttrs._ - + class TextPopover(val options: PopoverOptions) extends Popover { override def render(md: ModifierT*): ModifierT = { (`data-toggle` := "popover") +: Bootstrap.dataProps(options.toStrings: _*) +: md } } - /** - * Add small overlays of content, like those on the iPad, to any element for housing secondary information. - * Popovers whose both title and content are zero-length are never displayed. - * @see [[http://getbootstrap.com/javascript/#popovers]] + /** Add small overlays of content, like those on the iPad, to any element for housing secondary information. Popovers + * whose both title and content are zero-length are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#popovers]] */ object Popover extends PopoverFactory { def apply(title: Frag, content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): Popover = { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBarStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBarStyles.scala index eec3196..925b45d 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBarStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBarStyles.scala @@ -16,9 +16,9 @@ trait ProgressBarStyles { self: RenderingContext ⇒ } lazy val success: ProgressBarStyle = style("success") - lazy val info: ProgressBarStyle = style("info") + lazy val info: ProgressBarStyle = style("info") lazy val warning: ProgressBarStyle = style("warning") - lazy val danger: ProgressBarStyle = style("danger") + lazy val danger: ProgressBarStyle = style("danger") lazy val striped: ProgressBarStyle = style("striped") lazy val animated: ProgressBarStyle = new ProgressBarStyle { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBars.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBars.scala index c4f1c79..462d1de 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBars.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/ProgressBars.scala @@ -7,7 +7,8 @@ import rx.Rx import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.{ReactiveBinds, ReactiveImplicits, RenderingContext} -trait ProgressBars extends ProgressBarStyles { self: RenderingContext with BootstrapComponents with ReactiveBinds with ReactiveImplicits ⇒ +trait ProgressBars extends ProgressBarStyles { + self: RenderingContext with BootstrapComponents with ReactiveBinds with ReactiveImplicits ⇒ type ProgressBar <: AbstractProgressBar with BootstrapHtmlComponent val ProgressBar: ProgressBarFactory @@ -16,13 +17,12 @@ trait ProgressBars extends ProgressBarStyles { self: RenderingContext with Boots def progress: Rx[Int] } - /** - * Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars. - * @see [[http://getbootstrap.com/components/#progress]] + /** Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars. + * @see + * [[http://getbootstrap.com/components/#progress]] */ trait ProgressBarFactory { def basic(value: Rx[Int]): ProgressBar def withLabel(value: Rx[Int]): ProgressBar } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/UniversalProgressBars.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/UniversalProgressBars.scala index 8045660..665bcef 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/UniversalProgressBars.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/progressbar/UniversalProgressBars.scala @@ -33,8 +33,16 @@ trait UniversalProgressBars { self: RenderingContext with BootstrapComponents wi override def renderTag(md: ModifierT*): TagT = { div("progress".addClass)( - div("progress-bar".addClass, role := "progressbar", Rx(aria.valuenow := progress()).auto, - aria.valuemin := 0, aria.valuemax := 100, Rx[Modifier](width := progress().pct).auto, content, md) + div( + "progress-bar".addClass, + role := "progressbar", + Rx(aria.valuenow := progress()).auto, + aria.valuemin := 0, + aria.valuemax := 100, + Rx[Modifier](width := progress().pct).auto, + content, + md + ) ) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/PagedTables.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/PagedTables.scala index 10f5e61..8428112 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/PagedTables.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/PagedTables.scala @@ -14,8 +14,7 @@ trait PagedTables { self: RenderingContext with BootstrapComponents with Tables type PagedTable <: AbstractPagedTable with BootstrapHtmlComponent val PagedTable: PagedTableFactory - /** - * Table with pagination + /** Table with pagination */ trait AbstractPagedTable { def table: Table @@ -43,7 +42,11 @@ trait PagedTables { self: RenderingContext with BootstrapComponents with Tables } } - private[table] def pagedDataRx(allContent: Rx[Seq[TableRow]], currentPage: Rx[Int], rowsPerPage: Int): Rx[Seq[TableRow]] = { + private[table] def pagedDataRx( + allContent: Rx[Seq[TableRow]], + currentPage: Rx[Int], + rowsPerPage: Int + ): Rx[Seq[TableRow]] = { Rx { val data = allContent() val page = currentPage() diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/SortableTables.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/SortableTables.scala index 253b25b..a05ada6 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/SortableTables.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/SortableTables.scala @@ -14,9 +14,12 @@ trait SortableTables extends TableCols { self: RenderingContext with PagedTables val SortableTable: AbstractSortableTableFactory trait AbstractSortableTableFactory { - def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]], - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T] + def apply[T]( + items: Rx[Seq[T]], + columns: Rx[Seq[TableCol[T, _]]], + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ): SortableTable[T] } trait AbstractSortableTable[T] { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableCols.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableCols.scala index 4a5228b..de09b4b 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableCols.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableCols.scala @@ -16,6 +16,6 @@ trait TableCols { self: RenderingContext ⇒ def apply[T](cols: TableCol[T, _]*) = cols } - type GenTableCol[T] = TableCol[T, Any] + type GenTableCol[T] = TableCol[T, Any] type GenTableCols[T] = Seq[GenTableCol[T]] } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableStyles.scala index 07e4522..dce5b52 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/TableStyles.scala @@ -5,15 +5,15 @@ import com.karasiq.bootstrap.context.RenderingContext trait TableStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class TableStyle private[table](val styleName: String) extends ModifierFactory { - val className = s"table-$styleName" + final class TableStyle private[table] (val styleName: String) extends ModifierFactory { + val className = s"table-$styleName" val createModifier = className.addClass } object TableStyle { - lazy val striped = new TableStyle("striped") - lazy val hover = new TableStyle("hover") - lazy val bordered = new TableStyle("bordered") + lazy val striped = new TableStyle("striped") + lazy val hover = new TableStyle("hover") + lazy val bordered = new TableStyle("bordered") lazy val condensed = new TableStyle("condensed") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalPagedTables.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalPagedTables.scala index be39e03..199cca7 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalPagedTables.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalPagedTables.scala @@ -6,7 +6,8 @@ import com.karasiq.bootstrap.components.BootstrapComponents import com.karasiq.bootstrap.context.RenderingContext import com.karasiq.bootstrap.pagination.PageSelectors -trait UniversalPagedTables extends PagedTables { self: RenderingContext with BootstrapComponents with PageSelectors with Tables ⇒ +trait UniversalPagedTables extends PagedTables { + self: RenderingContext with BootstrapComponents with PageSelectors with Tables ⇒ import scalaTags.all._ type PagedTable = UniversalPagedTable @@ -18,18 +19,20 @@ trait UniversalPagedTables extends PagedTables { self: RenderingContext with Boo trait UniversalPagedTable extends AbstractPagedTable with BootstrapHtmlComponent { override def renderTag(md: ModifierT*): TagT = { - div(div(textAlign.center, pageSelector), table.renderTag(md:_*)) + div(div(textAlign.center, pageSelector), table.renderTag(md: _*)) } } - protected final class UniversalStaticPagedTableImpl(val heading: Rx[Seq[Modifier]], - val allContent: Rx[Seq[TableRow]], - val rowsPerPage: Int) - extends UniversalPagedTable with AbstractStaticPagedTable { + protected final class UniversalStaticPagedTableImpl( + val heading: Rx[Seq[Modifier]], + val allContent: Rx[Seq[TableRow]], + val rowsPerPage: Int + ) extends UniversalPagedTable + with AbstractStaticPagedTable { val currentPage = Var(1) - val table: Table = Table(heading, PagedTable.pagedDataRx(allContent, currentPage, rowsPerPage)) + val table: Table = Table(heading, PagedTable.pagedDataRx(allContent, currentPage, rowsPerPage)) val pageSelector: PageSelector = PageSelector(PagedTable.pagesRx(allContent, rowsPerPage), currentPage) pageSelector.pages.triggerLater { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalSortableTables.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalSortableTables.scala index 694c454..2d36836 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalSortableTables.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalSortableTables.scala @@ -8,25 +8,31 @@ import com.karasiq.bootstrap.grid.Grids import com.karasiq.bootstrap.icons.Icons import com.karasiq.bootstrap.utils.Utils -trait UniversalSortableTables extends SortableTables { self: RenderingContext with Tables with PagedTables with Icons with Utils with Forms with Grids ⇒ +trait UniversalSortableTables extends SortableTables { + self: RenderingContext with Tables with PagedTables with Icons with Utils with Forms with Grids ⇒ import scalaTags.all._ type SortableTable[T] = UniversalSortableTable[T] object SortableTable extends AbstractSortableTableFactory { - def apply[T](items: Rx[Seq[T]], columns: Rx[Seq[TableCol[T, _]]], - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)): SortableTable[T] = { + def apply[T]( + items: Rx[Seq[T]], + columns: Rx[Seq[TableCol[T, _]]], + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ): SortableTable[T] = { Builder(columns, rowModifiers, filterItem).createTable(items) } - case class Builder[T](columns: Rx[Seq[TableCol[T, _]]] = Var(Nil), - rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, - filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f)) { + case class Builder[T]( + columns: Rx[Seq[TableCol[T, _]]] = Var(Nil), + rowModifiers: T ⇒ Modifier = (_: T) ⇒ Bootstrap.noModifier, + filterItem: (T, String) ⇒ Boolean = (i: T, f: String) ⇒ i.toString.contains(f) + ) { def withColumns(columns: Rx[Seq[TableCol[T, _]]]) = copy(columns = columns) - def withColumns(columns: TableCol[T, _]*) = copy(columns = Var(columns.asInstanceOf[GenTableCols[T]])) - def withRowModifiers(rowModifiers: T ⇒ Modifier) = copy(rowModifiers = rowModifiers) + def withColumns(columns: TableCol[T, _]*) = copy(columns = Var(columns.asInstanceOf[GenTableCols[T]])) + def withRowModifiers(rowModifiers: T ⇒ Modifier) = copy(rowModifiers = rowModifiers) def withFilter(filterItem: (T, String) ⇒ Boolean) = copy(filterItem = filterItem) def createTable(items: Rx[Seq[T]]): SortableTable[T] = { @@ -35,13 +41,13 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi new UniversalSortableTable[T] { val items = _items - val columns = Builder.this.columns.asInstanceOf[Rx[GenTableCols[T]]] - val sortByColumn = Var(columns.now.head) + val columns = Builder.this.columns.asInstanceOf[Rx[GenTableCols[T]]] + val sortByColumn = Var(columns.now.head) val reverseOrdering = Var(false) - val filter = Var("") + val filter = Var("") def filterItem(item: T, filter: String): Boolean = Builder.this.filterItem(item, filter) - def rowModifiers(item: T): Modifier = Builder.this.rowModifiers(item) + def rowModifiers(item: T): Modifier = Builder.this.rowModifiers(item) } } @@ -58,7 +64,8 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi val columns = this.columns() columns.map { column ⇒ val icon = Rx[Frag] { - if (sortByColumn() == column) span(Icon(if (reverseOrdering()) "triangle-bottom" else "triangle-top")) // "▼" else "▲" + if (sortByColumn() == column) + span(Icon(if (reverseOrdering()) "triangle-bottom" else "triangle-top")) // "▼" else "▲" else Bootstrap.noContent } @@ -68,13 +75,14 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi val content = Rx { val columns = this.columns() - val items = this.items() + val items = this.items() val filter = this.filter() - val filteredItems = if (hideFilterRx() || filter.isEmpty) items else items.filter(item ⇒ filterItem(item, filter)) + val filteredItems = + if (hideFilterRx() || filter.isEmpty) items else items.filter(item ⇒ filterItem(item, filter)) val selectedCol = this.sortByColumn() - val ordering = if (reverseOrdering()) selectedCol.ord.reverse else selectedCol.ord + val ordering = if (reverseOrdering()) selectedCol.ord.reverse else selectedCol.ord val sortedItems = filteredItems.sortBy(item ⇒ selectedCol.extract(item))(ordering) sortedItems.map(item ⇒ TableRow(columns.map(col ⇒ col.render(item)), rowModifiers(item))) @@ -86,7 +94,7 @@ trait UniversalSortableTables extends SortableTables { self: RenderingContext wi def renderTag(md: ModifierT*): TagT = { div( GridSystem.mkRow(Form(FormInput.text("", filter.reactiveInput)), hideFilterRx.reactiveHide), - GridSystem.mkRow(pagedTable.renderTag(md:_*)) + GridSystem.mkRow(pagedTable.renderTag(md: _*)) ) } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalTables.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalTables.scala index a0bbbb6..43d83c3 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalTables.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/table/UniversalTables.scala @@ -17,14 +17,14 @@ trait UniversalTables { self: RenderingContext with BootstrapComponents with Tab trait UniversalTable extends AbstractTable with BootstrapHtmlComponent { lazy val tableHead: Rx[TagT] = Rx { - thead(tr(for (h <- heading()) yield th(h))) + thead(tr(for (h ← heading()) yield th(h))) } lazy val tableBody: Rx[TagT] = Rx { - tbody(for (row <- content()) yield { + tbody(for (row ← content()) yield { tr( row.modifiers, - for (col <- row.columns) yield td(col) + for (col ← row.columns) yield td(col) ) }) } @@ -36,6 +36,6 @@ trait UniversalTables { self: RenderingContext with BootstrapComponents with Tab } } - protected class StaticUniversalTable(val heading: Rx[Seq[Modifier]], - val content: Rx[Seq[TableRow]]) extends UniversalTable + protected class StaticUniversalTable(val heading: Rx[Seq[Modifier]], val content: Rx[Seq[TableRow]]) + extends UniversalTable } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TextTooltips.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TextTooltips.scala index 1ea0928..52fca00 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TextTooltips.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TextTooltips.scala @@ -13,15 +13,15 @@ trait TextTooltips { self: RenderingContext with BootstrapComponents with Toolti class TextTooltip(val options: TooltipOptions) extends AbstractTooltip { override def render(md: ModifierT*): ModifierT = { - (`data-toggle` := "tooltip") +: Bootstrap.dataProps(options.toStrings:_*) +: md + (`data-toggle` := "tooltip") +: Bootstrap.dataProps(options.toStrings: _*) +: md } } - /** - * Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; - * Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage. - * Tooltips with zero-length titles are never displayed. - * @see [[http://getbootstrap.com/javascript/#tooltips]] + /** Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't + * rely on images, use CSS3 for animations, and data-attributes for local title storage. Tooltips with zero-length + * titles are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#tooltips]] */ object Tooltip extends TooltipFactory { def apply(content: Frag, placement: TooltipPlacement): AbstractTooltip = { diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TooltipStyles.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TooltipStyles.scala index e13e520..d8630fe 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TooltipStyles.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/TooltipStyles.scala @@ -5,17 +5,17 @@ import com.karasiq.bootstrap.context.RenderingContext trait TooltipStyles { self: RenderingContext ⇒ import scalaTags.all._ - final class TooltipPlacement private[tooltip](val placement: String) { + final class TooltipPlacement private[tooltip] (val placement: String) { override def toString: String = placement } - //noinspection TypeAnnotation + // noinspection TypeAnnotation object TooltipPlacement { private[this] def placement(str: String): TooltipPlacement = new TooltipPlacement(str) - val auto = placement("auto") - val left = placement("left") - val right = placement("right") - val top = placement("top") - val bottom = placement("bottom") + val auto = placement("auto") + val left = placement("left") + val right = placement("right") + val top = placement("top") + val bottom = placement("bottom") } } diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/Tooltips.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/Tooltips.scala index 5c8efdc..fd0317a 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/Tooltips.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/tooltip/Tooltips.scala @@ -11,9 +11,18 @@ trait Tooltips extends TooltipStyles { self: RenderingContext with BootstrapComp type Tooltip <: AbstractTooltip val Tooltip: TooltipFactory - case class TooltipOptions(animation: Boolean = true, container: String = "", delay: String = "", - html: Boolean = false, placement: TooltipPlacement = TooltipPlacement.right, selector: String = "", template: String = "", - title: Frag = "", trigger: String = "", viewport: String = "") { + case class TooltipOptions( + animation: Boolean = true, + container: String = "", + delay: String = "", + html: Boolean = false, + placement: TooltipPlacement = TooltipPlacement.right, + selector: String = "", + template: String = "", + title: Frag = "", + trigger: String = "", + viewport: String = "" + ) { def toStrings: Seq[(String, String)] = { def opt[T](name: String, value: T, default: T) = Option(name → value).filterNot(_._2 == default) Seq( @@ -35,11 +44,11 @@ trait Tooltips extends TooltipStyles { self: RenderingContext with BootstrapComp def options: TooltipOptions } - /** - * Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; - * Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage. - * Tooltips with zero-length titles are never displayed. - * @see [[http://getbootstrap.com/javascript/#tooltips]] + /** Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't + * rely on images, use CSS3 for animations, and data-attributes for local title storage. Tooltips with zero-length + * titles are never displayed. + * @see + * [[http://getbootstrap.com/javascript/#tooltips]] */ trait TooltipFactory { def apply(content: Frag, placement: TooltipPlacement = TooltipPlacement.auto): AbstractTooltip diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/utils/UniversalUtils.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/utils/UniversalUtils.scala index ce7c102..a568147 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/utils/UniversalUtils.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/utils/UniversalUtils.scala @@ -19,223 +19,246 @@ trait UniversalUtils { self: RenderingContext with Icons with Buttons with Class object BootstrapAttrs extends DefaultBootstrapAttrs trait UniversalUtils extends AbstractUtils { - /** - * A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site. - * @see [[https://getbootstrap.com/components/#jumbotron]] + + /** A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your + * site. + * @see + * [[https://getbootstrap.com/components/#jumbotron]] */ lazy val jumbotron: Tag = div(`class` := "jumbotron") - /** - * Use the well as a simple effect on an element to give it an inset effect. - * @see [[https://getbootstrap.com/components/#wells]] + /** Use the well as a simple effect on an element to give it an inset effect. + * @see + * [[https://getbootstrap.com/components/#wells]] */ lazy val well: Tag = div(`class` := "well") - /** - * Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. - * @see [[https://getbootstrap.com/components/#badges]] + /** Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. + * @see + * [[https://getbootstrap.com/components/#badges]] */ lazy val badge: Tag = span(`class` := "badge") - /** - * Default button + /** Default button */ lazy val button: Tag = { Button().renderTag() } - /** - * Default icon - * @param name Icon name - * @see [[https://getbootstrap.com/components/#glyphicons]] + /** Default icon + * @param name + * Icon name + * @see + * [[https://getbootstrap.com/components/#glyphicons]] */ def icon(name: String): IconModifier = { Icon(name) } - /** - * Generates unique element ID + /** Generates unique element ID */ def newId: String = { s"bs-auto-${UUID.randomUUID()}" } - /** - * Add classes to an `img` element to easily style images in any project. - * @see [[http://getbootstrap.com/css/#images-shapes]] + /** Add classes to an `img` element to easily style images in any project. + * @see + * [[http://getbootstrap.com/css/#images-shapes]] */ object image extends AbstractImageUtils { - final class ImageStyle private[bootstrap](val styleName: String) extends AbstractImageStyle with StyleClassModifier { - val className = s"img-$styleName" + final class ImageStyle private[bootstrap] (val styleName: String) + extends AbstractImageStyle + with StyleClassModifier { + val className = s"img-$styleName" val createModifier = className.addClass } - /** - * Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. - * This applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent element. - * To center images which use the .img-responsive class, use .center-block instead of .text-center. - * See the helper classes section for more details about .center-block usage. - * @see [[http://getbootstrap.com/css/#images-responsive]] + /** Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This + * applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the + * parent element. To center images which use the .img-responsive class, use .center-block instead of + * .text-center. See the helper classes section for more details about .center-block usage. + * @see + * [[http://getbootstrap.com/css/#images-responsive]] */ lazy val responsive = new ImageStyle("responsive") - lazy val rounded = new ImageStyle("rounded") - lazy val circle = new ImageStyle("circle") + lazy val rounded = new ImageStyle("rounded") + lazy val circle = new ImageStyle("circle") lazy val thumbnail = new ImageStyle("thumbnail") } sealed trait TextModifier extends StyleClassModifier { def styleName: String - def className = s"text-$styleName" + def className = s"text-$styleName" lazy val createModifier = className.addClass } - /** - * Easily realign text to components with text alignment classes. - * @see [[http://getbootstrap.com/css/#type-alignment]] + /** Easily realign text to components with text alignment classes. + * @see + * [[http://getbootstrap.com/css/#type-alignment]] */ object textAlign extends AbstractTextAlignments { - final class TextAlignment private[bootstrap](val styleName: String) extends TextModifier with AbstractTextAlignment + final class TextAlignment private[bootstrap] (val styleName: String) + extends TextModifier + with AbstractTextAlignment - lazy val left = new TextAlignment("left") - lazy val center = new TextAlignment("center") - lazy val right = new TextAlignment("right") + lazy val left = new TextAlignment("left") + lazy val center = new TextAlignment("center") + lazy val right = new TextAlignment("right") lazy val justify = new TextAlignment("justify") - lazy val nowrap = new TextAlignment("nowrap") + lazy val nowrap = new TextAlignment("nowrap") } - /** - * Transform text in components with text capitalization classes. - * @see [[http://getbootstrap.com/css/#type-transformation]] + /** Transform text in components with text capitalization classes. + * @see + * [[http://getbootstrap.com/css/#type-transformation]] */ object textTransform extends AbstractTextTransformations { - final class TextTransformation private[bootstrap](val styleName: String) extends TextModifier with AbstractTextTransformation + final class TextTransformation private[bootstrap] (val styleName: String) + extends TextModifier + with AbstractTextTransformation - lazy val lowercase = new TextTransformation("lowercase") - lazy val uppercase = new TextTransformation("uppercase") + lazy val lowercase = new TextTransformation("lowercase") + lazy val uppercase = new TextTransformation("uppercase") lazy val capitalize = new TextTransformation("capitalize") } - /** - * Convey meaning through color with a handful of emphasis utility classes. - * These may also be applied to links and will darken on hover just like our default link styles. - * @see [[http://getbootstrap.com/css/#helper-classes-colors]] + /** Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and + * will darken on hover just like our default link styles. + * @see + * [[http://getbootstrap.com/css/#helper-classes-colors]] */ object textStyle extends AbstractTextStyles { - final class TextStyle private[bootstrap](val styleName: String) extends TextModifier with AbstractTextStyle + final class TextStyle private[bootstrap] (val styleName: String) extends TextModifier with AbstractTextStyle - lazy val muted = new TextStyle("muted") + lazy val muted = new TextStyle("muted") lazy val primary = new TextStyle("primary") lazy val success = new TextStyle("success") - lazy val info = new TextStyle("info") + lazy val info = new TextStyle("info") lazy val warning = new TextStyle("warning") - lazy val danger = new TextStyle("danger") + lazy val danger = new TextStyle("danger") - /** - * Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. - * @see [[http://getbootstrap.com/css/#helper-classes-image-replacement]] + /** Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. + * @see + * [[http://getbootstrap.com/css/#helper-classes-image-replacement]] */ lazy val hide = new TextStyle("hide") } - /** - * Similar to the contextual text color classes, easily set the background of an element to any contextual class. + /** Similar to the contextual text color classes, easily set the background of an element to any contextual class. * Anchor components will darken on hover, just like the text classes. - * @see [[http://getbootstrap.com/css/#helper-classes-backgrounds]] + * @see + * [[http://getbootstrap.com/css/#helper-classes-backgrounds]] */ object background extends AbstractBackgroundStyles { - final class BackgroundStyle private[bootstrap](val styleName: String) extends AbstractBackgroundStyle with StyleClassModifier { - val className = s"bg-$styleName" + final class BackgroundStyle private[bootstrap] (val styleName: String) + extends AbstractBackgroundStyle + with StyleClassModifier { + val className = s"bg-$styleName" val createModifier = className.addClass } lazy val primary = new BackgroundStyle("primary") lazy val success = new BackgroundStyle("success") - lazy val info = new BackgroundStyle("info") + lazy val info = new BackgroundStyle("info") lazy val warning = new BackgroundStyle("warning") - lazy val danger = new BackgroundStyle("danger") + lazy val danger = new BackgroundStyle("danger") } - /** - * Use the generic close icon for dismissing content like modals and alerts. - * @see [[http://getbootstrap.com/css/#helper-classes-close]] + /** Use the generic close icon for dismissing content like modals and alerts. + * @see + * [[http://getbootstrap.com/css/#helper-classes-close]] */ lazy val closeIcon: Tag = { - scalaTags.tags.button(`type` := "button", `class` := "close", aria.label := "Close", span(aria.hidden := true, raw("×"))) + scalaTags.tags.button( + `type` := "button", + `class` := "close", + aria.label := "Close", + span(aria.hidden := true, raw("×")) + ) } - /** - * Use carets to indicate dropdown functionality and direction. - * Note that the default caret will reverse automatically in dropup menus. - * @see [[http://getbootstrap.com/css/#helper-classes-carets]] + /** Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse + * automatically in dropup menus. + * @see + * [[http://getbootstrap.com/css/#helper-classes-carets]] */ lazy val caret: Tag = span(`class` := "caret") - /** - * Float an element to the left or right with a class. - * `!important` is included to avoid specificity issues. - * @note To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details. - * @see [[http://getbootstrap.com/css/#helper-classes-floats]] + /** Float an element to the left or right with a class. `!important` is included to avoid specificity issues. + * @note + * To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar + * docs for details. + * @see + * [[http://getbootstrap.com/css/#helper-classes-floats]] */ object pull extends AbstractPullModifiers { - final class PullModifier private[bootstrap](val styleName: String) extends AbstractPullModifier with StyleClassModifier { - val className = s"pull-$styleName" + final class PullModifier private[bootstrap] (val styleName: String) + extends AbstractPullModifier + with StyleClassModifier { + val className = s"pull-$styleName" val createModifier = className.addClass } - lazy val left = new PullModifier("left") + lazy val left = new PullModifier("left") lazy val right = new PullModifier("right") } - /** - * Set an element to display: block and center via margin - * @see [[http://getbootstrap.com/css/#helper-classes-center]] + /** Set an element to display: block and center via margin + * @see + * [[http://getbootstrap.com/css/#helper-classes-center]] */ lazy val centerBlock = "center-block".addClass - /** - * Easily clear floats by adding `.clearfix` to the parent element. - * Utilizes [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. - * @see [[http://getbootstrap.com/css/#helper-classes-clearfix]] + /** Easily clear floats by adding `.clearfix` to the parent element. Utilizes + * [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. + * @see + * [[http://getbootstrap.com/css/#helper-classes-clearfix]] */ lazy val clearFix = "clearfix".addClass - /** - * Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` classes. - * These classes use `!important` to avoid specificity conflicts, just like the quick floats. - * They are only available for block level toggling. They can also be used as mixins. - * `.hide` is available, but it does not always affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. - * Furthermore, `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and the element can still affect the flow of the document. - * @see [[http://getbootstrap.com/css/#helper-classes-show-hide]] + /** Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` + * classes. These classes use `!important` to avoid specificity conflicts, just like the quick floats. They are + * only available for block level toggling. They can also be used as mixins. `.hide` is available, but it does not + * always affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. Furthermore, + * `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and + * the element can still affect the flow of the document. + * @see + * [[http://getbootstrap.com/css/#helper-classes-show-hide]] */ object visibility extends AbstractVisibilityModifiers { - final class ElementVisibility private[bootstrap](val styleName: String) extends AbstractVisibilityModifier with StyleClassModifier { - val className = styleName + final class ElementVisibility private[bootstrap] (val styleName: String) + extends AbstractVisibilityModifier + with StyleClassModifier { + val className = styleName val createModifier = className.addClass } - lazy val show = new ElementVisibility("show") - lazy val hidden = new ElementVisibility("hidden") + lazy val show = new ElementVisibility("show") + lazy val hidden = new ElementVisibility("hidden") lazy val invisible = new ElementVisibility("invisible") } - /** - * Hide an element to all devices except screen readers with `.sr-only` - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Hide an element to all devices except screen readers with `.sr-only` + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ lazy val srOnly = "sr-only".addClass - /** - * Combine [[com.karasiq.bootstrap.utils.UniversalUtils.UniversalUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Combine [[com.karasiq.bootstrap.utils.UniversalUtils.UniversalUtils#srOnly() .sr-only]] with + * `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ lazy val srOnlyFocusable: Modifier = Array("sr-only", "sr-only-focusable").map(_.addClass) - /** - * Appends `data-%property%` attributes to the element - * @param props Properties - * @tparam T Value type - * @return Modifier + /** Appends `data-%property%` attributes to the element + * @param props + * Properties + * @tparam T + * Value type + * @return + * Modifier */ def dataProps[T: AttrValue](props: (String, T)*): Modifier = { props.map { case (name, value) ⇒ @@ -243,22 +266,17 @@ trait UniversalUtils { self: RenderingContext with Icons with Buttons with Class } } - /** - * Non-breaking Space - * A common character entity used in HTML is the non-breaking space:   - * A non-breaking space is a space that will not break into a new line. + /** Non-breaking Space A common character entity used in HTML is the non-breaking space:   A non-breaking space + * is a space that will not break into a new line. */ val nbsp = raw(" ") - /** - * No-op frag + /** No-op frag */ val noContent = (): FragT - /** - * No-op modifier + /** No-op modifier */ val noModifier = (): ModifierT } } - diff --git a/library/shared/src/main/scala/com/karasiq/bootstrap/utils/Utils.scala b/library/shared/src/main/scala/com/karasiq/bootstrap/utils/Utils.scala index b76e64a..e0df2b9 100644 --- a/library/shared/src/main/scala/com/karasiq/bootstrap/utils/Utils.scala +++ b/library/shared/src/main/scala/com/karasiq/bootstrap/utils/Utils.scala @@ -15,18 +15,18 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers val BootstrapAttrs: BootstrapAttrs trait DefaultBootstrapAttrs { - lazy val `data-toggle` = attr("data-toggle") - lazy val `data-target` = attr("data-target") + lazy val `data-toggle` = attr("data-toggle") + lazy val `data-target` = attr("data-target") lazy val `data-slide-to` = attr("data-slide-to") - lazy val `data-ride` = attr("data-ride") - lazy val `data-slide` = attr("data-slide") - lazy val `data-dismiss` = attr("data-dismiss") + lazy val `data-ride` = attr("data-ride") + lazy val `data-slide` = attr("data-slide") + lazy val `data-dismiss` = attr("data-dismiss") } trait AbstractUtils { - type FragT = Frag - type ModifierT = Modifier - type ElementT = Tag + type FragT = Frag + type ModifierT = Modifier + type ElementT = Tag type ElementIdT = String val image: AbstractImageUtils @@ -37,101 +37,100 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers val pull: AbstractPullModifiers val visibility: AbstractVisibilityModifiers - /** - * Generates unique element ID + /** Generates unique element ID */ def newId: ElementIdT - /** - * A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your site. - * @see [[https://getbootstrap.com/components/#jumbotron]] + /** A lightweight, flexible component that can optionally extend the entire viewport to showcase key content on your + * site. + * @see + * [[https://getbootstrap.com/components/#jumbotron]] */ def jumbotron: ElementT - /** - * Use the well as a simple effect on an element to give it an inset effect. - * @see [[https://getbootstrap.com/components/#wells]] + /** Use the well as a simple effect on an element to give it an inset effect. + * @see + * [[https://getbootstrap.com/components/#wells]] */ def well: ElementT - /** - * Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. - * @see [[https://getbootstrap.com/components/#badges]] + /** Easily highlight new or unread items by adding a badge to links, Bootstrap navs, and more. + * @see + * [[https://getbootstrap.com/components/#badges]] */ def badge: ElementT - /** - * Default button + /** Default button */ def button: ElementT - /** - * Default icon - * @param name Icon name - * @see [[https://getbootstrap.com/components/#glyphicons]] + /** Default icon + * @param name + * Icon name + * @see + * [[https://getbootstrap.com/components/#glyphicons]] */ def icon(name: String): IconModifier - /** - * Use the generic close icon for dismissing content like modals and alerts. - * @see [[http://getbootstrap.com/css/#helper-classes-close]] + /** Use the generic close icon for dismissing content like modals and alerts. + * @see + * [[http://getbootstrap.com/css/#helper-classes-close]] */ def closeIcon: ElementT - /** - * Use carets to indicate dropdown functionality and direction. - * Note that the default caret will reverse automatically in dropup menus. - * @see [[http://getbootstrap.com/css/#helper-classes-carets]] + /** Use carets to indicate dropdown functionality and direction. Note that the default caret will reverse + * automatically in dropup menus. + * @see + * [[http://getbootstrap.com/css/#helper-classes-carets]] */ def caret: ElementT - /** - * Set an element to display: block and center via margin - * @see [[http://getbootstrap.com/css/#helper-classes-center]] + /** Set an element to display: block and center via margin + * @see + * [[http://getbootstrap.com/css/#helper-classes-center]] */ def centerBlock: ModifierT - /** - * Easily clear floats by adding `.clearfix` to the parent element. - * Utilizes [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. - * @see [[http://getbootstrap.com/css/#helper-classes-clearfix]] + /** Easily clear floats by adding `.clearfix` to the parent element. Utilizes + * [[http://nicolasgallagher.com/micro-clearfix-hack/ the micro clearfix]] as popularized by Nicolas Gallagher. + * @see + * [[http://getbootstrap.com/css/#helper-classes-clearfix]] */ def clearFix: ModifierT - /** - * Hide an element to all devices except screen readers with `.sr-only` - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Hide an element to all devices except screen readers with `.sr-only` + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ def srOnly: ModifierT - /** - * Combine [[com.karasiq.bootstrap.utils.Utils.AbstractUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user) - * @see [[http://getbootstrap.com/css/#helper-classes-screen-readers]] + /** Combine [[com.karasiq.bootstrap.utils.Utils.AbstractUtils#srOnly() .sr-only]] with `.sr-only-focusable` to show + * the element again when it's focused (e.g. by a keyboard-only user) + * @see + * [[http://getbootstrap.com/css/#helper-classes-screen-readers]] */ def srOnlyFocusable: ModifierT - /** - * Appends `data-%property%` attributes to the element - * @param props Properties - * @tparam T Value type - * @return Modifier + /** Appends `data-%property%` attributes to the element + * @param props + * Properties + * @tparam T + * Value type + * @return + * Modifier */ def dataProps[T: AttrValue](props: (String, T)*): ModifierT - /** - * Non-breaking Space - * A common character entity used in HTML is the non-breaking space:   - * A non-breaking space is a space that will not break into a new line. + /** Non-breaking Space A common character entity used in HTML is the non-breaking space:   A non-breaking space + * is a space that will not break into a new line. */ def nbsp: ModifierT - /** - * No-op frag + /** No-op frag */ def noContent: FragT - /** - * No-op modifier + /** No-op modifier */ def noModifier: ModifierT } @@ -144,25 +143,26 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def className: String } - trait AbstractImageStyle extends StyleModifier - trait AbstractTextStyle extends StyleModifier - trait AbstractTextAlignment extends AbstractTextStyle + trait AbstractImageStyle extends StyleModifier + trait AbstractTextStyle extends StyleModifier + trait AbstractTextAlignment extends AbstractTextStyle trait AbstractTextTransformation extends AbstractTextStyle - trait AbstractBackgroundStyle extends StyleModifier - trait AbstractPullModifier extends StyleModifier + trait AbstractBackgroundStyle extends StyleModifier + trait AbstractPullModifier extends StyleModifier trait AbstractVisibilityModifier extends StyleModifier - /** - * Add classes to an `img` element to easily style images in any project. - * @see [[http://getbootstrap.com/css/#images-shapes]] + /** Add classes to an `img` element to easily style images in any project. + * @see + * [[http://getbootstrap.com/css/#images-shapes]] */ trait AbstractImageUtils { - /** - * Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. - * This applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent element. - * To center images which use the .img-responsive class, use .center-block instead of .text-center. - * See the helper classes section for more details about .center-block usage. - * @see [[http://getbootstrap.com/css/#images-responsive]] + + /** Images in Bootstrap 3 can be made responsive-friendly via the addition of the .img-responsive class. This + * applies max-width: 100%;, height: auto; and display: block; to the image so that it scales nicely to the parent + * element. To center images which use the .img-responsive class, use .center-block instead of .text-center. See + * the helper classes section for more details about .center-block usage. + * @see + * [[http://getbootstrap.com/css/#images-responsive]] */ def responsive: AbstractImageStyle @@ -171,9 +171,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def thumbnail: AbstractImageStyle } - /** - * Easily realign text to components with text alignment classes. - * @see [[http://getbootstrap.com/css/#type-alignment]] + /** Easily realign text to components with text alignment classes. + * @see + * [[http://getbootstrap.com/css/#type-alignment]] */ trait AbstractTextAlignments { def left: AbstractTextAlignment @@ -183,9 +183,9 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def nowrap: AbstractTextAlignment } - /** - * Transform text in components with text capitalization classes. - * @see [[http://getbootstrap.com/css/#type-transformation]] + /** Transform text in components with text capitalization classes. + * @see + * [[http://getbootstrap.com/css/#type-transformation]] */ trait AbstractTextTransformations { def lowercase: AbstractTextTransformation @@ -193,10 +193,10 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def capitalize: AbstractTextTransformation } - /** - * Convey meaning through color with a handful of emphasis utility classes. - * These may also be applied to links and will darken on hover just like our default link styles. - * @see [[http://getbootstrap.com/css/#helper-classes-colors]] + /** Convey meaning through color with a handful of emphasis utility classes. These may also be applied to links and + * will darken on hover just like our default link styles. + * @see + * [[http://getbootstrap.com/css/#helper-classes-colors]] */ trait AbstractTextStyles { def muted: AbstractTextStyle @@ -206,17 +206,17 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def warning: AbstractTextStyle def danger: AbstractTextStyle - /** - * Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. - * @see [[http://getbootstrap.com/css/#helper-classes-image-replacement]] + /** Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. + * @see + * [[http://getbootstrap.com/css/#helper-classes-image-replacement]] */ def hide: AbstractTextStyle } - /** - * Similar to the contextual text color classes, easily set the background of an element to any contextual class. + /** Similar to the contextual text color classes, easily set the background of an element to any contextual class. * Anchor components will darken on hover, just like the text classes. - * @see [[http://getbootstrap.com/css/#helper-classes-backgrounds]] + * @see + * [[http://getbootstrap.com/css/#helper-classes-backgrounds]] */ trait AbstractBackgroundStyles { def primary: AbstractBackgroundStyle @@ -226,24 +226,26 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def danger: AbstractBackgroundStyle } - /** - * Float an element to the left or right with a class. - * `!important` is included to avoid specificity issues. - * @note To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar docs for details. - * @see [[http://getbootstrap.com/css/#helper-classes-floats]] + /** Float an element to the left or right with a class. `!important` is included to avoid specificity issues. + * @note + * To align components in navbars with utility classes, use .navbar-left or .navbar-right instead. See the navbar + * docs for details. + * @see + * [[http://getbootstrap.com/css/#helper-classes-floats]] */ trait AbstractPullModifiers { def left: AbstractPullModifier def right: AbstractPullModifier } - /** - * Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` classes. - * These classes use `!important` to avoid specificity conflicts, just like the quick floats. - * They are only available for block level toggling. They can also be used as mixins. - * `.hide` is available, but it does not always affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. - * Furthermore, `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and the element can still affect the flow of the document. - * @see [[http://getbootstrap.com/css/#helper-classes-show-hide]] + /** Force an element to be shown or hidden (including for screen readers) with the use of `.show` and `.hidden` + * classes. These classes use `!important` to avoid specificity conflicts, just like the quick floats. They are only + * available for block level toggling. They can also be used as mixins. `.hide` is available, but it does not always + * affect screen readers and is deprecated as of v3.0.1. Use `.hidden` or `.sr-only` instead. Furthermore, + * `.invisible` can be used to toggle only the visibility of an element, meaning its display is not modified and the + * element can still affect the flow of the document. + * @see + * [[http://getbootstrap.com/css/#helper-classes-show-hide]] */ trait AbstractVisibilityModifiers { def show: AbstractVisibilityModifier @@ -251,4 +253,3 @@ trait Utils { self: RenderingContext with Icons with Buttons with ClassModifiers def invisible: AbstractVisibilityModifier } } - diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/BootstrapTestApp.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/BootstrapTestApp.scala index bb69d2d..ec9d373 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/BootstrapTestApp.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/BootstrapTestApp.scala @@ -17,22 +17,39 @@ object BootstrapTestApp { jQuery(() ⇒ { // Table tab will appear after 3 seconds val tableVisible = Var(false) - val tabTitle = Var("Wait...") + val tabTitle = Var("Wait...") // Show table tab in 3 seconds - window.setTimeout(() ⇒ { - tableVisible.update(true) - window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000) - }, 3000) - - val tabs = Var(Seq[NavigationTab]( - NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow), - NavigationTab("Carousel", "carousel", "file-image-o".faFwIcon, TestCarousel("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG")), - NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()), - NavigationTab("Text rendering", "text", "file-text-o".faFwIcon, Bootstrap.jumbotron( - FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage()) - )) - )) + window.setTimeout( + () ⇒ { + tableVisible.update(true) + window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000) + }, + 3000 + ) + + val tabs = Var( + Seq[NavigationTab]( + NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow), + NavigationTab( + "Carousel", + "carousel", + "file-image-o".faFwIcon, + TestCarousel( + "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG" + ) + ), + NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()), + NavigationTab( + "Text rendering", + "text", + "file-text-o".faFwIcon, + Bootstrap.jumbotron( + FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage()) + ) + ) + ) + ) val navigationBar = NavigationBar() .withBrand("Scala.js Bootstrap Test", href := "https://github.com/Karasiq/scalajs-bootstrap") @@ -44,8 +61,9 @@ object BootstrapTestApp { navigationBar.applyTo(dom.document.body) // Reactive navbar test - tabs() = tabs.now :+ NavigationTab("Buttons", "buttons", "hand-o-right".faFwIcon, TestPanel("Serious business panel")) + tabs() = + tabs.now :+ NavigationTab("Buttons", "buttons", "hand-o-right".faFwIcon, TestPanel("Serious business panel")) navigationBar.selectTab(2) }) } -} \ No newline at end of file +} diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestModal.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestModal.scala index e489de6..c7080d6 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestModal.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestModal.scala @@ -9,15 +9,23 @@ import scalaTags.all._ object TestModal { def apply(): Modal = { val modalInputValue = Var("10000000") // Better use string - val option2Title = Var("Option 2") - val radioGroup = FormInput.radioGroup(FormInput.radio("Test1", "modal-title", "First radio"), FormInput.radio("Test2", "modal-title", "Second radio")) - val select = FormInput.select("Plain select", "Option 1" → "Option 1", "Option 2" → option2Title, "Option 3" → "Option 3") + val option2Title = Var("Option 2") + val radioGroup = FormInput.radioGroup( + FormInput.radio("Test1", "modal-title", "First radio"), + FormInput.radio("Test2", "modal-title", "Second radio") + ) + val select = + FormInput.select("Plain select", "Option 1" → "Option 1", "Option 2" → option2Title, "Option 3" → "Option 3") val multipleSelect = FormInput.simpleMultipleSelect("Multiple select", "Option 1", "Option 2", "Option 3") - val files = Var[Seq[File]](Nil) + val files = Var[Seq[File]](Nil) files.map(_.headOption).foreach(_.foreach(file ⇒ window.alert(s"File selected: ${file.name}"))) val form = Form( - FormInputGroup(FormInputGroup.label("Money"), FormInputGroup.addon("usd".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.number(modalInputValue.reactiveInput)), + FormInputGroup( + FormInputGroup.label("Money"), + FormInputGroup.addon("usd".fontAwesome(FontAwesome.fixedWidth)), + FormInputGroup.number(modalInputValue.reactiveInput) + ), radioGroup, select, multipleSelect, @@ -29,7 +37,13 @@ object TestModal { option2Title() = "Changed option 2" Modal() - .withTitle(radioGroup.value, " / ", select.selected.map(_.head), " / ", multipleSelect.selected.map(_.mkString(" + "))) + .withTitle( + radioGroup.value, + " / ", + select.selected.map(_.head), + " / ", + multipleSelect.selected.map(_.mkString(" + ")) + ) .withBody(p("You won ", modalInputValue, "$"), p(form)) .withButtons(Modal.closeButton(), Modal.button("Take", Modal.dismiss)) .withDialogStyle(ModalDialogSize.large) diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestPanel.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestPanel.scala index 9596dd9..6728eb9 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestPanel.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestPanel.scala @@ -18,48 +18,88 @@ object TestPanel { final class TestPanel(panelTitle: String) extends BootstrapHtmlComponent { override def renderTag(md: ModifierT*): TagT = { val titleVar = Var[Frag]("ERROR") - val successButton = Button(ButtonStyle.success)("Win 10000000$", onclick := Callback.onClick(_ ⇒ TestModal().show()), Tooltip(i("Press me"), TooltipPlacement.left)).render - val dangerButton = Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render + val successButton = Button(ButtonStyle.success)( + "Win 10000000$", + onclick := Callback.onClick(_ ⇒ TestModal().show()), + Tooltip(i("Press me"), TooltipPlacement.left) + ).render + val dangerButton = + Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render titleVar() = i("Boom") - val toggleButton = ToggleButton(Bootstrap.button("Toggle me")) + val toggleButton = ToggleButton(Bootstrap.button("Toggle me")) val disabledButton = DisabledButton(Bootstrap.button("Heavy computation")) disabledButton.state.foreach { pressed ⇒ if (pressed) { - window.setTimeout(() ⇒ { - window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}") - disabledButton.state() = false - }, 1000) + window.setTimeout( + () ⇒ { + window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}") + disabledButton.state() = false + }, + 1000 + ) } } // Render panel - val panelId = Bootstrap.newId + val panelId = Bootstrap.newId val collapseBtnTitle = Var("ERROR") val panel = Card(panelId) - .withHeader("euro".faFwIcon, Card.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), Card.buttons( - Card.button("plus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))), - Card.button("minus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove"))) - )) + .withHeader( + "euro".faFwIcon, + Card.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), + Card.buttons( + Card.button("plus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))), + Card.button("minus".faFwIcon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove"))) + ) + ) .withBody( new TestProgressBar(Bootstrap.background.success, 200 millis), Navigation.tabs( - NavigationTab("Simple buttons", Bootstrap.newId, "remove".faFwIcon, Card().withBody( - GridSystem.mkRow( - small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info) - ), - GridSystem.mkRow( - ButtonGroup(ButtonGroupSize.default, successButton, dangerButton) - ), - GridSystem.mkRow(Collapse(collapseBtnTitle)( - GridSystem.row( - GridSystem.col(6).asDiv(Dropdown("Dropdown", Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), Dropdown.item("Test 2"))), - GridSystem.col(6).asDiv(Dropdown.dropup("Dropup", Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), Dropdown.item("Test 4"))) + NavigationTab( + "Simple buttons", + Bootstrap.newId, + "remove".faFwIcon, + Card().withBody( + GridSystem.mkRow( + small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info) + ), + GridSystem.mkRow( + ButtonGroup(ButtonGroupSize.default, successButton, dangerButton) + ), + GridSystem.mkRow( + Collapse(collapseBtnTitle)( + GridSystem.row( + GridSystem + .col(6) + .asDiv( + Dropdown( + "Dropdown", + Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), + Dropdown.item("Test 2") + ) + ), + GridSystem + .col(6) + .asDiv( + Dropdown.dropup( + "Dropup", + Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), + Dropdown.item("Test 4") + ) + ) + ) + ) ) - )) - )), - NavigationTab("Reactive buttons", Bootstrap.newId, "play-circle".faFwIcon, Card().withBody(ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton))) + ) + ), + NavigationTab( + "Reactive buttons", + Bootstrap.newId, + "play-circle".faFwIcon, + Card().withBody(ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton)) + ) ) ) .renderTag(Bootstrap.borderStyle.warning, Bootstrap.textStyle.info) diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestProgressBar.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestProgressBar.scala index 9c1fdbe..f261dfa 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestProgressBar.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestProgressBar.scala @@ -11,16 +11,21 @@ import scalaTags.all._ final class TestProgressBar(style: Modifier, updateInterval: FiniteDuration) extends BootstrapComponent { override def render(md: ModifierT*): ModifierT = { val progressBarValue = Var(0) - val progressBar = ProgressBar.withLabel(progressBarValue).renderTag(style, ProgressBarStyle.striped, ProgressBarStyle.animated, md).render + val progressBar = ProgressBar + .withLabel(progressBarValue) + .renderTag(style, ProgressBarStyle.striped, ProgressBarStyle.animated, md) + .render implicit val scheduler = new AsyncScheduler - val timer = Timer(updateInterval) + val timer = Timer(updateInterval) timer.foreach { _ ⇒ if (progressBarValue.now < 100) { progressBarValue.update(progressBarValue.now + 1) } else { - val alert = Alert(AlertStyle.success, - strong("Testing"), " has finished. ", + val alert = Alert( + AlertStyle.success, + strong("Testing"), + " has finished. ", Alert.link(href := "https://getbootstrap.com/components/#alerts", target := "blank", "Alert inline link.") ) progressBar.parentNode.replaceChild(alert.render, progressBar) diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestTable.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestTable.scala index c198b8f..ef8f0ea 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestTable.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestTable.scala @@ -17,18 +17,23 @@ final class TestTable extends BootstrapComponent { val reactiveColumn = Var(2) val items = Var(1 to 45: Seq[Int]) - val columns = Var(TableCols[Int]( - TableCol("First", identity, i ⇒ i), - TableCol("Second", identity, i ⇒ i + 1), - TableCol("Third", identity, i ⇒ Rx(i + reactiveColumn())) - )) + val columns = Var( + TableCols[Int]( + TableCol("First", identity, i ⇒ i), + TableCol("Second", identity, i ⇒ i + 1), + TableCol("Third", identity, i ⇒ Rx(i + reactiveColumn())) + ) + ) // Render table - val sortableTable = SortableTable.Builder(columns) - .withRowModifiers(i ⇒ onclick := Callback.onClick { row ⇒ - reactiveColumn.update(reactiveColumn.now + i) - row.classList.add(TableRowStyle.success.className) - }) + val sortableTable = SortableTable + .Builder(columns) + .withRowModifiers(i ⇒ + onclick := Callback.onClick { row ⇒ + reactiveColumn.update(reactiveColumn.now + i) + row.classList.add(TableRowStyle.success.className) + } + ) .createTable(items) val renderedTable = sortableTable.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped, md).render diff --git a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TodoList.scala b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TodoList.scala index e8eac5a..6d03e5b 100644 --- a/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TodoList.scala +++ b/test/frontend-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TodoList.scala @@ -13,9 +13,9 @@ object TodoList { sealed abstract class ItemPriority(val style: TableRowStyle) object ItemPriority { - case object Low extends ItemPriority(TableRowStyle.success) + case object Low extends ItemPriority(TableRowStyle.success) case object Normal extends ItemPriority(TableRowStyle.info) - case object High extends ItemPriority(TableRowStyle.danger) + case object High extends ItemPriority(TableRowStyle.danger) def fromString(s: String): ItemPriority = Seq(Low, Normal, High).find(_.toString == s).get } @@ -36,21 +36,34 @@ final class TodoList extends BootstrapHtmlComponent { } def addTestData(): Unit = { - items() = items.now ++ (for (_ <- 1 to 20) yield Var(Item(s"Test ${UUID.randomUUID()}", ItemPriority.Low))) + items() = items.now ++ (for (_ ← 1 to 20) yield Var(Item(s"Test ${UUID.randomUUID()}", ItemPriority.Low))) } private[this] def showDialog(title: String, priority: ItemPriority)(onApply: (String, ItemPriority) ⇒ Unit): Unit = { - val titleText = Var(title) + val titleText = Var(title) val prioritySelect = FormInput.simpleSelect("Priority", "Low", "Normal", "High") prioritySelect.selected.update(Seq(priority.toString)) Modal("Add/edit item") - .withBody(Form( - FormInputGroup(FormInputGroup.label("Title"), FormInputGroup.addon("file-text-o".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.text(placeholder := "Write description", titleText.reactiveInput)), - prioritySelect - )) - .withButtons(Modal.closeButton("Cancel"), Modal.button("Apply", Modal.dismiss, onclick := Callback.onClick { _ ⇒ - onApply(titleText.now, ItemPriority.fromString(prioritySelect.selected.now.head)) - })) + .withBody( + Form( + FormInputGroup( + FormInputGroup.label("Title"), + FormInputGroup.addon("file-text-o".fontAwesome(FontAwesome.fixedWidth)), + FormInputGroup.text(placeholder := "Write description", titleText.reactiveInput) + ), + prioritySelect + ) + ) + .withButtons( + Modal.closeButton("Cancel"), + Modal.button( + "Apply", + Modal.dismiss, + onclick := Callback.onClick { _ ⇒ + onApply(titleText.now, ItemPriority.fromString(prioritySelect.selected.now.head)) + } + ) + ) .show(backdrop = false) } @@ -68,37 +81,48 @@ final class TodoList extends BootstrapHtmlComponent { private[this] def renderItem(item: Var[Item]): TableRow = { def todoTitle = Rx(if (item().completed) s(item().title, color.gray) else b(item().title)) - def buttons = ButtonGroup(ButtonGroupSize.small, - Button(ButtonStyle.primary)("Edit", onclick := Callback.onClick(_ ⇒ showEditDialog(item))), + def buttons = ButtonGroup( + ButtonGroupSize.small, + Button(ButtonStyle.primary)("Edit", onclick := Callback.onClick(_ ⇒ showEditDialog(item))), Button(ButtonStyle.danger)("Remove", onclick := Callback.onClick(_ ⇒ items.update(items.now.filter(_.ne(item))))) ) TableRow( Seq( - Seq[Modifier](todoTitle, GridSystem.col(10), onclick := Callback.onClick(_ ⇒ item.update(item.now.copy(completed = !item.now.completed)))), + Seq[Modifier]( + todoTitle, + GridSystem.col(10), + onclick := Callback.onClick(_ ⇒ item.update(item.now.copy(completed = !item.now.completed))) + ), Seq[Modifier](buttons, GridSystem.col(2), textAlign.center) ), Rx(`class` := { - if (item().completed) "" else item().priority.style match { - case TableRowStyle.Default ⇒ "" - case style: TableRowStyle.Styled ⇒ style.className - } + if (item().completed) "" + else + item().priority.style match { + case TableRowStyle.Default ⇒ "" + case style: TableRowStyle.Styled ⇒ style.className + } }).auto ) } override def renderTag(md: ModifierT*): TagT = { - val heading = Rx(Seq[Modifier]( - Seq[Modifier]("Description", GridSystem.col(10)), - Seq[Modifier]("Actions", GridSystem.col(2))) + val heading = Rx( + Seq[Modifier](Seq[Modifier]("Description", GridSystem.col(10)), Seq[Modifier]("Actions", GridSystem.col(2))) ) val table = PagedTable(heading, items.map(_.map(renderItem)), 5) Card() - .withHeader("th-list".faFwIcon, Bootstrap.nbsp, span("Scala.js Todo", Rx(Bootstrap.badge(items().count(i ⇒ !i().completed)))), Card.buttons( - Card.button("plus".faFwIcon, onclick := Callback.onClick(_ ⇒ showAddDialog())), - Card.button("trash".faFwIcon, onclick := Callback.onClick(_ ⇒ removeCompleted())), - Card.button("flash".faFwIcon, onclick := Callback.onClick(_ ⇒ addTestData())) - )) + .withHeader( + "th-list".faFwIcon, + Bootstrap.nbsp, + span("Scala.js Todo", Rx(Bootstrap.badge(items().count(i ⇒ !i().completed)))), + Card.buttons( + Card.button("plus".faFwIcon, onclick := Callback.onClick(_ ⇒ showAddDialog())), + Card.button("trash".faFwIcon, onclick := Callback.onClick(_ ⇒ removeCompleted())), + Card.button("flash".faFwIcon, onclick := Callback.onClick(_ ⇒ addTestData())) + ) + ) .withBody(table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped, TableStyle.small)) } } diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/BootstrapTestApp.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/BootstrapTestApp.scala index 56d0cb5..3eac8bb 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/BootstrapTestApp.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/BootstrapTestApp.scala @@ -17,22 +17,39 @@ object BootstrapTestApp { jQuery(() ⇒ { // Table tab will appear after 3 seconds val tableVisible = Var(false) - val tabTitle = Var("Wait...") + val tabTitle = Var("Wait...") // Show table tab in 3 seconds - window.setTimeout(() ⇒ { - tableVisible.update(true) - window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000) - }, 3000) - - val tabs = Var(Seq[NavigationTab]( - NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow), - NavigationTab("Carousel", "carousel", "picture".glyphicon, TestCarousel("https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG")), - NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()), - NavigationTab("Text rendering", "text", "envelope".glyphicon, Bootstrap.jumbotron( - FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage()) - )) - )) + window.setTimeout( + () ⇒ { + tableVisible.update(true) + window.setTimeout(() ⇒ { tabTitle() = "Table" }, 1000) + }, + 3000 + ) + + val tabs = Var( + Seq[NavigationTab]( + NavigationTab(tabTitle, "table", "table".faFwIcon, TestTable(), tableVisible.reactiveShow), + NavigationTab( + "Carousel", + "carousel", + "picture".glyphicon, + TestCarousel( + "https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Big_Wood%2C_N2.JPG/1280px-Big_Wood%2C_N2.JPG" + ) + ), + NavigationTab("ToDo list", "todo", "fort-awesome".faFwIcon, TodoList()), + NavigationTab( + "Text rendering", + "text", + "envelope".glyphicon, + Bootstrap.jumbotron( + FormInput.textArea(a("Text rendering", href := "./serverside.html"), rows := 30, readonly, TestHtmlPage()) + ) + ) + ) + ) val navigationBar = NavigationBar() .withBrand("Scala.js Bootstrap Test", href := "https://github.com/Karasiq/scalajs-bootstrap") @@ -45,8 +62,13 @@ object BootstrapTestApp { navigationBar.applyTo(dom.document.body) // Reactive navbar test - tabs() = tabs.now :+ NavigationTab("Buttons", "buttons", "log-in".glyphicon, TestPanel("Serious business panel", PanelStyle.warning)) + tabs() = tabs.now :+ NavigationTab( + "Buttons", + "buttons", + "log-in".glyphicon, + TestPanel("Serious business panel", PanelStyle.warning) + ) navigationBar.selectTab(2) }) } -} \ No newline at end of file +} diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestModal.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestModal.scala index b379d0a..5bf21f9 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestModal.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestModal.scala @@ -9,15 +9,23 @@ import scalaTags.all._ object TestModal { def apply(): Modal = { val modalInputValue = Var(10000000.0) - val option2Title = Var("Option 2") - val radioGroup = FormInput.radioGroup(FormInput.radio("Test1", "modal-title", "First radio"), FormInput.radio("Test2", "modal-title", "Second radio")) - val select = FormInput.select("Plain select", "Option 1" → "Option 1", "Option 2" → option2Title, "Option 3" → "Option 3") + val option2Title = Var("Option 2") + val radioGroup = FormInput.radioGroup( + FormInput.radio("Test1", "modal-title", "First radio"), + FormInput.radio("Test2", "modal-title", "Second radio") + ) + val select = + FormInput.select("Plain select", "Option 1" → "Option 1", "Option 2" → option2Title, "Option 3" → "Option 3") val multipleSelect = FormInput.simpleMultipleSelect("Multiple select", "Option 1", "Option 2", "Option 3") - val files = Var[Seq[File]](Nil) + val files = Var[Seq[File]](Nil) files.map(_.headOption).foreach(_.foreach(file ⇒ window.alert(s"File selected: ${file.name}"))) val form = Form( - FormInputGroup(FormInputGroup.label("Money"), FormInputGroup.addon("usd".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.number(modalInputValue.reactiveInput)), + FormInputGroup( + FormInputGroup.label("Money"), + FormInputGroup.addon("usd".fontAwesome(FontAwesome.fixedWidth)), + FormInputGroup.number(modalInputValue.reactiveInput) + ), radioGroup, select, multipleSelect, @@ -29,7 +37,13 @@ object TestModal { option2Title() = "Changed option 2" Modal() - .withTitle(radioGroup.value, " / ", select.selected.map(_.head), " / ", multipleSelect.selected.map(_.mkString(" + "))) + .withTitle( + radioGroup.value, + " / ", + select.selected.map(_.head), + " / ", + multipleSelect.selected.map(_.mkString(" + ")) + ) .withBody(p("You won ", modalInputValue, "$"), p(form)) .withButtons(Modal.closeButton(), Modal.button("Take", Modal.dismiss)) .withDialogStyle(ModalDialogSize.large) diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestPanel.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestPanel.scala index 604e931..0cf3c71 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestPanel.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestPanel.scala @@ -18,50 +18,88 @@ object TestPanel { final class TestPanel(panelTitle: String, style: PanelStyle) extends BootstrapHtmlComponent { override def renderTag(md: ModifierT*): TagT = { val titleVar = Var[Frag]("ERROR") - val successButton = Button(ButtonStyle.success)("Win 10000000$", onclick := Callback.onClick(_ ⇒ TestModal().show()), Tooltip(i("Press me"), TooltipPlacement.left)).render - val dangerButton = Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render + val successButton = Button(ButtonStyle.success)( + "Win 10000000$", + onclick := Callback.onClick(_ ⇒ TestModal().show()), + Tooltip(i("Press me"), TooltipPlacement.left) + ).render + val dangerButton = + Button(ButtonStyle.danger)("Format C:\\", Popover(span(titleVar), "Popover test", TooltipPlacement.right)).render titleVar() = i("Boom") - val toggleButton = ToggleButton(Bootstrap.button("Toggle me")) + val toggleButton = ToggleButton(Bootstrap.button("Toggle me")) val disabledButton = DisabledButton(Bootstrap.button("Heavy computation")) disabledButton.state.foreach { pressed ⇒ if (pressed) { - window.setTimeout(() ⇒ { - window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}") - disabledButton.state() = false - }, 1000) + window.setTimeout( + () ⇒ { + window.alert(s"Answer: ${if (toggleButton.state.now) 321 else 123}") + disabledButton.state() = false + }, + 1000 + ) } } // Render panel - val panelId = Bootstrap.newId + val panelId = Bootstrap.newId val collapseBtnTitle = Var("ERROR") val panel = Panel(panelId, style) - .withHeader(Panel.title("euro".glyphicon, Panel.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), Panel.buttons( - Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))), - Panel.button("minus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove"))) - ))) + .withHeader( + Panel.title( + "euro".glyphicon, + Panel.collapse(panelId, panelTitle, Bootstrap.nbsp, Bootstrap.badge("42")), + Panel.buttons( + Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel add"))), + Panel.button("minus".glyphicon, onclick := Callback.onClick(_ ⇒ window.alert("Panel remove"))) + ) + ) + ) .renderTag( new TestProgressBar(ProgressBarStyle.success, 300 millis), Navigation.tabs( - NavigationTab("Simple buttons", Bootstrap.newId, "remove".glyphicon, Bootstrap.well( - GridSystem.mkRow( - small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info) - ), - GridSystem.mkRow( - ButtonGroup(ButtonGroupSize.default, successButton, dangerButton) - ), - GridSystem.mkRow(Collapse(collapseBtnTitle)( - GridSystem.row( - GridSystem.col(6)(Dropdown("Dropdown", Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), Dropdown.item("Test 2"))), - GridSystem.col(6)(Dropdown.dropup("Dropup", Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), Dropdown.item("Test 4"))) + NavigationTab( + "Simple buttons", + Bootstrap.newId, + "remove".glyphicon, + Bootstrap.well( + GridSystem.mkRow( + small("Hint: press the green button for reactive forms test", Bootstrap.textStyle.info) + ), + GridSystem.mkRow( + ButtonGroup(ButtonGroupSize.default, successButton, dangerButton) + ), + GridSystem.mkRow( + Collapse(collapseBtnTitle)( + GridSystem.row( + GridSystem.col(6)( + Dropdown( + "Dropdown", + Dropdown.item("Test 1", onclick := Callback.onClick(_ ⇒ window.alert("Test 1"))), + Dropdown.item("Test 2") + ) + ), + GridSystem.col(6)( + Dropdown.dropup( + "Dropup", + Dropdown.item("Test 3", onclick := Callback.onClick(_ ⇒ window.alert("Test 3"))), + Dropdown.item("Test 4") + ) + ) + ) + ) ) - )) - )), - NavigationTab("Reactive buttons", Bootstrap.newId, "play-circle".glyphicon, Bootstrap.well( - ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton) - )) + ) + ), + NavigationTab( + "Reactive buttons", + Bootstrap.newId, + "play-circle".glyphicon, + Bootstrap.well( + ButtonGroup(ButtonGroupSize.large, toggleButton, disabledButton) + ) + ) ) ) diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestProgressBar.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestProgressBar.scala index 5a56b86..cc7c9bc 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestProgressBar.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestProgressBar.scala @@ -11,16 +11,21 @@ import scalaTags.all._ final class TestProgressBar(style: ProgressBarStyle, updateInterval: FiniteDuration) extends BootstrapComponent { override def render(md: ModifierT*): ModifierT = { val progressBarValue = Var(0) - val progressBar = ProgressBar.withLabel(progressBarValue).renderTag(style, ProgressBarStyle.striped, ProgressBarStyle.animated, md).render + val progressBar = ProgressBar + .withLabel(progressBarValue) + .renderTag(style, ProgressBarStyle.striped, ProgressBarStyle.animated, md) + .render implicit val scheduler = new AsyncScheduler - val timer = Timer(updateInterval) + val timer = Timer(updateInterval) timer.foreach { _ ⇒ if (progressBarValue.now < 100) { progressBarValue.update(progressBarValue.now + 1) } else { - val alert = Alert(AlertStyle.success, - strong("Testing"), " has finished. ", + val alert = Alert( + AlertStyle.success, + strong("Testing"), + " has finished. ", Alert.link(href := "https://getbootstrap.com/components/#alerts", target := "blank", "Alert inline link.") ) progressBar.parentNode.replaceChild(alert.render, progressBar) diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestTable.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestTable.scala index 58ef452..8faf117 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestTable.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TestTable.scala @@ -17,18 +17,23 @@ final class TestTable extends BootstrapComponent { val reactiveColumn = Var(2) val items = Var(1 to 45: Seq[Int]) - val columns = Var(TableCols[Int]( - TableCol("First", identity, i ⇒ i), - TableCol("Second", identity, i ⇒ i + 1), - TableCol("Third", identity, i ⇒ Rx(i + reactiveColumn())) - )) + val columns = Var( + TableCols[Int]( + TableCol("First", identity, i ⇒ i), + TableCol("Second", identity, i ⇒ i + 1), + TableCol("Third", identity, i ⇒ Rx(i + reactiveColumn())) + ) + ) // Render table - val sortableTable = SortableTable.Builder(columns) - .withRowModifiers(i ⇒ onclick := Callback.onClick { row ⇒ - reactiveColumn.update(reactiveColumn.now + i) - row.classList.add(TableRowStyle.success.className) - }) + val sortableTable = SortableTable + .Builder(columns) + .withRowModifiers(i ⇒ + onclick := Callback.onClick { row ⇒ + reactiveColumn.update(reactiveColumn.now + i) + row.classList.add(TableRowStyle.success.className) + } + ) .createTable(items) val renderedTable = sortableTable.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped, md).render diff --git a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TodoList.scala b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TodoList.scala index 8de2577..1223d92 100644 --- a/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TodoList.scala +++ b/test/frontend/src/main/scala/com/karasiq/bootstrap/test/frontend/TodoList.scala @@ -13,9 +13,9 @@ object TodoList { sealed abstract class ItemPriority(val style: TableRowStyle) object ItemPriority { - case object Low extends ItemPriority(TableRowStyle.success) + case object Low extends ItemPriority(TableRowStyle.success) case object Normal extends ItemPriority(TableRowStyle.info) - case object High extends ItemPriority(TableRowStyle.danger) + case object High extends ItemPriority(TableRowStyle.danger) def fromString(s: String): ItemPriority = Seq(Low, Normal, High).find(_.toString == s).get } @@ -36,21 +36,34 @@ final class TodoList extends BootstrapHtmlComponent { } def addTestData(): Unit = { - items() = items.now ++ (for (_ <- 1 to 20) yield Var(Item(s"Test ${UUID.randomUUID()}", ItemPriority.Low))) + items() = items.now ++ (for (_ ← 1 to 20) yield Var(Item(s"Test ${UUID.randomUUID()}", ItemPriority.Low))) } private[this] def showDialog(title: String, priority: ItemPriority)(onApply: (String, ItemPriority) ⇒ Unit): Unit = { - val titleText = Var(title) + val titleText = Var(title) val prioritySelect = FormInput.simpleSelect("Priority", "Low", "Normal", "High") prioritySelect.selected.update(Seq(priority.toString)) Modal("Add/edit item") - .withBody(Form( - FormInputGroup(FormInputGroup.label("Title"), FormInputGroup.addon("file-text-o".fontAwesome(FontAwesome.fixedWidth)), FormInputGroup.text(placeholder := "Write description", titleText.reactiveInput)), - prioritySelect - )) - .withButtons(Modal.closeButton("Cancel"), Modal.button("Apply", Modal.dismiss, onclick := Callback.onClick { _ ⇒ - onApply(titleText.now, ItemPriority.fromString(prioritySelect.selected.now.head)) - })) + .withBody( + Form( + FormInputGroup( + FormInputGroup.label("Title"), + FormInputGroup.addon("file-text-o".fontAwesome(FontAwesome.fixedWidth)), + FormInputGroup.text(placeholder := "Write description", titleText.reactiveInput) + ), + prioritySelect + ) + ) + .withButtons( + Modal.closeButton("Cancel"), + Modal.button( + "Apply", + Modal.dismiss, + onclick := Callback.onClick { _ ⇒ + onApply(titleText.now, ItemPriority.fromString(prioritySelect.selected.now.head)) + } + ) + ) .show(backdrop = false) } @@ -68,13 +81,18 @@ final class TodoList extends BootstrapHtmlComponent { private[this] def renderItem(item: Var[Item]): TableRow = { def todoTitle = Rx(if (item().completed) s(item().title, color.gray) else b(item().title)) - def buttons = ButtonGroup(ButtonGroupSize.small, - Button(ButtonStyle.primary)("Edit", onclick := Callback.onClick(_ ⇒ showEditDialog(item))), + def buttons = ButtonGroup( + ButtonGroupSize.small, + Button(ButtonStyle.primary)("Edit", onclick := Callback.onClick(_ ⇒ showEditDialog(item))), Button(ButtonStyle.danger)("Remove", onclick := Callback.onClick(_ ⇒ items.update(items.now.filter(_.ne(item))))) ) TableRow( Seq( - Seq[Modifier](todoTitle, GridSystem.col(10), onclick := Callback.onClick(_ ⇒ item.update(item.now.copy(completed = !item.now.completed)))), + Seq[Modifier]( + todoTitle, + GridSystem.col(10), + onclick := Callback.onClick(_ ⇒ item.update(item.now.copy(completed = !item.now.completed))) + ), Seq[Modifier](buttons, GridSystem.col(2), textAlign.center) ), Rx(`class` := { @@ -84,18 +102,23 @@ final class TodoList extends BootstrapHtmlComponent { } override def renderTag(md: ModifierT*): TagT = { - val heading = Rx(Seq[Modifier]( - Seq[Modifier]("Description", GridSystem.col(10)), - Seq[Modifier]("Actions", GridSystem.col(2))) + val heading = Rx( + Seq[Modifier](Seq[Modifier]("Description", GridSystem.col(10)), Seq[Modifier]("Actions", GridSystem.col(2))) ) val table = PagedTable(heading, items.map(_.map(renderItem)), 5) Panel(style = PanelStyle.success) - .withHeader(Panel.title("th-list".glyphicon, span("Scala.js Todo", Bootstrap.nbsp, Rx(Bootstrap.badge(items().count(i ⇒ !i().completed)))), Panel.buttons( - Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ showAddDialog())), - Panel.button("trash".glyphicon, onclick := Callback.onClick(_ ⇒ removeCompleted())), - Panel.button("flash".glyphicon, onclick := Callback.onClick(_ ⇒ addTestData())) - ))) + .withHeader( + Panel.title( + "th-list".glyphicon, + span("Scala.js Todo", Bootstrap.nbsp, Rx(Bootstrap.badge(items().count(i ⇒ !i().completed)))), + Panel.buttons( + Panel.button("plus".glyphicon, onclick := Callback.onClick(_ ⇒ showAddDialog())), + Panel.button("trash".glyphicon, onclick := Callback.onClick(_ ⇒ removeCompleted())), + Panel.button("flash".glyphicon, onclick := Callback.onClick(_ ⇒ addTestData())) + ) + ) + ) .renderTag(table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped, TableStyle.condensed)) } } diff --git a/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestCarousel.scala b/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestCarousel.scala index 4562a81..fc5bf6a 100644 --- a/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestCarousel.scala +++ b/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestCarousel.scala @@ -17,7 +17,7 @@ final class TestCarousel(imgSrc: String)(implicit val rc: TestCarousel.RC) exten type RC = TestCarousel.RC import rc._ import scalaTags.all._ - + def component = Carousel( Carousel.slide( imgSrc, diff --git a/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestHtmlPage.scala b/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestHtmlPage.scala index 9a60c5a..d1fdd89 100644 --- a/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestHtmlPage.scala +++ b/test/shared-v4/src/main/scala/com/karasiq/bootstrap4/test/frontend/TestHtmlPage.scala @@ -9,32 +9,40 @@ import scalaTags.all._ object TestHtmlPage { def apply(): String = { - "" + html(head( - base(href := "/"), - meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"), - meta(name := "viewport", content := "width=device-width, initial-scale=1.0"), - script(src := "https://code.jquery.com/jquery-3.2.1.js"), - raw(bootstrapCdnLinks), - scalaTags.tags2.style(raw(fontAwesomeCss)), - script(raw(activateTooltipScript)), - scalaTags.tags2.title("Bootstrap text page") - ), body( - new TestContainer - )) + "" + html( + head( + base(href := "/"), + meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"), + meta(name := "viewport", content := "width=device-width, initial-scale=1.0"), + script(src := "https://code.jquery.com/jquery-3.2.1.js"), + raw(bootstrapCdnLinks), + scalaTags.tags2.style(raw(fontAwesomeCss)), + script(raw(activateTooltipScript)), + scalaTags.tags2.title("Bootstrap text page") + ), + body( + new TestContainer + ) + ) } private[this] class TestContainer extends BootstrapComponent { def render(md: ModifierT*): ModifierT = { val testModal = this.createModal - val rxText = Var("ERROR") // Pseudo-reactive binding + val rxText = Var("ERROR") // Pseudo-reactive binding val navigationBar = NavigationBar() .withBrand(rxText, href := "http://getbootstrap.com/components/#navbar") .withTabs( NavigationTab("Table", "table", "table".faFwIcon, this.createTable), NavigationTab("Carousel", "carousel", "file-image-o".faFwIcon, this.createCarousel), - NavigationTab("Buttons", "empty", "address-book".faFwIcon, Bootstrap.jumbotron( - Bootstrap.button("Modal", testModal.toggle) - )) + NavigationTab( + "Buttons", + "empty", + "address-book".faFwIcon, + Bootstrap.jumbotron( + Bootstrap.button("Modal", testModal.toggle) + ) + ) ) .withContentContainer(e ⇒ GridSystem.container(GridSystem.mkRow(e), marginTop := 60.px)) .build() @@ -43,8 +51,16 @@ object TestHtmlPage { } private[this] def createTable = { - val table = PagedTable(Rx(Seq("Number", "Square")), Rx(TableRow(Seq(1, 1), Tooltip(b("First row")), - onclick := Callback.onClick(_ ⇒ println("Pseudo callback"))) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i)))) + val table = PagedTable( + Rx(Seq("Number", "Square")), + Rx( + TableRow( + Seq(1, 1), + Tooltip(b("First row")), + onclick := Callback.onClick(_ ⇒ println("Pseudo callback")) + ) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i)) + ) + ) table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped) } @@ -54,7 +70,9 @@ object TestHtmlPage { } private[this] def createCarousel = { - TestCarousel("https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg") + TestCarousel( + "https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg" + ) } } diff --git a/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestCarousel.scala b/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestCarousel.scala index 9f1f98f..79dce8e 100644 --- a/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestCarousel.scala +++ b/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestCarousel.scala @@ -17,7 +17,7 @@ final class TestCarousel(imgSrc: String)(implicit val rc: TestCarousel.RC) exten type RC = TestCarousel.RC import rc._ import scalaTags.all._ - + def component = Carousel( Carousel.slide( imgSrc, diff --git a/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestHtmlPage.scala b/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestHtmlPage.scala index 48a92b2..a23baf9 100644 --- a/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestHtmlPage.scala +++ b/test/shared/src/main/scala/com/karasiq/bootstrap/test/frontend/TestHtmlPage.scala @@ -9,32 +9,40 @@ import scalaTags.all._ object TestHtmlPage { def apply(): String = { - "" + html(head( - base(href := "/"), - meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"), - meta(name := "viewport", content := "width=device-width, initial-scale=1.0"), - script(src := "https://code.jquery.com/jquery-1.12.0.js"), - raw(bootstrapCdnLinks), - scalaTags.tags2.style(raw(fontAwesomeCss)), - script(raw(activateTooltipScript)), - scalaTags.tags2.title("Bootstrap text page") - ), body( - new TestContainer - )) + "" + html( + head( + base(href := "/"), + meta(httpEquiv := "content-type", content := "text/html; charset=utf-8"), + meta(name := "viewport", content := "width=device-width, initial-scale=1.0"), + script(src := "https://code.jquery.com/jquery-1.12.0.js"), + raw(bootstrapCdnLinks), + scalaTags.tags2.style(raw(fontAwesomeCss)), + script(raw(activateTooltipScript)), + scalaTags.tags2.title("Bootstrap text page") + ), + body( + new TestContainer + ) + ) } private[this] class TestContainer extends BootstrapComponent { def render(md: ModifierT*): ModifierT = { val testModal = this.createModal - val rxText = Var("ERROR") // Pseudo-reactive binding + val rxText = Var("ERROR") // Pseudo-reactive binding val navigationBar = NavigationBar() .withBrand(rxText, href := "http://getbootstrap.com/components/#navbar") .withTabs( NavigationTab("Table", "table", "table".faFwIcon, this.createTable), NavigationTab("Carousel", "carousel", "picture".glyphicon, this.createCarousel), - NavigationTab("Buttons", "empty", "address-book".faFwIcon, Bootstrap.jumbotron( - Bootstrap.button("Modal", testModal.toggle) - )) + NavigationTab( + "Buttons", + "empty", + "address-book".faFwIcon, + Bootstrap.jumbotron( + Bootstrap.button("Modal", testModal.toggle) + ) + ) ) .withContentContainer(e ⇒ GridSystem.container(GridSystem.mkRow(e), marginTop := 60.px)) .build() @@ -43,8 +51,16 @@ object TestHtmlPage { } private[this] def createTable = { - val table = PagedTable(Rx(Seq("Number", "Square")), Rx(TableRow(Seq(1, 1), Tooltip(b("First row")), - onclick := Callback.onClick(_ ⇒ println("Pseudo callback"))) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i)))) + val table = PagedTable( + Rx(Seq("Number", "Square")), + Rx( + TableRow( + Seq(1, 1), + Tooltip(b("First row")), + onclick := Callback.onClick(_ ⇒ println("Pseudo callback")) + ) +: (2 to 100).map(i ⇒ TableRow.data(i, i * i)) + ) + ) table.renderTag(TableStyle.bordered, TableStyle.hover, TableStyle.striped) } @@ -54,7 +70,9 @@ object TestHtmlPage { } private[this] def createCarousel = { - TestCarousel("https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg") + TestCarousel( + "https://upload.wikimedia.org/wikipedia/commons/9/9e/Scorpius_featuring_Mars_and_Saturn._%2828837147345%29.jpg" + ) } } diff --git a/test/src/main/scala/com/karasiq/bootstrap/test/backend/BootstrapTestApp.scala b/test/src/main/scala/com/karasiq/bootstrap/test/backend/BootstrapTestApp.scala index 4da9d86..eb0bb35 100644 --- a/test/src/main/scala/com/karasiq/bootstrap/test/backend/BootstrapTestApp.scala +++ b/test/src/main/scala/com/karasiq/bootstrap/test/backend/BootstrapTestApp.scala @@ -21,7 +21,7 @@ object BootstrapTestApp extends App { implicit val actorSystem = ActorSystem(Behaviors.empty, "bootstrap-test") import actorSystem.executionContext - Runtime.getRuntime.addShutdownHook(new Thread(() => actorSystem.terminate())) + Runtime.getRuntime.addShutdownHook(new Thread(() ⇒ actorSystem.terminate())) val route = get { @@ -43,7 +43,7 @@ object BootstrapTestApp extends App { StdIn.readLine() // let it run until user presses return bindingFuture .flatMap(_.unbind()) // trigger unbinding from the port - .onComplete(_ => actorSystem.terminate()) // and shutdown when done + .onComplete(_ ⇒ actorSystem.terminate()) // and shutdown when done } startup()