├── src
├── .keep
├── .properties
├── Bootstrap-Core
│ ├── package.st
│ ├── TBSNavItemTag.class.st
│ ├── TBSPaginationItemTag.class.st
│ ├── WAFormInputTag.extension.st
│ ├── TBSBreadcrumbSectionTag.class.st
│ ├── TBSGenericTag.class.st
│ ├── TBSJumbotronTag.class.st
│ ├── TBSListGroupItem.class.st
│ ├── TBSPageHeaderTag.class.st
│ ├── TBSVerticalButtonGroupTag.class.st
│ ├── WAImageTag.extension.st
│ ├── TBSFormTag.class.st
│ ├── TBSModalTag.class.st
│ ├── TBSDropdownMenuItem.class.st
│ ├── TBSCarouselTag.class.st
│ ├── TBSLayoutRowTag.class.st
│ ├── TBSLinkifyListGroupItem.class.st
│ ├── TBSWellTag.class.st
│ ├── TBSInputGroupTag.class.st
│ ├── TBSProgressTag.class.st
│ ├── TBSTabPaneTag.class.st
│ ├── TBSConfirmer.class.st
│ ├── TBSListItemTag.class.st
│ ├── TBSAlertTag.class.st
│ ├── TBSImageTag.class.st
│ ├── TBSNavTag.class.st
│ ├── TBSPanelTag.class.st
│ ├── TBSProgressbarTag.class.st
│ ├── TBSTableTag.class.st
│ ├── TBSLabelTag.class.st
│ ├── TBSNavbarTag.class.st
│ ├── TBSNavbarToggleButton.class.st
│ ├── WAComponent.extension.st
│ ├── TBSButtonGroupTag.class.st
│ ├── TBSLayoutColumnTag.class.st
│ ├── TBSAlerter.class.st
│ ├── WATagBrush.extension.st
│ ├── TBSButtonTag.class.st
│ ├── TBSDeploymentLibraryRTL.class.st
│ └── TBSGlyphTag.class.st
├── Bootstrap-Jasny
│ ├── package.st
│ ├── TBSNavTag.extension.st
│ ├── TBSButtonTag.extension.st
│ ├── TBSNavmenuTag.class.st
│ └── WAHtmlCanvas.extension.st
├── Bootstrap-Widgets
│ ├── package.st
│ ├── TBSVerticalTabsFileLibrary.class.st
│ ├── TBSNavTag.extension.st
│ ├── TBSOfferTag.class.st
│ ├── WAHtmlCanvas.extension.st
│ ├── TBSBatchedList.class.st
│ ├── TBSAccordion.class.st
│ ├── TBSVerticalTabsDeploymentLibrary.class.st
│ ├── TBSAccordionItem.class.st
│ └── TBSVerticalTabsDevelopmentLibrary.class.st
├── BaselineOfBootstrap
│ ├── package.st
│ └── BaselineOfBootstrap.class.st
├── Bootstrap-Examples
│ ├── package.st
│ ├── TBSBootstrapTableExample.class.st
│ ├── TBSPageHeaderExample.class.st
│ ├── TBSTypographyExample.class.st
│ ├── TBSJasnyInputMaskExample.class.st
│ ├── TBSCodeExample.class.st
│ ├── TBSBootstrapExample.class.st
│ ├── TBSJumbotronExample.class.st
│ ├── TBSBadgeExample.class.st
│ ├── TBSBreadcrumbExample.class.st
│ ├── TBSGlyphIconsExample.class.st
│ ├── TBSHelperClassesExample.class.st
│ ├── TBSWellExample.class.st
│ ├── TBSAccordionExample.class.st
│ ├── TBSNavbarExample.class.st
│ ├── TBSLabelExample.class.st
│ ├── TBSTableJSONTableExample.class.st
│ ├── TBSAlertsExample.class.st
│ ├── TBSPaginationExample.class.st
│ ├── TBSThumbnailExample.class.st
│ ├── TBSJasnyButtonLabelsExample.class.st
│ ├── TBSJasnyNavmenuExample.class.st
│ ├── TBSTableExample.class.st
│ ├── TBSFormsExample.class.st
│ ├── TBSBatchedListExample.class.st
│ ├── TBSNavExample.class.st
│ ├── TBSButtonDropdownExample.class.st
│ ├── TBSProgressBarExample.class.st
│ ├── TBSTableTransformTableExample.class.st
│ ├── TBSDropdownExample.class.st
│ ├── TBSListGroupExample.class.st
│ ├── TBSModalExample.class.st
│ ├── TBSButtonGroupExample.class.st
│ ├── TBSImageExample.class.st
│ ├── TBSVerticalTabsExample.class.st
│ ├── TBSExampleBrowser.class.st
│ ├── TBSInputGroupExample.class.st
│ ├── TBSPanelExample.class.st
│ ├── TBSExampleInformsConfirms.class.st
│ ├── TBSButtonExample.class.st
│ ├── TBSGridSystemExample.class.st
│ ├── TBSExamplesHome.class.st
│ ├── TBSOfferExample.class.st
│ └── TBSBootstrapTableExampleLibrary.class.st
├── Bootstrap-Tests-Core
│ ├── package.st
│ ├── TBSHolderJSTest.class.st
│ ├── TBSDevelopmentLibraryTest.class.st
│ └── TBSDeploymentLibraryTest.class.st
├── Bootstrap-Tests-Jasny
│ ├── package.st
│ ├── TBSJasnyDeploymentLibraryTest.class.st
│ └── TBSJasnyCanvasBrushTest.class.st
├── Bootstrap-Tests-Widgets
│ ├── package.st
│ ├── TBSVerticalTabsDeploymentLibraryTest.class.st
│ ├── TBSVerticalTabsDevelopmentLibraryTest.class.st
│ ├── TBSTableFileLibraryTest.class.st
│ ├── TBSAccordionItemTest.class.st
│ ├── TBSVerticalTabsCanvasBrushTest.class.st
│ └── TBSWidgetsCanvasBrushTest.class.st
└── ConfigurationOfBootstrap
│ └── package.st
├── .gitignore
├── .project
├── clean.sh
├── start.sh
├── download.sh
├── load.st
├── LICENSE
└── README.md
/src/.keep:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | run/
2 |
--------------------------------------------------------------------------------
/.project:
--------------------------------------------------------------------------------
1 | {
2 | 'srcDirectory' : 'src'
3 | }
--------------------------------------------------------------------------------
/clean.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rm -rf run
4 |
--------------------------------------------------------------------------------
/src/.properties:
--------------------------------------------------------------------------------
1 | {
2 | #format : #tonel
3 | }
--------------------------------------------------------------------------------
/src/Bootstrap-Core/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Core' }
2 |
--------------------------------------------------------------------------------
/src/Bootstrap-Jasny/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Jasny' }
2 |
--------------------------------------------------------------------------------
/start.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cd run
4 | ./pharo-ui Pharo.image
5 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Widgets' }
2 |
--------------------------------------------------------------------------------
/src/BaselineOfBootstrap/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #BaselineOfBootstrap }
2 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Examples' }
2 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Core/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Tests-Core' }
2 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Jasny/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Tests-Jasny' }
2 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #'Bootstrap-Tests-Widgets' }
2 |
--------------------------------------------------------------------------------
/src/ConfigurationOfBootstrap/package.st:
--------------------------------------------------------------------------------
1 | Package { #name : #ConfigurationOfBootstrap }
2 |
--------------------------------------------------------------------------------
/download.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | mkdir run
4 | cd run
5 | wget -O- get.pharo.org/64/70+vm | bash
6 | ./pharo-ui Pharo.image ../load.st
7 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSNavItemTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Bootstrap nav item
3 | "
4 | Class {
5 | #name : #TBSNavItemTag,
6 | #superclass : #TBSListItemTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSPaginationItemTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Bootstrap pagination item
3 | "
4 | Class {
5 | #name : #TBSPaginationItemTag,
6 | #superclass : #TBSListItemTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/WAFormInputTag.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WAFormInputTag }
2 |
3 | { #category : #'*bootstrap-core-canvas' }
4 | WAFormInputTag >> tbsFormControl [
5 |
6 | self class: 'form-control'
7 | ]
8 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSBreadcrumbSectionTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Bootstrap breadcrumb section
3 | "
4 | Class {
5 | #name : #TBSBreadcrumbSectionTag,
6 | #superclass : #TBSListItemTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
--------------------------------------------------------------------------------
/load.st:
--------------------------------------------------------------------------------
1 | Metacello new
2 | baseline:'Bootstrap';
3 | repository: 'github://astares/Seaside-Bootstrap:master/src';
4 | load.
5 |
6 | ZnZincServerAdaptor startOn: 8080.
7 | WebBrowser openOn: 'http://localhost:8080/bootstrap/'
8 |
--------------------------------------------------------------------------------
/src/Bootstrap-Jasny/TBSNavTag.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #TBSNavTag }
2 |
3 | { #category : #'*Bootstrap-Jasny-Canvas' }
4 | TBSNavTag >> beNavmenuNavigation [
5 | "Creates a navigation specialized for a nav menu."
6 |
7 | self class: 'navmenu-nav'
8 | ]
9 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSGenericTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A generic Bootstrap tag
3 | "
4 | Class {
5 | #name : #TBSGenericTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSGenericTag >> tag [
12 | ^ 'div'
13 | ]
14 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSVerticalTabsFileLibrary.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A file library for vertical tabs. See https://github.com/dbtek/bootstrap-vertical-tabs
3 | "
4 | Class {
5 | #name : #TBSVerticalTabsFileLibrary,
6 | #superclass : #WAFileMetadataLibrary,
7 | #category : 'Bootstrap-Widgets-Libraries'
8 | }
9 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSJumbotronTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap jumbotron
3 | "
4 | Class {
5 | #name : #TBSJumbotronTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #initialization }
11 | TBSJumbotronTag >> initialize [
12 | super initialize.
13 | self class: 'jumbotron'
14 | ]
15 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSListGroupItem.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A list group icon
3 | "
4 | Class {
5 | #name : #TBSListGroupItem,
6 | #superclass : #TBSListItemTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #initialization }
11 | TBSListGroupItem >> initialize [
12 | super initialize.
13 | self class: 'list-group-item'
14 | ]
15 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSPageHeaderTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap page header
3 | "
4 | Class {
5 | #name : #TBSPageHeaderTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #initialization }
11 | TBSPageHeaderTag >> initialize [
12 | super initialize.
13 | self class: 'page-header'
14 | ]
15 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSVerticalButtonGroupTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A vertical Bootstrap button group
3 | "
4 | Class {
5 | #name : #TBSVerticalButtonGroupTag,
6 | #superclass : #TBSButtonGroupTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSVerticalButtonGroupTag >> defaultStyleClass [
12 |
13 | ^'btn-group-vertical'
14 | ]
15 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/WAImageTag.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WAImageTag }
2 |
3 | { #category : #'*bootstrap-core-canvas' }
4 | WAImageTag >> placeHolder: aString [
5 | "Support for holder.js
6 |
7 | Example: html image placeHolder: '80x180'.
8 | html image placeHolder: '100%x180'.
9 | "
10 |
11 | self attributeAt: 'data-src' put: 'holder.js/', aString
12 | ]
13 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSFormTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A boostrap form
3 | "
4 | Class {
5 | #name : #TBSFormTag,
6 | #superclass : #WAFormTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSFormTag >> beHorizontal [
12 |
13 | self class: 'form-horizontal'
14 | ]
15 |
16 | { #category : #options }
17 | TBSFormTag >> beInline [
18 |
19 | self class: 'form-inline'
20 | ]
21 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Core/TBSHolderJSTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSHolderJSTest,
3 | #superclass : #WAAbstractCanvasBrushTest,
4 | #category : 'Bootstrap-Tests-Core-Canvas'
5 | }
6 |
7 | { #category : #testing }
8 | TBSHolderJSTest >> testTbsAlertBeDanger [
9 |
10 | self
11 | assert: [ :html | html image placeHolder: '80x80' ]
12 | gives: '
'
13 |
14 | ]
15 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSModalTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap modal
3 | "
4 | Class {
5 | #name : #TBSModalTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSModalTag >> beFade [
12 |
13 | self class: 'fade'
14 | ]
15 |
16 | { #category : #initialization }
17 | TBSModalTag >> initialize [
18 | super initialize.
19 | self class: 'modal'
20 | ]
21 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSDropdownMenuItem.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Boostrap menu item for dropdowns
3 | "
4 | Class {
5 | #name : #TBSDropdownMenuItem,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSDropdownMenuItem >> beDisabled [
12 |
13 | self class: 'disabled'
14 | ]
15 |
16 | { #category : #accessing }
17 | TBSDropdownMenuItem >> tag [
18 |
19 | ^'li'
20 | ]
21 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSCarouselTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap carousel
3 | "
4 | Class {
5 | #name : #TBSCarouselTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #initialization }
11 | TBSCarouselTag >> initialize [
12 | super initialize.
13 | self class: 'carousel'
14 | ]
15 |
16 | { #category : #options }
17 | TBSCarouselTag >> slide [
18 | self class: 'slide'
19 | ]
20 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSLayoutRowTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A boostrap layout row
3 | "
4 | Class {
5 | #name : #TBSLayoutRowTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #initialization }
11 | TBSLayoutRowTag >> initialize [
12 | super initialize.
13 | self class: 'row'
14 | ]
15 |
16 | { #category : #options }
17 | TBSLayoutRowTag >> showGrid [
18 |
19 | self class: 'show-grid'
20 | ]
21 |
--------------------------------------------------------------------------------
/src/Bootstrap-Jasny/TBSButtonTag.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #TBSButtonTag }
2 |
3 | { #category : #'*Bootstrap-Jasny-Canvas' }
4 | TBSButtonTag >> beLabeled [
5 | "Creates an labeled type button."
6 |
7 | self beLabeledIf: true
8 | ]
9 |
10 | { #category : #'*Bootstrap-Jasny-Canvas' }
11 | TBSButtonTag >> beLabeledIf: aBlock [
12 | "Creates an labeled type button if aBlock is true."
13 |
14 | self class: 'btn-labeled' if: aBlock
15 | ]
16 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSVerticalTabsDeploymentLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSVerticalTabsDeploymentLibraryTest,
3 | #superclass : #TestCase,
4 | #category : 'Bootstrap-Tests-Widgets-Libraries'
5 | }
6 |
7 | { #category : #tests }
8 | TBSVerticalTabsDeploymentLibraryTest >> testIncludeVerticalTabsMinCSSByDefault [
9 |
10 | self assert: (TBSVerticalTabsDeploymentLibrary new selectorsToInclude includes: #bootstrapverticaltabsminCss)
11 |
12 | ]
13 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSVerticalTabsDevelopmentLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSVerticalTabsDevelopmentLibraryTest,
3 | #superclass : #TestCase,
4 | #category : 'Bootstrap-Tests-Widgets-Libraries'
5 | }
6 |
7 | { #category : #tests }
8 | TBSVerticalTabsDevelopmentLibraryTest >> testIncludeVerticalTabsCSSByDefault [
9 |
10 | self assert: (TBSVerticalTabsDevelopmentLibrary new selectorsToInclude includes: #bootstrapverticaltabsCss)
11 |
12 | ]
13 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSLinkifyListGroupItem.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A bootstrap linkify list group item
3 | "
4 | Class {
5 | #name : #TBSLinkifyListGroupItem,
6 | #superclass : #WAAnchorTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSLinkifyListGroupItem >> beActive [
12 |
13 | self class: 'active'
14 | ]
15 |
16 | { #category : #initialization }
17 | TBSLinkifyListGroupItem >> initialize [
18 | super initialize.
19 | self class: 'list-group-item'
20 | ]
21 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSWellTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap well
3 | "
4 | Class {
5 | #name : #TBSWellTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSWellTag >> beLarge [
12 |
13 | self class: 'well-lg'
14 | ]
15 |
16 | { #category : #options }
17 | TBSWellTag >> beSmall [
18 |
19 | self class: 'well-sm'
20 | ]
21 |
22 | { #category : #initialization }
23 | TBSWellTag >> initialize [
24 | super initialize.
25 | self class: 'well'
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSNavTag.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #TBSNavTag }
2 |
3 | { #category : #'*Bootstrap-Widgets-Canvas' }
4 | TBSNavTag >> beTabsLeft [
5 | "Creates tabs on the left"
6 | self class: 'tabs-left'.
7 |
8 | ]
9 |
10 | { #category : #'*Bootstrap-Widgets-Canvas' }
11 | TBSNavTag >> beTabsRight [
12 | "Creates an Tabs nav."
13 | self class: 'tabs-right'.
14 |
15 | ]
16 |
17 | { #category : #'*Bootstrap-Widgets-Canvas' }
18 | TBSNavTag >> beTabsSideways [
19 | "Creates tabs on the right"
20 | self class: 'sideways'.
21 |
22 | ]
23 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSInputGroupTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap input group
3 | "
4 | Class {
5 | #name : #TBSInputGroupTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #sizing }
11 | TBSInputGroupTag >> beLarge [
12 |
13 | self class: 'input-group-lg'
14 | ]
15 |
16 | { #category : #sizing }
17 | TBSInputGroupTag >> beSmall [
18 |
19 | self class: 'input-group-sm'
20 | ]
21 |
22 | { #category : #initialization }
23 | TBSInputGroupTag >> initialize [
24 | super initialize.
25 | self class: 'input-group'
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSProgressTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap progress
3 | "
4 | Class {
5 | #name : #TBSProgressTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSProgressTag >> beAnimated [
12 |
13 | self beStriped.
14 | self class: 'active'
15 | ]
16 |
17 | { #category : #options }
18 | TBSProgressTag >> beStriped [
19 |
20 | self class: 'progress-striped'
21 |
22 | ]
23 |
24 | { #category : #initialization }
25 | TBSProgressTag >> initialize [
26 | super initialize.
27 | self class: 'progress'
28 | ]
29 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSTabPaneTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A bootstrap tab pane
3 | "
4 | Class {
5 | #name : #TBSTabPaneTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSTabPaneTag >> beActive [
12 |
13 | self class: 'active'
14 | ]
15 |
16 | { #category : #options }
17 | TBSTabPaneTag >> beActiveIf: aBooleanOrBlock [
18 |
19 | aBooleanOrBlock value ifTrue: [ self beActive ]
20 | ]
21 |
22 | { #category : #initialization }
23 | TBSTabPaneTag >> initialize [
24 | super initialize.
25 | self class: 'tab-pane'
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSTableFileLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSTableFileLibraryTest,
3 | #superclass : #TestCase,
4 | #category : 'Bootstrap-Tests-Widgets-Libraries'
5 | }
6 |
7 | { #category : #tests }
8 | TBSTableFileLibraryTest >> testIncludeTableCSSByDefault [
9 |
10 | self assert: (TBSTableFileLibrary new selectorsToInclude includes: #bootstraptableCss)
11 |
12 | ]
13 |
14 | { #category : #tests }
15 | TBSTableFileLibraryTest >> testIncludeTableJSByDefault [
16 |
17 | self assert: (TBSTableFileLibrary new selectorsToInclude includes: #bootstraptableJs)
18 |
19 | ]
20 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSConfirmer.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A confirmation component
3 | "
4 | Class {
5 | #name : #TBSConfirmer,
6 | #superclass : #TBSAlerter,
7 | #category : 'Bootstrap-Core-Component'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSConfirmer >> no [
12 | self answer: false
13 | ]
14 |
15 | { #category : #rendering }
16 | TBSConfirmer >> renderButtonsOn: canvas [
17 | canvas tbsButtonGroup: [
18 | (canvas tbsButton on: #yes of: self) bePrimary.
19 | canvas tbsButton on: #no of: self ].
20 |
21 | ]
22 |
23 | { #category : #accessing }
24 | TBSConfirmer >> yes [
25 | self answer: true
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBootstrapTableExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Common superclass for all examples from http://wenzhixin.net.cn/p/bootstrap-table
3 | "
4 | Class {
5 | #name : #TBSBootstrapTableExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Widgets-Table'
8 | }
9 |
10 | { #category : #testing }
11 | TBSBootstrapTableExample class >> isAbstract [
12 |
13 | ^self name = #TBSBootstrapTableExample
14 | ]
15 |
16 | { #category : #updating }
17 | TBSBootstrapTableExample >> updateRoot: root [
18 |
19 | super updateRoot: root.
20 | TBSTableFileLibrary default updateRoot: root
21 | ]
22 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSPageHeaderExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap page headers
3 | "
4 | Class {
5 | #name : #TBSPageHeaderExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSPageHeaderExample class >> exampleName [
12 |
13 | ^'Page header'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSPageHeaderExample >> renderExampleOn: html [
18 |
19 | html tbsPageHeader: [
20 | html heading: [
21 | html text: 'Example page header'.
22 | html space.
23 | html small: 'Subtext for header' ]]
24 |
25 | ]
26 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSTypographyExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for bootstrap styled typography
3 | "
4 | Class {
5 | #name : #TBSTypographyExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSTypographyExample class >> exampleName [
12 |
13 | ^'Typography'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSTypographyExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Headings'.
20 | 1 to: 6 do: [:each |
21 | html heading level: each; with: ('h', each greaseString, '. bootstrap heading') ]
22 | ]
23 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSJasnyInputMaskExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Example for an input mask
3 | "
4 | Class {
5 | #name : #TBSJasnyInputMaskExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Jasny'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSJasnyInputMaskExample class >> exampleName [
12 |
13 | ^'Jasny - Input Mask'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSJasnyInputMaskExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Input mask'.
20 | html textInput
21 | tbsFormControl;
22 | attributeAt: 'data-mask' put: '999-99-999-9999-9';
23 | placeholder: 'ISBN'.
24 |
25 | ]
26 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSListItemTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Common superclass for list item based Bootstrap tags
3 | "
4 | Class {
5 | #name : #TBSListItemTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSListItemTag >> beActive [
12 |
13 | self class: 'active'
14 | ]
15 |
16 | { #category : #options }
17 | TBSListItemTag >> beActiveIf: aBoolean [
18 |
19 | aBoolean value ifTrue: [ self beActive ]
20 | ]
21 |
22 | { #category : #options }
23 | TBSListItemTag >> beDisabled [
24 |
25 | self class: 'disabled'
26 | ]
27 |
28 | { #category : #accessing }
29 | TBSListItemTag >> tag [
30 |
31 | ^'li'
32 | ]
33 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Jasny/TBSJasnyDeploymentLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Unit test for deployment library
3 | "
4 | Class {
5 | #name : #TBSJasnyDeploymentLibraryTest,
6 | #superclass : #TestCase,
7 | #category : 'Bootstrap-Tests-Jasny-Libraries'
8 | }
9 |
10 | { #category : #tests }
11 | TBSJasnyDeploymentLibraryTest >> testIncludeJasnyMinCSSByDefault [
12 |
13 | self assert: (TBSJasnyDeploymentLibrary new selectorsToInclude includes: #cssjasnybootstrapminCss)
14 |
15 | ]
16 |
17 | { #category : #tests }
18 | TBSJasnyDeploymentLibraryTest >> testIncludeJasnyMinJSByDefault [
19 |
20 | self assert: (TBSJasnyDeploymentLibrary new selectorsToInclude includes: #jsjasnybootstrapminJs)
21 |
22 | ]
23 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSCodeExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap code formatting example
3 | "
4 | Class {
5 | #name : #TBSCodeExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSCodeExample class >> exampleName [
12 |
13 | ^'Code'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSCodeExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Inline'.
20 |
21 | html text: 'For example, '.
22 | html code: ''.
23 | html text: ' should be wrapped as inline.'.
24 |
25 | html heading level: 2; with: 'Basic block'.
26 | html preformatted: 'Sample text here...
'
27 |
28 |
29 |
30 |
31 | ]
32 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSAlertTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap alert
3 | "
4 | Class {
5 | #name : #TBSAlertTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSAlertTag >> beDanger [
12 |
13 | self class: 'alert-danger'
14 | ]
15 |
16 | { #category : #options }
17 | TBSAlertTag >> beInfo [
18 |
19 | self class: 'alert-info'
20 | ]
21 |
22 | { #category : #options }
23 | TBSAlertTag >> beSuccess [
24 |
25 | self class: 'alert-success'
26 | ]
27 |
28 | { #category : #options }
29 | TBSAlertTag >> beWarning [
30 |
31 | self class: 'alert-warning'
32 | ]
33 |
34 | { #category : #initialization }
35 | TBSAlertTag >> initialize [
36 | super initialize.
37 | self class: 'alert'
38 | ]
39 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSImageTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | represents a twitter bootstrap image
3 | "
4 | Class {
5 | #name : #TBSImageTag,
6 | #superclass : #WAImageTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSImageTag >> beCircle [
12 | "Creates an Circle border image."
13 | self class: 'img-circle'
14 | ]
15 |
16 | { #category : #options }
17 | TBSImageTag >> beResponsive [
18 | "Creates an Rounded border image."
19 | self class: 'img-responsive'
20 | ]
21 |
22 | { #category : #options }
23 | TBSImageTag >> beRounded [
24 | "Creates an Rounded border image."
25 | self class: 'img-rounded'
26 | ]
27 |
28 | { #category : #options }
29 | TBSImageTag >> beThumbnail [
30 | "Creates an thumbnail border image."
31 | self class: 'img-thumbnail'
32 | ]
33 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBootstrapExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A common superclass for the bootstrap examples
3 | "
4 | Class {
5 | #name : #TBSBootstrapExample,
6 | #superclass : #WAComponent,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSBootstrapExample class >> exampleName [
12 |
13 | ^self name greaseString
14 | ]
15 |
16 | { #category : #testing }
17 | TBSBootstrapExample class >> isAbstract [
18 |
19 | ^self name = #TBSBootstrapExample
20 | ]
21 |
22 | { #category : #rendering }
23 | TBSBootstrapExample >> renderContentOn: html [
24 |
25 | html heading: self class exampleName; horizontalRule.
26 | self renderExampleOn: html
27 | ]
28 |
29 | { #category : #rendering }
30 | TBSBootstrapExample >> renderExampleOn: html [
31 |
32 |
33 | ]
34 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSJumbotronExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap jumbotron
3 | "
4 | Class {
5 | #name : #TBSJumbotronExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSJumbotronExample class >> exampleName [
12 |
13 | ^'Jumbotron'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSJumbotronExample >> renderExampleOn: html [
18 |
19 |
20 | html tbsJumbotron: [
21 | html heading: 'Hello, world!'.
22 | html paragraph: 'This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.'.
23 | html paragraph: [
24 | html tbsButton
25 | bePrimary;
26 | beLarge;
27 | with: 'Learn more' ]]
28 |
29 | ]
30 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSAccordionItemTest.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A test for accordion item
3 | "
4 | Class {
5 | #name : #TBSAccordionItemTest,
6 | #superclass : #TestCase,
7 | #category : 'Bootstrap-Tests-Widgets-Components'
8 | }
9 |
10 | { #category : #tests }
11 | TBSAccordionItemTest >> testRenderBlock [
12 | |builder renderBlock parent item calledCorrectly |
13 | builder := WAHtmlCanvas builder.
14 | renderBlock := [:html | calledCorrectly := html class = builder rendererClass ].
15 | parent := TBSAccordion new.
16 | parent add: renderBlock title: 'Something to render'.
17 |
18 | builder render: parent.
19 | self assert: calledCorrectly.
20 |
21 | item := parent items first.
22 | self
23 | assert: item componentOrBlock = renderBlock;
24 | assert: item title = 'Something to render'
25 | ]
26 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBadgeExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap badges
3 | "
4 | Class {
5 | #name : #TBSBadgeExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSBadgeExample class >> exampleName [
12 |
13 | ^'Badges'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSBadgeExample >> renderExampleOn: html [
18 |
19 | html anchor with: [ html text: 'Inbox '. html tbsBadge: '42'. ].
20 |
21 | html heading level: 4; with: 'Self collapsing'.
22 | html text: 'When there are no new or unread items, badges will simply collapse. '.
23 |
24 | html break. html anchor with: [ html text: 'Full Inbox '. html tbsBadge: '42'. ].
25 | html break. html anchor with: [ html text: 'Empty Inbox '. html tbsBadge: ''. ].
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Core/TBSDevelopmentLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSDevelopmentLibraryTest,
3 | #superclass : #TestCase,
4 | #category : 'Bootstrap-Tests-Core-Libraries'
5 | }
6 |
7 | { #category : #testing }
8 | TBSDevelopmentLibraryTest >> testIncludeBootstrapCSSByDefault [
9 |
10 | self assert: (TBSDevelopmentLibrary new selectorsToInclude includes: #cssbootstrapCss)
11 |
12 | ]
13 |
14 | { #category : #testing }
15 | TBSDevelopmentLibraryTest >> testIncludeBootstrapJSByDefault [
16 |
17 | self assert: (TBSDevelopmentLibrary new selectorsToInclude includes: #jsbootstrapJs)
18 |
19 | ]
20 |
21 | { #category : #testing }
22 | TBSDevelopmentLibraryTest >> testIncludeBootstrapThemeCSSByDefault [
23 |
24 | self assert: (TBSDevelopmentLibrary new selectorsToInclude includes: #cssbootstrapthemeCss)
25 |
26 | ]
27 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBreadcrumbExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap breadcrumb example
3 | "
4 | Class {
5 | #name : #TBSBreadcrumbExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSBreadcrumbExample class >> exampleName [
12 |
13 | ^'Breadcrumbs'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSBreadcrumbExample >> renderExampleOn: html [
18 |
19 | html tbsBreadcrumb: [
20 | html tbsBreadcrumbSection beActive; with: 'Home' ].
21 |
22 | html tbsBreadcrumb: [
23 | html tbsBreadcrumbSection: [ html anchor: 'Home' ].
24 | html tbsBreadcrumbSection beActive; with: 'Library'].
25 |
26 | html tbsBreadcrumb: [
27 | html tbsBreadcrumbSection: [ html anchor: 'Home' ].
28 | html tbsBreadcrumbSection: [ html anchor: 'Library' ].
29 | html tbsBreadcrumbSection beActive; with: 'Data']
30 | ]
31 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSGlyphIconsExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the glyph icons
3 | "
4 | Class {
5 | #name : #TBSGlyphIconsExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSGlyphIconsExample class >> exampleName [
12 |
13 | ^'Glyphicons'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSGlyphIconsExample >> renderExampleOn: html [
18 | html text: 'Use #tbsGlyphIcon and then the icon that is required'.
19 |
20 | (((TBSGlyphTag methodDict
21 | collect: [:each | each selector ])
22 | select: [:each | each greaseString beginsWith: 'icon' ]) asArray
23 | sort: [:e1 :e2 | e1 greaseString < e2 greaseString ])
24 | do: [:selector |
25 | html break.
26 | html tbsGlyphIcon perform: selector.
27 | html space;space;space.
28 | html text: selector greaseString ]
29 | ]
30 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSNavTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap navigation
3 | "
4 | Class {
5 | #name : #TBSNavTag,
6 | #superclass : #WAUnorderedListTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSNavTag >> beNavbarNavigation [
12 | "Creates a navigation specialized for a nav bar."
13 |
14 | self class: 'navbar-nav'
15 | ]
16 |
17 | { #category : #options }
18 | TBSNavTag >> bePills [
19 | "Creates an Pills nav."
20 | self class: 'nav-pills'
21 | ]
22 |
23 | { #category : #options }
24 | TBSNavTag >> beStacked [
25 | "Creates a stacked nav (for pills only)."
26 |
27 | self class: 'nav-stacked'
28 | ]
29 |
30 | { #category : #options }
31 | TBSNavTag >> beTabs [
32 | "Creates an Tabs nav."
33 | self class: 'nav-tabs'
34 | ]
35 |
36 | { #category : #initialization }
37 | TBSNavTag >> initialize [
38 | super initialize.
39 | self class: 'nav'
40 | ]
41 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSHelperClassesExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap helper classes
3 | "
4 | Class {
5 | #name : #TBSHelperClassesExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSHelperClassesExample class >> exampleName [
12 |
13 | ^'Helper classes'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSHelperClassesExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Close icon'.
20 |
21 | html text: 'Use the generic close icon for dismissing content like modals and alerts. You will find it on the right side'.
22 | html tbsCloseIcon with: 'x'.
23 |
24 | html heading level: 2; with: 'Screen reader only'.
25 |
26 | html text: 'Hide an element to all users except screen readers.'.
27 | html paragraph
28 | tbsScreenReaderOnly;
29 | with: 'hi'
30 | ]
31 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Core/TBSDeploymentLibraryTest.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Test the Bootstrap deployment file libary
3 | "
4 | Class {
5 | #name : #TBSDeploymentLibraryTest,
6 | #superclass : #TestCase,
7 | #category : 'Bootstrap-Tests-Core-Libraries'
8 | }
9 |
10 | { #category : #testing }
11 | TBSDeploymentLibraryTest >> testIncludeBootstrapMinCSSByDefault [
12 |
13 | self assert: (TBSDeploymentLibrary new selectorsToInclude includes: #cssbootstrapminCss)
14 |
15 | ]
16 |
17 | { #category : #testing }
18 | TBSDeploymentLibraryTest >> testIncludeBootstrapMinJSByDefault [
19 |
20 | self assert: (TBSDeploymentLibrary new selectorsToInclude includes: #jsbootstrapminJs)
21 |
22 | ]
23 |
24 | { #category : #testing }
25 | TBSDeploymentLibraryTest >> testIncludeBootstrapThemeMinCSSByDefault [
26 |
27 | self assert: (TBSDeploymentLibrary new selectorsToInclude includes: #cssbootstrapthememinCss)
28 |
29 | ]
30 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSWellExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap well
3 | "
4 | Class {
5 | #name : #TBSWellExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSWellExample class >> exampleName [
12 |
13 | ^'Well'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSWellExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Default well'.
20 | html text: 'Use the well as a simple effect on an element to give it an inset effect.'.
21 | html tbsWell: 'Look, I''m in a well!'.
22 |
23 | html heading level: 2; with: 'Optional classes'.
24 |
25 | html text: 'Control padding and rounded corners with two optional modifier classes.'.
26 |
27 | html tbsWell
28 | beLarge; with: 'Look, I''m a large well!'.
29 |
30 | html tbsWell
31 | beSmall; with: 'Look, I''m a small well!'.
32 | ]
33 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSVerticalTabsCanvasBrushTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSVerticalTabsCanvasBrushTest,
3 | #superclass : #WAAbstractCanvasBrushTest,
4 | #category : 'Bootstrap-Tests-Widgets-Canvas'
5 | }
6 |
7 | { #category : #testing }
8 | TBSVerticalTabsCanvasBrushTest >> testTbsNavBeTabsLeft [
9 |
10 | self
11 | assert: [ :html | html tbsNav beTabs beTabsLeft ]
12 | gives: ''
13 | ]
14 |
15 | { #category : #testing }
16 | TBSVerticalTabsCanvasBrushTest >> testTbsNavBeTabsRight [
17 |
18 | self
19 | assert: [ :html | html tbsNav beTabs beTabsRight ]
20 | gives: ''
21 | ]
22 |
23 | { #category : #testing }
24 | TBSVerticalTabsCanvasBrushTest >> testTbsNavBeTabsSideways [
25 |
26 | self
27 | assert: [ :html | html tbsNav beTabs beTabsSideways ]
28 | gives: ''
29 | ]
30 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSAccordionExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An example for an Accordion
3 | "
4 | Class {
5 | #name : #TBSAccordionExample,
6 | #superclass : #TBSBootstrapExample,
7 | #instVars : [
8 | 'batcher',
9 | 'accordion'
10 | ],
11 | #category : 'Bootstrap-Examples-Widgets-Components'
12 | }
13 |
14 | { #category : #accessing }
15 | TBSAccordionExample class >> exampleName [
16 |
17 | ^'Accordion'
18 | ]
19 |
20 | { #category : #initialization }
21 | TBSAccordionExample >> initialize [
22 | "Initializes the receiver"
23 |
24 | super initialize.
25 | accordion := TBSAccordion new.
26 | accordion
27 | add: [:html | html text: 'Some content' ] title: 'A block';
28 | add: [:html | html text: 'Some more content' ] title: 'Item 2';
29 | add: WACounter new title: 'A component'.
30 |
31 | ]
32 |
33 | { #category : #rendering }
34 | TBSAccordionExample >> renderExampleOn: html [
35 |
36 | html render: accordion
37 |
38 | ]
39 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSNavbarExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap navbars
3 | "
4 | Class {
5 | #name : #TBSNavbarExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSNavbarExample class >> exampleName [
12 |
13 | ^'Navbar'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSNavbarExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Default navbar'.
20 |
21 | html tbsNavbar beDefault with: [
22 | html tbsNavbarBrand
23 | url: 'http://getbootstrap.com';
24 | with: 'Bootstrap'.
25 | html tbsNavbarButton: 'SignIn'].
26 |
27 | html heading level: 2; with: 'Non-nav links'.
28 | html tbsNavbar beDefault with: [
29 | html tbsNavbarHeader: [ html tbsNavbarBrand: 'Brand' ].
30 | html tbsNavbarText tbsPullRight
31 | with: [ html text: 'Signed in as '.
32 | html tbsNavbarLink: 'Mark Otto' ]]
33 |
34 | ]
35 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSPanelTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap panel
3 | "
4 | Class {
5 | #name : #TBSPanelTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSPanelTag >> beDanger [
12 |
13 | self class: 'panel-danger'
14 | ]
15 |
16 | { #category : #options }
17 | TBSPanelTag >> beDefault [
18 |
19 | self class: 'panel-default'
20 | ]
21 |
22 | { #category : #options }
23 | TBSPanelTag >> beInfo [
24 |
25 | self class: 'panel-info'
26 | ]
27 |
28 | { #category : #options }
29 | TBSPanelTag >> bePrimary [
30 |
31 | self class: 'panel-primary'
32 | ]
33 |
34 | { #category : #options }
35 | TBSPanelTag >> beSuccess [
36 |
37 | self class: 'panel-success'
38 | ]
39 |
40 | { #category : #options }
41 | TBSPanelTag >> beWarning [
42 |
43 | self class: 'panel-warning'
44 | ]
45 |
46 | { #category : #initialization }
47 | TBSPanelTag >> initialize [
48 | super initialize.
49 | self class: 'panel'
50 | ]
51 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSProgressbarTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap progress bar
3 | "
4 | Class {
5 | #name : #TBSProgressbarTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSProgressbarTag >> beDanger [
12 |
13 | self class: 'progress-bar-danger'
14 | ]
15 |
16 | { #category : #options }
17 | TBSProgressbarTag >> beInfo [
18 |
19 | self class: 'progress-bar-info'
20 | ]
21 |
22 | { #category : #options }
23 | TBSProgressbarTag >> beSuccess [
24 |
25 | self class: 'progress-bar-success'
26 | ]
27 |
28 | { #category : #options }
29 | TBSProgressbarTag >> beWarning [
30 |
31 | self class: 'progress-bar-warning'
32 | ]
33 |
34 | { #category : #initialization }
35 | TBSProgressbarTag >> initialize [
36 | super initialize.
37 | self class: 'progress-bar'
38 | ]
39 |
40 | { #category : #accessing }
41 | TBSProgressbarTag >> valueNow: anInteger [
42 |
43 | self attributeAt: 'style' put: ('width: ', anInteger greaseString, '%')
44 | ]
45 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSTableTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Boostrap styled table
3 | "
4 | Class {
5 | #name : #TBSTableTag,
6 | #superclass : #WATableTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSTableTag >> beBordered [
12 | "For borders on all sides of the table and cells.."
13 |
14 | self class: 'table-bordered'
15 | ]
16 |
17 | { #category : #options }
18 | TBSTableTag >> beCondensed [
19 | "Make tables more compact by cutting cell padding in half"
20 |
21 | self class: 'table-condensed'
22 | ]
23 |
24 | { #category : #options }
25 | TBSTableTag >> beHover [
26 | "Enable a hover state on table rows within the body."
27 |
28 | self class: 'table-hover'
29 | ]
30 |
31 | { #category : #options }
32 | TBSTableTag >> beStriped [
33 | "Add zebra-striping to any table row within the body."
34 |
35 | self class: 'table-striped'
36 | ]
37 |
38 | { #category : #initialization }
39 | TBSTableTag >> initialize [
40 | super initialize.
41 | self class: 'table'
42 | ]
43 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSLabelExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap labels
3 | "
4 | Class {
5 | #name : #TBSLabelExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSLabelExample class >> exampleName [
12 |
13 | ^'Labels'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSLabelExample >> renderExampleOn: html [
18 |
19 | html heading level:2; with: 'Example'.
20 | 1 to: 6 do: [:each | html heading
21 | level: each;
22 | with: [ html text: 'Example heading '.
23 | html tbsLabel beDefault with: 'New' ]].
24 |
25 |
26 | html heading level: 2; with: 'Available variations'.
27 | html tbsLabel beDefault; with: 'Default'. html space.
28 | html tbsLabel bePrimary; with: 'Primary'. html space.
29 | html tbsLabel beSuccess; with: 'Success'. html space.
30 | html tbsLabel beInfo; with: 'Info'. html space.
31 | html tbsLabel beWarning; with: 'Warning'. html space.
32 | html tbsLabel beDanger; with: 'Danger'.
33 | ]
34 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSLabelTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | The Bootstrap label
3 | "
4 | Class {
5 | #name : #TBSLabelTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSLabelTag >> beDanger [
12 |
13 | ^self class: 'label-danger'
14 | ]
15 |
16 | { #category : #options }
17 | TBSLabelTag >> beDefault [
18 |
19 | ^self class: 'label-default'
20 | ]
21 |
22 | { #category : #options }
23 | TBSLabelTag >> beInfo [
24 |
25 | ^self class: 'label-info'
26 | ]
27 |
28 | { #category : #options }
29 | TBSLabelTag >> bePrimary [
30 |
31 | ^self class: 'label-primary'
32 | ]
33 |
34 | { #category : #options }
35 | TBSLabelTag >> beSuccess [
36 |
37 | ^self class: 'label-success'
38 | ]
39 |
40 | { #category : #options }
41 | TBSLabelTag >> beWarning [
42 |
43 | ^self class: 'label-warning'
44 | ]
45 |
46 | { #category : #initialization }
47 | TBSLabelTag >> initialize [
48 | super initialize.
49 | self class: 'label'
50 | ]
51 |
52 | { #category : #accessing }
53 | TBSLabelTag >> tag [
54 |
55 | ^'span'
56 | ]
57 |
--------------------------------------------------------------------------------
/src/Bootstrap-Jasny/TBSNavmenuTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap navigation menu (Jasni)
3 | "
4 | Class {
5 | #name : #TBSNavmenuTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Jasny-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSNavmenuTag >> beDefault [
12 | "Creates an default navmenu."
13 |
14 | self class: 'navmenu-default'
15 | ]
16 |
17 | { #category : #options }
18 | TBSNavmenuTag >> beFixedLeft [
19 | "Creates a left fixed navmenu."
20 |
21 | self class: 'navmenu-fixed-left'
22 | ]
23 |
24 | { #category : #options }
25 | TBSNavmenuTag >> beFixedRight [
26 | "Creates a right fixed navmenu."
27 |
28 | self class: 'navmenu-fixed-right'
29 | ]
30 |
31 | { #category : #options }
32 | TBSNavmenuTag >> beInverse [
33 | "Creates an Inverse navmenu."
34 |
35 | self class: 'navmenu-inverse'
36 | ]
37 |
38 | { #category : #initialization }
39 | TBSNavmenuTag >> initialize [
40 | super initialize.
41 | self
42 | class: 'nav';
43 | class: 'navmenu'.
44 | ]
45 |
46 | { #category : #accessing }
47 | TBSNavmenuTag >> tag [
48 | ^ 'div'
49 | ]
50 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSNavbarTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap navigation bar
3 | "
4 | Class {
5 | #name : #TBSNavbarTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSNavbarTag >> beDefault [
12 | "Creates a default navbar."
13 |
14 | self class: 'navbar-default'
15 | ]
16 |
17 | { #category : #options }
18 | TBSNavbarTag >> beFixedBottom [
19 | "Creates an Fixed Bottom navbar."
20 |
21 | self class: 'navbar-fixed-bottom'
22 | ]
23 |
24 | { #category : #options }
25 | TBSNavbarTag >> beFixedTop [
26 | "Creates an Fixed Top navbar."
27 |
28 | self class: 'navbar-fixed-top'
29 | ]
30 |
31 | { #category : #options }
32 | TBSNavbarTag >> beInverse [
33 | "Creates an Inverse navbar."
34 |
35 | self class: 'navbar-inverse'
36 | ]
37 |
38 | { #category : #options }
39 | TBSNavbarTag >> beStaticTop [
40 | "Creates an Static Top navbar."
41 |
42 | self class: 'navbar-static-top'
43 | ]
44 |
45 | { #category : #initialization }
46 | TBSNavbarTag >> initialize [
47 | super initialize.
48 | self
49 | class: 'nav';
50 | class: 'navbar'
51 | ]
52 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Astares
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSTableJSONTableExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Example for http://wenzhixin.net.cn/p/bootstrap-table/docs/index.html
3 | "
4 | Class {
5 | #name : #TBSTableJSONTableExample,
6 | #superclass : #TBSBootstrapTableExample,
7 | #category : 'Bootstrap-Examples-Widgets-Table'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSTableJSONTableExample class >> exampleName [
12 |
13 | ^'Table - JSONTable'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSTableJSONTableExample >> renderExampleOn: html [
18 |
19 | html table
20 | attributeAt: 'data-toggle' put: 'table';
21 | attributeAt: 'data-url' put: TBSBootstrapTableExampleLibrary / #data1Json;
22 | attributeAt: 'data-cache' put: 'false';
23 | attributeAt: 'data-height' put: '300';
24 | with: [
25 | html tableHead: [ html tableRow: [
26 | html tableHeading
27 | attributeAt: 'data-field' put: 'id';
28 | with: 'Item ID'.
29 | html tableHeading
30 | attributeAt: 'data-field' put: 'name';
31 | with: 'Item name'.
32 | html tableHeading
33 | attributeAt: 'data-field' put: 'price';
34 | with: 'Item Price' ]].
35 |
36 | ].
37 |
38 |
39 |
40 | ]
41 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSAlertsExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap alerts
3 | "
4 | Class {
5 | #name : #TBSAlertsExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSAlertsExample class >> exampleName [
12 |
13 | ^'Alerts'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSAlertsExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Examples'.
20 |
21 | html tbsAlert
22 | beSuccess;
23 | with: [ html strong: 'Well done!'. html text: ' You successfully read this important alert message.' ].
24 |
25 | html tbsAlert
26 | beInfo;
27 | with: [ html strong: 'Heads up!'. html text: ' This alert needs your attention, but it''s not super important.' ].
28 |
29 | html tbsAlert
30 | beWarning;
31 | with: [ html strong: 'Warning!'. html text: ' Best check yo self, you''re not looking too good.' ].
32 |
33 | html tbsAlert
34 | beDanger;
35 | with: [ html strong: 'Oh snap!'. html text: ' Change a few things up and try submitting again.' ].
36 |
37 | html heading level: 2; with: 'Links in Alerts'.
38 | html text: 'to be done'.
39 | ]
40 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSNavbarToggleButton.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A TBSNavbarToggleButton is a button that only shows, when the window is to small. It creates a callapsed ""navbar-toggle"".
3 | Note: to use this, you have to connect this to the part that needs to be connected with the target and toggle.
4 |
5 | "
6 | Class {
7 | #name : #TBSNavbarToggleButton,
8 | #superclass : #WAButtonTag,
9 | #category : 'Bootstrap-Core-Canvas'
10 | }
11 |
12 | { #category : #initialization }
13 | TBSNavbarToggleButton >> initialize [
14 | super initialize.
15 | self type: 'button';
16 | class: 'navbar-toggle';
17 | class: 'collapsed';
18 | toggle: 'collapse';
19 | target: '.navbar-collapse'
20 | ]
21 |
22 | { #category : #accessing }
23 | TBSNavbarToggleButton >> target: aString [
24 | self attributes at: 'data-target' put: aString
25 | ]
26 |
27 | { #category : #accessing }
28 | TBSNavbarToggleButton >> toggle: aString [
29 | self attributes at: 'data-toggle' put: aString
30 | ]
31 |
32 | { #category : #public }
33 | TBSNavbarToggleButton >> with: aBlock [
34 | super with: [
35 | canvas span
36 | class: 'sr-only';
37 | with: aBlock.
38 | 1 to: 3 do: [ :each | canvas span class: 'icon-bar' ] ]
39 | ]
40 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSOfferTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Defines an offer for twitter bootstrap
3 | "
4 | Class {
5 | #name : #TBSOfferTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Widgets-Canvas'
8 | }
9 |
10 | { #category : #options }
11 | TBSOfferTag >> beDanger [
12 |
13 | self class: 'offer-danger'
14 | ]
15 |
16 | { #category : #options }
17 | TBSOfferTag >> beDefault [
18 |
19 | self class: 'offer-default'
20 | ]
21 |
22 | { #category : #options }
23 | TBSOfferTag >> beInfo [
24 |
25 | self class: 'offer-info'
26 | ]
27 |
28 | { #category : #options }
29 | TBSOfferTag >> bePrimary [
30 |
31 | self class: 'offer-primary'
32 | ]
33 |
34 | { #category : #options }
35 | TBSOfferTag >> beRounded [
36 |
37 | self class: 'offer-rounded'
38 | ]
39 |
40 | { #category : #options }
41 | TBSOfferTag >> beSuccess [
42 |
43 | self class: 'offer-success'
44 | ]
45 |
46 | { #category : #options }
47 | TBSOfferTag >> beWarning [
48 |
49 | self class: 'offer-warning'
50 | ]
51 |
52 | { #category : #initialization }
53 | TBSOfferTag >> initialize [
54 | super initialize.
55 | self class: 'offer'
56 | ]
57 |
58 | { #category : #accessing }
59 | TBSOfferTag >> tag [
60 |
61 | ^'div'
62 | ]
63 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/WAComponent.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WAComponent }
2 |
3 | { #category : #'*bootstrap-core' }
4 | WAComponent >> confirmError: anObject [
5 | ^self call: (TBSConfirmer dangerOn: anObject)
6 | ]
7 |
8 | { #category : #'*bootstrap-core' }
9 | WAComponent >> confirmInfo: anObject [
10 | ^self call: (TBSConfirmer on: anObject)
11 | ]
12 |
13 | { #category : #'*bootstrap-core' }
14 | WAComponent >> confirmSuccess: anObject [
15 | ^self call: (TBSConfirmer successOn: anObject)
16 | ]
17 |
18 | { #category : #'*bootstrap-core' }
19 | WAComponent >> confirmWarning: anObject [
20 | ^self call: (TBSConfirmer warningOn: anObject)
21 | ]
22 |
23 | { #category : #'*bootstrap-core' }
24 | WAComponent >> informError: anObject [
25 | self call: (TBSAlerter dangerOn: anObject)
26 | ]
27 |
28 | { #category : #'*bootstrap-core' }
29 | WAComponent >> informInfo: anObject [
30 | self call: (TBSAlerter on: anObject)
31 | ]
32 |
33 | { #category : #'*bootstrap-core' }
34 | WAComponent >> informSuccess: anObject [
35 | self call: (TBSAlerter successOn: anObject)
36 | ]
37 |
38 | { #category : #'*bootstrap-core' }
39 | WAComponent >> informWarning: anObject [
40 | self call: (TBSAlerter warningOn: anObject)
41 | ]
42 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSPaginationExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap pagination
3 | "
4 | Class {
5 | #name : #TBSPaginationExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSPaginationExample class >> exampleName [
12 |
13 | ^'Pagination'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSPaginationExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Default pagination'.
20 | html tbsPagination: [
21 | html tbsPaginationItem: [ html anchor with: [html tbsSingleLeftAngleQuote ]].
22 | 1 to: 5 do: [:each | html tbsPaginationItem: [ html anchor: each ] ].
23 | html tbsPaginationItem: [ html anchor with: [html tbsSingleRightAngleQuote ]]].
24 |
25 |
26 | html heading level: 2; with: 'Disabled and active states'.
27 | html tbsPagination: [
28 | html tbsPaginationItem beDisabled; with: [ html anchor with: [html tbsDoubleLeftAngleQuote ]].
29 | html tbsPaginationItem beActive with: [ html anchor: '1' ].
30 | 2 to: 5 do: [:each | html tbsPaginationItem: [ html anchor: each greaseString ] ].
31 | html tbsPaginationItem: [ html anchor with: [html tbsDoubleRightAngleQuote ]]].
32 | ]
33 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSThumbnailExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for bootstrap thumbnails
3 | "
4 | Class {
5 | #name : #TBSThumbnailExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSThumbnailExample class >> exampleName [
12 |
13 | ^'Thumbnails'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSThumbnailExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Default example'.
20 | html tbsRow: [
21 | 4 timesRepeat: [
22 | html tbsColumn: [ html tbsThumbnailActive: [ html image placeHolder: '100%x120' ]] mediumSize: 2.
23 | ]
24 | ].
25 |
26 |
27 | html heading level: 2; with: 'Custom content'.
28 | html tbsRow: [
29 | 3 timesRepeat: [
30 | html tbsColumn: [
31 | html tbsThumbnail: [
32 | html image placeHolder: '100%x180'. html break.
33 | html paragraph: 'Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.'.
34 | html tbsButton bePrimary with: 'Button'.
35 | html space.
36 | html tbsButton beDefault with: 'Button'.
37 | ]] mediumSize: 3.
38 | ]
39 | ]
40 |
41 |
42 |
43 |
44 | ]
45 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSJasnyButtonLabelsExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Labeled buttons from Jasni
3 | "
4 | Class {
5 | #name : #TBSJasnyButtonLabelsExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Jasny'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSJasnyButtonLabelsExample class >> exampleName [
12 |
13 | ^'Jasny Button Label'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSJasnyButtonLabelsExample >> renderExampleOn: html [
18 | "Standard button with label"
19 | html tbsButton beLabeled; beDefault; with: [
20 | html tbsButtonLabel: [ html tbsGlyphIcon iconArrowLeft ].
21 | html text: 'Left'
22 | ].
23 |
24 | html space.
25 |
26 | "Standard button with label on the right side"
27 | html tbsButton beLabeled; beDefault; with: [
28 | html text: 'Right'.
29 | html tbsButtonLabelRight: [ html tbsGlyphIcon iconArrowRight ].
30 | ].
31 |
32 | html space.
33 |
34 | "Success button with label"
35 | html tbsButton beLabeled; beSuccess; with: [
36 | html tbsButtonLabel: [ html tbsGlyphIcon iconOk ].
37 | html text: 'Success'
38 | ].
39 |
40 | html space.
41 |
42 | "Danger button with label"
43 | html tbsButton beLabeled; beDanger; with: [
44 | html tbsButtonLabel: [ html tbsGlyphIcon iconRemove ].
45 | html text: 'Danger'
46 | ].
47 |
48 |
49 | ]
50 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSJasnyNavmenuExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for Jasni navmenu
3 | "
4 | Class {
5 | #name : #TBSJasnyNavmenuExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Jasny'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSJasnyNavmenuExample class >> exampleName [
12 |
13 | ^'Jasny - Navmenu'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSJasnyNavmenuExample >> renderExampleOn: html [
18 | html text: 'Navmenu is a vertical navigation component. By default it shares it look and feel with the navmenu component.'.
19 | html heading level: 2; with: 'Default navmenu'.
20 |
21 | html tbsNavmenu beDefault; with: [
22 | html tbsNavmenuBrand: 'Brand'.
23 | html tbsNav beNavmenuNavigation; with: [
24 | html tbsNavItem beActive; with: [ html anchor: 'Link' ].
25 | html tbsNavItem: [ html anchor: 'Link' ].
26 | html tbsNavItem tbsDropdown with: [
27 | html tbsDropdownAnchor with: [html text: 'Dropdown '; tbsCaret].
28 | html tbsDropdownMenu: [
29 | html tbsDropdownMenuItem: [ html anchor: 'Action' ].
30 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
31 | html tbsDropdownMenuItem: [ html anchor: 'Something else here' ].
32 | html tbsDivider.
33 | html tbsDropdownMenuItem: [ html anchor: 'Separated link' ] ]]]].
34 |
35 |
36 | ]
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Seaside-Bootstrap
2 | Bootstrap for Seaside wrapper for Pharo
3 |
4 | **Note:** this is outdated and we only provide it for compatibility. Be aware that there are newer packages available for newer Pharo, Bootstrap and Seaside versions, see:
5 | - https://github.com/astares/Seaside-Bootstrap4
6 | - https://github.com/astares/Seaside-Bootstrap5
7 |
8 | ## Prerequisites
9 |
10 | ### Pharo 6
11 |
12 | In Pharo 6 first run:
13 |
14 | ```Smalltalk
15 | Iceberg enableMetacelloIntegration: true.
16 | IceMetacelloPharoPlatform select.
17 | ```
18 |
19 | then proceed with the load expressions given in "Installation" section.
20 |
21 | ### Pharo 7 and Pharo 8
22 |
23 | You can clone the project and run the download.sh script
24 |
25 | ```
26 | git clone https://github.com/astares/Seaside-Bootstrap.git
27 | cd Seaside-Bootstrap
28 | ./download.sh
29 | ```
30 |
31 | If you already have a Pharo 7 or later image just proceed with the load expressions given in "Installation" section.
32 |
33 | ## Installation
34 |
35 | ### Loading latest stable version using config
36 |
37 | ```Smalltalk
38 | Metacello new
39 | configuration:'Bootstrap';
40 | repository: 'github://astares/Seaside-Bootstrap:master/src';
41 | version: #stable;
42 | load
43 | ```
44 |
45 | ### Loading latest *development* version using baseline
46 |
47 | ```Smalltalk
48 | Metacello new
49 | baseline:'Bootstrap';
50 | repository: 'github://astares/Seaside-Bootstrap:master/src';
51 | load
52 | ```
53 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSTableExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for bootstrap tables
3 | "
4 | Class {
5 | #name : #TBSTableExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSTableExample class >> exampleName [
12 |
13 | ^'Tables'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSTableExample >> renderExampleOn: html [
18 |
19 | |headerBlock data tableBlock |
20 | data := #(('1' 'Mark' 'Otto' '@mdo') ('2' 'Jacob' 'Thornton' '@fat') ('3' 'Larry' 'the Bird' '@twitter')).
21 |
22 | headerBlock := [
23 | html tableHeading: '#'.
24 | html tableHeading: 'First Name'.
25 | html tableHeading: 'Last Name'.
26 | html tableHeading: 'Username' ].
27 |
28 | tableBlock := [
29 | html tableHead: (headerBlock).
30 | html tableBody: [
31 | data do: [:row | html tableRow: [ row do: [:col | html tableData: col ]]]]].
32 |
33 | html heading level: 2; with: 'Basic example'.
34 |
35 | html tbsTable: tableBlock.
36 |
37 | html heading level: 2; with: 'Striped rows'.
38 | html tbsTable
39 | beStriped;
40 | with: tableBlock.
41 |
42 | html heading level: 2; with: 'Bordered table'.
43 | html tbsTable
44 | beBordered;
45 | with: tableBlock.
46 |
47 | html heading level: 2; with: 'Hover table'.
48 | html tbsTable
49 | beHover;
50 | with: tableBlock.
51 |
52 | html heading level: 2; with: 'Condensed table'.
53 | html tbsTable
54 | beCondensed;
55 | with: tableBlock.
56 | ]
57 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSFormsExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap forms example
3 | "
4 | Class {
5 | #name : #TBSFormsExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSFormsExample class >> exampleName [
12 |
13 | ^'Forms'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSFormsExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Basic example'.
20 |
21 | html tbsFormGroup: [
22 | html label for: 'exampleInputEmail1'; with: 'Email address'.
23 | html textInput tbsFormControl; id: 'exampleInputEmail1'; placeholder: 'Enter email'].
24 |
25 | html tbsFormGroup: [
26 | html label for: 'exampleInputPassword1'; with: 'Password'.
27 | html passwordInput tbsFormControl id: 'exampleInputPassword1'; placeholder: 'Password' ].
28 |
29 | html heading level: 2; with: 'Inline form'.
30 |
31 | html tbsForm beInline; with: [
32 | html tbsFormGroup: [
33 | html label for: 'exampleInputEmail1'; class: 'sr-only'; with: 'Email address'.
34 | html textInput tbsFormControl; id: 'exampleInputEmail1'; placeholder: 'Enter email'.
35 | html space].
36 |
37 | html tbsFormGroup: [
38 | html label for: 'exampleInputPassword2'; class: 'sr-only'; with: 'Password'.
39 | html passwordInput tbsFormControl id: 'exampleInputPassword2'; placeholder: 'Password'.
40 | html space].
41 |
42 | html div class: 'checkbox'; with: [html label: [html checkbox. html text: ' Remember me' ]].
43 | ].
44 |
45 |
46 | ]
47 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBatchedListExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An example for the batched list
3 | "
4 | Class {
5 | #name : #TBSBatchedListExample,
6 | #superclass : #TBSBootstrapExample,
7 | #instVars : [
8 | 'batcher'
9 | ],
10 | #category : 'Bootstrap-Examples-Widgets-Components'
11 | }
12 |
13 | { #category : #accessing }
14 | TBSBatchedListExample class >> exampleName [
15 | ^ 'Batched List Widget'
16 | ]
17 |
18 | { #category : #accessing }
19 | TBSBatchedListExample >> children [
20 | ^ Array with: batcher
21 | ]
22 |
23 | { #category : #initialization }
24 | TBSBatchedListExample >> initialize [
25 | super initialize.
26 | batcher := TBSBatchedList new
27 | batchSize: 6;
28 | items: ($A to: $Z);
29 | yourself.
30 | ]
31 |
32 | { #category : #rendering }
33 | TBSBatchedListExample >> renderExampleOn: html [
34 | "The batcher is implemented in #initialize as
35 |
36 | batcher := TBSBatchedList new
37 | batchSize: 6;
38 | items: ($A to: $Z);
39 | yourself."
40 |
41 | html tbsRow: [
42 | html tbsColumn
43 | mediumSize: 4;
44 | with: [
45 | self renderTableOn: html.
46 | html render: batcher ] ]
47 | ]
48 |
49 | { #category : #rendering }
50 | TBSBatchedListExample >> renderTableOn: html [
51 | html tbsTable
52 | beCondensed;
53 | beStriped;
54 | with: [
55 | html tableHead: [
56 | html tableHeading: 'Character'.
57 | html tableHeading: 'ASCII Value' ].
58 | html tableBody: [
59 | (batcher batch) do: [ :char |
60 | html tableRow: [
61 | html tableData: char.
62 | html tableData: (char asInteger) ] ] ] ]
63 | ]
64 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSNavExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap navs
3 | "
4 | Class {
5 | #name : #TBSNavExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSNavExample class >> exampleName [
12 | ^'Navs'
13 | ]
14 |
15 | { #category : #rendering }
16 | TBSNavExample >> renderExampleOn: html [
17 |
18 | html heading level: 2; with: 'List'.
19 | html tbsNav: [
20 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
21 | html tbsNavItem: [ html anchor: 'Profile' ].
22 | html tbsNavItem: [ html anchor: 'Message' ]].
23 |
24 | html heading level: 2; with: 'Tabs'.
25 | html tbsNav beTabs; with: [
26 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
27 | html tbsNavItem: [ html anchor: 'Profile' ].
28 | html tbsNavItem: [ html anchor: 'Message' ]].
29 |
30 | html heading level: 2; with: 'Pills'.
31 | html tbsNav bePills; with: [
32 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
33 | html tbsNavItem: [ html anchor: 'Profile' ].
34 | html tbsNavItem: [ html anchor: 'Message' ]].
35 |
36 | html heading level: 2; with: 'Stacked Pills'.
37 | html tbsNav bePills; beStacked; with: [
38 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
39 | html tbsNavItem: [ html anchor: 'Profile' ].
40 | html tbsNavItem: [ html anchor: 'Message' ]].
41 |
42 | html heading level: 2; with: 'Disabled'.
43 | html tbsNav beTabs; with: [
44 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
45 | html tbsNavItem: [ html anchor: 'Profile' ].
46 | html tbsNavItem beDisabled; with: [ html anchor: 'Message' ]].
47 | ]
48 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSButtonDropdownExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap button dropdown examples
3 | "
4 | Class {
5 | #name : #TBSButtonDropdownExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSButtonDropdownExample class >> exampleName [
12 |
13 | ^'Button dropdowns'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSButtonDropdownExample >> renderExampleOn: html [
18 |
19 | |menu|
20 | menu := [ html tbsDropdownMenuItem: [ html anchor: 'Action' ].
21 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
22 | html tbsDropdownMenuItem: [ html anchor: 'Something else here' ].
23 | html tbsDivider.
24 | html tbsDropdownMenuItem: [ html anchor: 'Separated link' ]].
25 |
26 | html heading level: 2; with: 'Single button dropdowns'.
27 | html tbsButtonGroup: [ html tbsDropdownButton beDefault; with: [html text: 'Default '; tbsCaret]. html tbsDropdownMenu: menu; space ].
28 | html tbsButtonGroup: [ html tbsDropdownButton bePrimary; with: [html text: 'Primary '; tbsCaret]. html tbsDropdownMenu: menu; space ].
29 | html tbsButtonGroup: [ html tbsDropdownButton beSuccess; with: [html text: 'Success '; tbsCaret]. html tbsDropdownMenu: menu; space ].
30 | html tbsButtonGroup: [ html tbsDropdownButton beInfo; with: [html text: 'Info '; tbsCaret]. html tbsDropdownMenu: menu; space ].
31 | html tbsButtonGroup: [ html tbsDropdownButton beWarning; with: [html text: 'Warning '; tbsCaret]. html tbsDropdownMenu: menu; space ].
32 | html tbsButtonGroup: [ html tbsDropdownButton beDanger; with: [html text: 'Danger '; tbsCaret]. html tbsDropdownMenu: menu; space ].
33 |
34 | ]
35 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSProgressBarExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap progress bar
3 | "
4 | Class {
5 | #name : #TBSProgressBarExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSProgressBarExample class >> exampleName [
12 |
13 | ^'Progress bar'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSProgressBarExample >> renderExampleOn: html [
18 |
19 | html tbsProgress: [
20 | html tbsProgressbar
21 | valueNow: 60 ].
22 |
23 | html heading level: 2; with: 'Contextual alternatives'.
24 |
25 | html tbsProgress: [ html tbsProgressbar beSuccess; valueNow: 40 ].
26 | html tbsProgress: [ html tbsProgressbar beInfo; valueNow: 20 ].
27 | html tbsProgress: [ html tbsProgressbar beWarning; valueNow: 60 ].
28 | html tbsProgress: [ html tbsProgressbar beDanger; valueNow: 80 ].
29 |
30 | html heading level: 2; with: 'Striped'.
31 | html tbsProgress beStriped with: [ html tbsProgressbar beSuccess; valueNow: 40 ].
32 | html tbsProgress beStriped with: [ html tbsProgressbar beInfo; valueNow: 20 ].
33 | html tbsProgress beStriped with: [ html tbsProgressbar beWarning; valueNow: 60 ].
34 | html tbsProgress beStriped with: [ html tbsProgressbar beDanger; valueNow: 80 ].
35 |
36 | html heading level: 2; with: 'Animated'.
37 | html tbsProgress beAnimated with: [ html tbsProgressbar valueNow: 45 ].
38 |
39 | html heading level: 2; with: 'Stacked'.
40 | html tbsProgress: [
41 | html tbsProgressbar beSuccess; valueNow: 35.
42 | html tbsProgressbar beWarning; valueNow: 20.
43 | html tbsProgressbar beDanger; valueNow: 10
44 | ]
45 |
46 |
47 | ]
48 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/WAHtmlCanvas.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WAHtmlCanvas }
2 |
3 | { #category : #'*bootstrap-widgets' }
4 | WAHtmlCanvas >> tbsOffer [
5 | "Defines an Twitter Bootstrap offer."
6 |
7 | ^ self brush: TBSOfferTag new
8 |
9 | ]
10 |
11 | { #category : #'*bootstrap-widgets' }
12 | WAHtmlCanvas >> tbsOffer: aBlock [
13 | "Defines an Twitter Bootstrap offer."
14 |
15 | ^ self tbsOffer
16 | with: aBlock
17 |
18 | ]
19 |
20 | { #category : #'*bootstrap-widgets' }
21 | WAHtmlCanvas >> tbsOfferContent [
22 | "Defines an Twitter Bootstrap offer content."
23 |
24 | ^ self div
25 | class: 'offer-content';
26 | yourself
27 | ]
28 |
29 | { #category : #'*bootstrap-widgets' }
30 | WAHtmlCanvas >> tbsOfferContent: aBlock [
31 | "Defines an Twitter Bootstrap offer content."
32 |
33 | ^ self tbsOfferContent
34 | with: aBlock
35 |
36 | ]
37 |
38 | { #category : #'*bootstrap-widgets' }
39 | WAHtmlCanvas >> tbsOfferShape [
40 | "Defines an Twitter Bootstrap offer."
41 |
42 | ^ self div
43 | class: 'offer-shape';
44 | yourself
45 | ]
46 |
47 | { #category : #'*bootstrap-widgets' }
48 | WAHtmlCanvas >> tbsOfferShape: aBlock [
49 | "Defines an Twitter Bootstrap offer shape."
50 |
51 | ^ self tbsOfferShape
52 | with: aBlock
53 |
54 | ]
55 |
56 | { #category : #'*bootstrap-widgets' }
57 | WAHtmlCanvas >> tbsOfferShapeText [
58 | "Defines an Twitter Bootstrap offer shape text."
59 |
60 | ^ self div
61 | class: 'offer-shape-text';
62 | yourself
63 | ]
64 |
65 | { #category : #'*bootstrap-widgets' }
66 | WAHtmlCanvas >> tbsOfferShapeText: aBlock [
67 | "Defines an Twitter Bootstrap offer shape text."
68 |
69 | ^ self tbsOfferShapeText
70 | with: aBlock
71 |
72 | ]
73 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSTableTransformTableExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Transform a normal HTML table example
3 | "
4 | Class {
5 | #name : #TBSTableTransformTableExample,
6 | #superclass : #TBSBootstrapTableExample,
7 | #category : 'Bootstrap-Examples-Widgets-Table'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSTableTransformTableExample class >> exampleName [
12 |
13 | ^'Table - Transform'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSTableTransformTableExample >> renderExampleOn: html [
18 | html tbsButtonGroup with: [
19 | html tbsButton id: 'transform'; beDefault; with: [
20 | html tbsGlyphIcon iconTransfer.
21 | html span: 'Transform']].
22 |
23 | html tbsButtonGroup with: [
24 | html tbsButton id: 'destroy'; beDefault; with: [
25 | html tbsGlyphIcon iconTrash.
26 | html span: 'Destroy']].
27 |
28 | html table
29 | id: 'table-transform';
30 | attributeAt: 'data-toolbar' put: '#transform-buttons';
31 | with: [
32 | html tableHead: [ html tableRow: [ html tableHeading: 'Item ID'; tableHeading: 'Item name'; tableHeading: 'Item Price' ]].
33 | 1 to: 10 do: [:each |
34 | html tableRow: [
35 | html tableData: each asString.
36 | html tableData: 'test', each asString.
37 | html tableData: '$', each asString. ]
38 | ].
39 | ].
40 | html script: self toogleTableTransformScript
41 |
42 |
43 |
44 | ]
45 |
46 | { #category : #scripts }
47 | TBSTableTransformTableExample >> toogleTableTransformScript [
48 |
49 | ^'$(function () {
50 | var $table = $(''#table-transform'');
51 | $(''#transform'').click(function () {
52 | $table.bootstrapTable();
53 | });
54 | $(''#destroy'').click(function () {
55 | $table.bootstrapTable(''destroy'');
56 | });
57 | });'
58 | ]
59 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSButtonGroupTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A Bootstrap button group
3 | "
4 | Class {
5 | #name : #TBSButtonGroupTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #sizes }
11 | TBSButtonGroupTag >> beExtraSmall [
12 | "Creates an extra small sized button group."
13 |
14 | self beExtraSmallIf: true
15 | ]
16 |
17 | { #category : #sizes }
18 | TBSButtonGroupTag >> beExtraSmallIf: aBlock [
19 | "Creates an extra small sized button group if aBlock is true."
20 |
21 | self class: 'btn-group-xs' if: aBlock
22 | ]
23 |
24 | { #category : #sizes }
25 | TBSButtonGroupTag >> beJustified [
26 | "Creates a justified button group."
27 |
28 | self beJustifiedIf: true
29 | ]
30 |
31 | { #category : #sizes }
32 | TBSButtonGroupTag >> beJustifiedIf: aBlock [
33 | "Creates a justified button group if aBlock is true."
34 |
35 | self class: 'btn-group-justified' if: aBlock
36 | ]
37 |
38 | { #category : #sizes }
39 | TBSButtonGroupTag >> beLarge [
40 | "Creates an large sized button group."
41 |
42 | self beLargeIf: true
43 | ]
44 |
45 | { #category : #sizes }
46 | TBSButtonGroupTag >> beLargeIf: aBlock [
47 | "Creates an large sized button group if aBlock is true."
48 |
49 | self class: 'btn-group-lg' if: aBlock
50 | ]
51 |
52 | { #category : #sizes }
53 | TBSButtonGroupTag >> beSmall [
54 | "Creates an small sized button group."
55 |
56 | self beSmallIf: true
57 | ]
58 |
59 | { #category : #sizes }
60 | TBSButtonGroupTag >> beSmallIf: aBlock [
61 | "Creates a small sized button group if aBlock is true."
62 |
63 | self class: 'btn-group-sm' if: aBlock
64 | ]
65 |
66 | { #category : #accessing }
67 | TBSButtonGroupTag >> defaultStyleClass [
68 |
69 | ^'btn-group'
70 | ]
71 |
72 | { #category : #initialization }
73 | TBSButtonGroupTag >> initialize [
74 | super initialize.
75 | self class: self defaultStyleClass
76 | ]
77 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSDropdownExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap dropdown example
3 | "
4 | Class {
5 | #name : #TBSDropdownExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSDropdownExample class >> exampleName [
12 |
13 | ^'Dropdowns'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSDropdownExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Example'.
20 | html div tbsDropdown: [
21 | html tbsDropdownAnchor with: [html text: 'Dropdown '; tbsCaret].
22 | html tbsDropdownMenu: [
23 | html tbsDropdownMenuItem: [ html anchor: 'Action' ].
24 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
25 | html tbsDropdownMenuItem: [ html anchor: 'Something else here' ].
26 | html tbsDivider.
27 | html tbsDropdownMenuItem: [ html anchor: 'Separated link' ].
28 | ]].
29 |
30 |
31 | html heading level: 2; with: 'Headers'.
32 | html div tbsDropdown: [
33 | html tbsDropdownAnchor with: [html text: 'Dropdown '; tbsCaret].
34 | html tbsDropdownMenu: [
35 | html tbsDropdownHeader: 'Dropdown header'.
36 | html tbsDropdownMenuItem: [ html anchor: 'Action' ].
37 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
38 | html tbsDropdownMenuItem: [ html anchor: 'Something else here' ].
39 | html tbsDivider.
40 | html tbsDropdownHeader: 'Dropdown header'.
41 | html tbsDropdownMenuItem: [ html anchor: 'Separated link' ].
42 | ]].
43 |
44 | html heading level: 2; with: 'Disabled menu items'.
45 |
46 | html div tbsDropdown: [
47 | html tbsDropdownAnchor with: [html text: 'Dropdown '; tbsCaret].
48 | html tbsDropdownMenu: [
49 | html tbsDropdownMenuItem: [ html anchor: 'Regular Link' ].
50 | html tbsDropdownMenuItem beDisabled; with: [ html anchor: 'Disabled Action' ].
51 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
52 | ].
53 | ].
54 |
55 |
56 |
57 | ]
58 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSListGroupExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap list group example
3 | "
4 | Class {
5 | #name : #TBSListGroupExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSListGroupExample class >> exampleName [
12 |
13 | ^'List group'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSListGroupExample >> renderExampleOn: html [
18 |
19 | | customContent |
20 | html heading level: 2; with: 'Basic example'.
21 |
22 | html tbsListGroup: [
23 | html
24 | tbsListGroupItem: 'Cras justo odio';
25 | tbsListGroupItem: 'Dapibus ac facilisis in';
26 | tbsListGroupItem: 'Morbi leo risus';
27 | tbsListGroupItem: 'Porta ac consectetur ac';
28 | tbsListGroupItem: 'Vestibulum at eros' ].
29 |
30 | html heading level: 2; with: 'Badges'.
31 | html tbsListGroup: [
32 | html
33 | tbsListGroupItem: [html tbsBadge: '14'. html text: 'Cras justo odio'];
34 | tbsListGroupItem: [html tbsBadge: '2'. html text: 'Dapibus ac facilisis in'];
35 | tbsListGroupItem: [html tbsBadge: '1'. html text: 'Morbi leo risus']].
36 |
37 | html heading level: 2; with: 'Linked Items'.
38 | html tbsListGroup: [
39 | html tbsLinkifyListGroupItem beActive; with: 'Dapibus ac facilisis in'.
40 | html tbsLinkifyListGroupItem: 'Morbi leo risus'.
41 | html tbsLinkifyListGroupItem: 'Porta ac consectetur ac'.
42 | html tbsLinkifyListGroupItem: 'Vestibulum at eros' ].
43 |
44 | html heading level: 2; with: 'Custom content'.
45 | customContent := [ html tbsListGroupItemHeading level: 4; with: 'List group item heading'.
46 | html tbsListGroupItemText: 'Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.' ].
47 |
48 | html tbsListGroup: [
49 | html tbsLinkifyListGroupItem beActive; with: customContent.
50 | html tbsLinkifyListGroupItem: customContent.
51 | html tbsLinkifyListGroupItem: customContent.
52 | ]
53 |
54 | ]
55 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSBatchedList.class.st:
--------------------------------------------------------------------------------
1 | "
2 | I'm a batched list that uses a sexy Twitter Bootstrap style. See WABatchedList and TBSPaginationExample for more information.
3 | "
4 | Class {
5 | #name : #TBSBatchedList,
6 | #superclass : #WABatchedList,
7 | #category : 'Bootstrap-Widgets-Components'
8 | }
9 |
10 | { #category : #rendering }
11 | TBSBatchedList >> renderContentOn: html [
12 | self maxPages = 0
13 | ifTrue: [ ^ self ].
14 | html tbsPagination: [
15 | self renderPreviousOn: html.
16 | self renderPagesOn: html.
17 | self renderNextOn: html ]
18 | ]
19 |
20 | { #category : #rendering }
21 | TBSBatchedList >> renderNextOn: html [
22 | | item |
23 | item := html tbsPaginationItem.
24 | self isOnLastPage ifTrue: [ item beDisabled ].
25 | item with: [
26 | html anchor
27 | callback: [ self nextPage ];
28 | with: [ html tbsSingleRightAngleQuote ] ].
29 | item := html tbsPaginationItem.
30 | self isOnLastPage ifTrue: [ item beDisabled ].
31 | item with: [
32 | html anchor
33 | callback: [ self currentPage: self maxPages ];
34 | with: [ html tbsDoubleRightAngleQuote ] ].
35 |
36 | ]
37 |
38 | { #category : #rendering }
39 | TBSBatchedList >> renderPagesOn: html [
40 | | item |
41 | self pageRange
42 | do: [ :index |
43 | item := html tbsPaginationItem.
44 | (self currentPage = index)
45 | ifTrue: [ item beActive. item beDisabled ].
46 | item with: [
47 | html anchor
48 | callback: [ self currentPage: index ];
49 | with: index ] ]
50 | ]
51 |
52 | { #category : #rendering }
53 | TBSBatchedList >> renderPreviousOn: html [
54 | | item |
55 | item := html tbsPaginationItem.
56 | self isOnFirstPage ifTrue: [ item beDisabled ].
57 | item with: [
58 | html anchor
59 | callback: [ self currentPage: 1 ];
60 | with: [ html tbsDoubleLeftAngleQuote ] ].
61 | item := html tbsPaginationItem.
62 | self isOnFirstPage ifTrue: [ item beDisabled ].
63 | item with: [
64 | html anchor
65 | callback: [ self previousPage ];
66 | with: [ html tbsSingleLeftAngleQuote ] ]
67 | ]
68 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSLayoutColumnTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | A boostrap layout column
3 | "
4 | Class {
5 | #name : #TBSLayoutColumnTag,
6 | #superclass : #TBSGenericTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #sizes }
11 | TBSLayoutColumnTag >> extraSmallSize: anInteger [
12 |
13 | self class: 'col-xs-', anInteger greaseString
14 |
15 |
16 | ]
17 |
18 | { #category : #positioning }
19 | TBSLayoutColumnTag >> largeOffset: anInteger [
20 |
21 | self class: 'col-lg-offset-', anInteger greaseString
22 |
23 |
24 | ]
25 |
26 | { #category : #positioning }
27 | TBSLayoutColumnTag >> largePull: anInteger [
28 |
29 | self class: 'col-lg-pull-', anInteger greaseString
30 |
31 |
32 | ]
33 |
34 | { #category : #positioning }
35 | TBSLayoutColumnTag >> largePush: anInteger [
36 |
37 | self class: 'col-lg-push-', anInteger greaseString
38 |
39 |
40 | ]
41 |
42 | { #category : #sizes }
43 | TBSLayoutColumnTag >> largeSize: anInteger [
44 |
45 | self class: 'col-lg-', anInteger greaseString
46 |
47 |
48 | ]
49 |
50 | { #category : #positioning }
51 | TBSLayoutColumnTag >> mediumOffset: anInteger [
52 |
53 | self class: 'col-md-offset-', anInteger greaseString
54 |
55 |
56 | ]
57 |
58 | { #category : #positioning }
59 | TBSLayoutColumnTag >> mediumPull: anInteger [
60 |
61 | self class: 'col-md-pull-', anInteger greaseString
62 |
63 |
64 | ]
65 |
66 | { #category : #positioning }
67 | TBSLayoutColumnTag >> mediumPush: anInteger [
68 |
69 | self class: 'col-md-push-', anInteger greaseString
70 |
71 |
72 | ]
73 |
74 | { #category : #sizes }
75 | TBSLayoutColumnTag >> mediumSize: anInteger [
76 |
77 | self class: 'col-md-', anInteger greaseString
78 |
79 |
80 | ]
81 |
82 | { #category : #positioning }
83 | TBSLayoutColumnTag >> smallOffset: anInteger [
84 |
85 | self class: 'col-sm-offset-', anInteger greaseString
86 |
87 |
88 | ]
89 |
90 | { #category : #sizes }
91 | TBSLayoutColumnTag >> smallSize: anInteger [
92 |
93 | self class: 'col-sm-', anInteger greaseString
94 |
95 |
96 | ]
97 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSAccordion.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An accordion
3 | "
4 | Class {
5 | #name : #TBSAccordion,
6 | #superclass : #WACanvasWidget,
7 | #instVars : [
8 | 'items',
9 | 'id'
10 | ],
11 | #category : 'Bootstrap-Widgets-Components'
12 | }
13 |
14 | { #category : #accessing }
15 | TBSAccordion >> add: aComponentOrOneArgumentBlock title: aString [
16 | "Add the given Seaside component to the accordion with the given title.
17 | As an alternative a block can be given taking the html renderer as argument"
18 |
19 | self addItem: (self itemClass
20 | on: aComponentOrOneArgumentBlock
21 | title: aString
22 | in: self)
23 | ]
24 |
25 | { #category : #accessing }
26 | TBSAccordion >> addItem: anAccordionItem [
27 |
28 | self items add: anAccordionItem
29 | ]
30 |
31 | { #category : #accessing }
32 | TBSAccordion >> children [
33 |
34 | ^items
35 | ]
36 |
37 | { #category : #accessing }
38 | TBSAccordion >> id [
39 | ^id
40 | ]
41 |
42 | { #category : #accessing }
43 | TBSAccordion >> id: anId [
44 |
45 | id := anId
46 | ]
47 |
48 | { #category : #initialization }
49 | TBSAccordion >> initialize [
50 | super initialize.
51 | items := OrderedCollection new
52 | ]
53 |
54 | { #category : #'private - accessing' }
55 | TBSAccordion >> itemClass [
56 | "Return the item class. Can be overriden by subclasses"
57 |
58 | ^TBSAccordionItem
59 | ]
60 |
61 | { #category : #accessing }
62 | TBSAccordion >> items [
63 |
64 | ^items
65 | ]
66 |
67 | { #category : #rendering }
68 | TBSAccordion >> renderContentOn: html [
69 | self id ifNil: [ self id: html nextId ].
70 |
71 | html tbsPanelGroup
72 | id: self id asSymbol;
73 | with: [
74 | self items do: [:item |
75 | self renderItem: item on: html ]]
76 | ]
77 |
78 | { #category : #'private - rendering' }
79 | TBSAccordion >> renderItem: item on: html [
80 |
81 | html tbsPanel
82 | beDefault;
83 | with: [
84 | html render: item ].
85 |
86 | ]
87 |
88 | { #category : #'private - rendering' }
89 | TBSAccordion >> uniqueIdStringForItem: item [
90 |
91 | ^'item', (items hash) asString
92 | ]
93 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSModalExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap modal example
3 | "
4 | Class {
5 | #name : #TBSModalExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSModalExample class >> exampleName [
12 |
13 | ^'Modal example'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSModalExample >> renderExample2On: html [
18 |
19 | html tbsModal: [
20 | html tbsModalDialog: [
21 | html tbsModalContent: [
22 | html tbsModalHeader: [ ]
23 | ]
24 | ]
25 | ].
26 |
27 |
28 | html html: '
29 | Launch demo modal
30 |
31 |
32 |
33 |
34 |
35 |
39 |
40 | ...
41 |
42 |
46 |
47 |
48 |
'.
49 |
50 | ]
51 |
52 | { #category : #rendering }
53 | TBSModalExample >> renderExampleOn: html [
54 |
55 | html html: 'Launch demo modal'.
56 |
57 | html tbsModal id: 'myModal'; with: [
58 | html tbsModalDialog: [
59 | html tbsModalContent: [
60 | html tbsModalHeader: [
61 | html tbsModalCloseIcon.
62 | html tbsModalTitle level: 4; with: 'Modal title 2'
63 | ].
64 | html tbsModalBody: [ ] .
65 | html tbsModalFooter: [
66 | html tbsButton: 'Close'.
67 | html tbsButton bePrimary; with: 'Save changes'
68 | ]
69 | ]
70 | ]
71 | ].
72 |
73 |
74 |
75 | ]
76 |
--------------------------------------------------------------------------------
/src/Bootstrap-Jasny/WAHtmlCanvas.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WAHtmlCanvas }
2 |
3 | { #category : #'*Bootstrap-Jasny-Canvas' }
4 | WAHtmlCanvas >> tbsButtonLabel [
5 |
6 | ^(self span)
7 | class: 'btn-label';
8 | yourself
9 | ]
10 |
11 | { #category : #'*Bootstrap-Jasny-Canvas' }
12 | WAHtmlCanvas >> tbsButtonLabel: aBlock [
13 |
14 | ^self tbsButtonLabel
15 | with: aBlock
16 |
17 | ]
18 |
19 | { #category : #'*Bootstrap-Jasny-Canvas' }
20 | WAHtmlCanvas >> tbsButtonLabelRight [
21 |
22 | ^(self span)
23 | class: 'btn-label';
24 | class: 'btn-label-right';
25 | yourself
26 | ]
27 |
28 | { #category : #'*Bootstrap-Jasny-Canvas' }
29 | WAHtmlCanvas >> tbsButtonLabelRight: aBlock [
30 |
31 | ^self tbsButtonLabelRight
32 | with: aBlock
33 |
34 | ]
35 |
36 | { #category : #'*Bootstrap-Jasny-Canvas' }
37 | WAHtmlCanvas >> tbsContainerSmooth [
38 | "Provides a container to use the same max-width for all viewport sizes. This means that the container size won't jump at media query breakpoints."
39 |
40 | ^ self div
41 | class: 'container-smooth'
42 | ]
43 |
44 | { #category : #'*Bootstrap-Jasny-Canvas' }
45 | WAHtmlCanvas >> tbsContainerSmooth: aBlock [
46 | "Provides a container to use the same max-width for all viewport sizes. This means that the container size won't jump at media query breakpoints."
47 |
48 | ^ self tbsContainerSmooth
49 | with: aBlock
50 |
51 | ]
52 |
53 | { #category : #'*Bootstrap-Jasny-Canvas' }
54 | WAHtmlCanvas >> tbsNavmenu [
55 | "Defines an Twitter Bootstrap navigation menu."
56 |
57 | ^self brush: TBSNavmenuTag new
58 |
59 | ]
60 |
61 | { #category : #'*Bootstrap-Jasny-Canvas' }
62 | WAHtmlCanvas >> tbsNavmenu: aBlock [
63 | "Defines an Twitter Bootstrap navigation menu."
64 |
65 | ^ self tbsNavmenu
66 | with: aBlock
67 | ]
68 |
69 | { #category : #'*Bootstrap-Jasny-Canvas' }
70 | WAHtmlCanvas >> tbsNavmenuBrand [
71 | "Create a bootstrap navigation menu brand."
72 |
73 | ^ self anchor
74 | class: 'navmenu-brand';
75 | yourself
76 |
77 | ]
78 |
79 | { #category : #'*Bootstrap-Jasny-Canvas' }
80 | WAHtmlCanvas >> tbsNavmenuBrand: aBlock [
81 | "Defines an Jasni navigation menu brand"
82 |
83 | ^ self tbsNavmenuBrand
84 | with: aBlock
85 | ]
86 |
--------------------------------------------------------------------------------
/src/BaselineOfBootstrap/BaselineOfBootstrap.class.st:
--------------------------------------------------------------------------------
1 | "
2 | The BaselineOf for Seaside Bootstrap for Pharo [https://github.com/astares/Seaside-Bootstrap5](https://github.com/astares/Seaside-Bootstrap5)
3 | "
4 | Class {
5 | #name : #BaselineOfBootstrap,
6 | #superclass : #BaselineOf,
7 | #category : #BaselineOfBootstrap
8 | }
9 |
10 | { #category : #baselines }
11 | BaselineOfBootstrap >> baseline: spec [
12 |
13 |
14 | spec for: #'pharo6.x' do: [
15 | spec preLoadDoIt: #preLoad61.
16 | self
17 | seaside3: spec;
18 | bootstrap: spec ].
19 |
20 | spec for: #'common' do: [
21 | self
22 | seaside3: spec;
23 | bootstrap: spec ]
24 | ]
25 |
26 | { #category : #baselines }
27 | BaselineOfBootstrap >> bootstrap: spec [
28 |
29 | spec
30 | package: 'Bootstrap-Core' with: [
31 | spec requires: #('Seaside3' ). ];
32 | package: 'Bootstrap-Widgets' with: [
33 | spec requires: #('Bootstrap-Core' ). ];
34 | package: 'Bootstrap-Tests-Core' with: [
35 | spec requires: #('Bootstrap-Core' ). ];
36 | package: 'Bootstrap-Tests-Widgets' with: [
37 | spec requires: #('Bootstrap-Widgets' ). ];
38 | package: 'Bootstrap-Jasny';
39 | package: 'Bootstrap-Examples' with: [
40 | spec requires: #('Bootstrap-Core' 'Bootstrap-Widgets' 'Bootstrap-Jasny' ). ];
41 | package: 'Bootstrap-Tests-Jasny' with: [
42 | spec requires: #('Bootstrap-Jasny' ). ].
43 | spec
44 | group: 'Core' with: #('Bootstrap-Core' );
45 | group: 'Widgets' with: #('Bootstrap-Widgets' );
46 | group: 'Tests' with: #('Bootstrap-Tests-Core' 'Bootstrap-Tests-Widgets' 'Bootstrap-Tests-Jasny' );
47 | group: 'Examples' with: #('Bootstrap-Examples' );
48 | group: 'Jasny' with: #('Bootstrap-Jasny' );
49 | group: 'default' with: #('Core' 'Widgets' 'Jasny' 'Tests' 'Examples' )
50 | ]
51 |
52 | { #category : #baselines }
53 | BaselineOfBootstrap >> preLoad61 [
54 |
55 | Iceberg enableMetacelloIntegration: true.
56 | IceMetacelloPharoPlatform select
57 | ]
58 |
59 | { #category : #'private - subspecs' }
60 | BaselineOfBootstrap >> seaside3: spec [
61 | spec
62 | baseline: 'Seaside3'
63 | with: [ spec
64 | loads: #('default' 'REST');
65 | repository: 'github://SeasideSt/Seaside:master/repository' ]
66 | ]
67 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSButtonGroupExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap button group examples
3 | "
4 | Class {
5 | #name : #TBSButtonGroupExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSButtonGroupExample class >> exampleName [
12 |
13 | ^'Button groups'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSButtonGroupExample >> renderExampleOn: html [
18 |
19 | html tbsButtonGroup: [
20 | html tbsButton beDefault; with: 'Left'.
21 | html tbsButton beDefault; with: 'Middle'.
22 | html tbsButton beDefault; with: 'Right' ].
23 |
24 | html heading level: 3; with: 'Button toolbar'.
25 | html tbsButtonToolbar: [
26 | html tbsButtonGroup: [
27 | html tbsButton beDefault; with: '1'.
28 | html tbsButton beDefault; with: '2'.
29 | html tbsButton beDefault; with: '3'.
30 | html tbsButton beDefault; with: '4'].
31 | html tbsButtonGroup: [
32 | html tbsButton beDefault; with: '5'.
33 | html tbsButton beDefault; with: '6'.
34 | html tbsButton beDefault; with: '7'].
35 | html tbsButtonGroup: [
36 | html tbsButton beDefault; with: '8']].
37 |
38 | html heading level: 3; with: 'Button toolbar'.
39 | html tbsButtonGroup beLarge with: [
40 | html tbsButton beDefault; with: 'Left'.
41 | html tbsButton beDefault; with: 'Middle'.
42 | html tbsButton beDefault; with: 'Right'].
43 | html break; break.
44 | html tbsButtonGroup: [
45 | html tbsButton beDefault; with: 'Left'.
46 | html tbsButton beDefault; with: 'Middle'.
47 | html tbsButton beDefault; with: 'Right'].
48 | html break; break.
49 | html tbsButtonGroup beSmall with: [
50 | html tbsButton beDefault; with: 'Left'.
51 | html tbsButton beDefault; with: 'Middle'.
52 | html tbsButton beDefault; with: 'Right'].
53 | html break; break.
54 | html tbsButtonGroup beExtraSmall with: [
55 | html tbsButton beDefault; with: 'Left'.
56 | html tbsButton beDefault; with: 'Middle'.
57 | html tbsButton beDefault; with: 'Right'].
58 | html heading level: 3; with: 'Vertical button group'.
59 | html tbsButtonGroupVertical: [
60 | html tbsButton beDefault; with: 'Left'.
61 | html tbsButton beDefault; with: 'Middle'.
62 | html tbsButton beDefault; with: 'Right'].
63 | ]
64 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSImageExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap image support
3 | "
4 | Class {
5 | #name : #TBSImageExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSImageExample class >> exampleName [
12 |
13 | ^'Images'
14 | ]
15 |
16 | { #category : #private }
17 | TBSImageExample >> dataImage140x140 [
18 |
19 | ^'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAACMCAYAAACuwEE+AAAErUlEQVR4Xu3YwStscRjG8d8QQnZEFkqyY6NE/n0rlOxkS1ZqrCiFe/udOtPcue6YJ889Gc93Vtz7eo/3eT/9zjl6/X7/V+FDAhMm0APMhElR1iQAGCBICQBGiotiwGBASgAwUlwUAwYDUgKAkeKiGDAYkBIAjBQXxYDBgJQAYKS4KAYMBqQEACPFRTFgMCAlABgpLooBgwEpAcBIcVEMGAxICQBGiotiwGBASgAwUlwUAwYDUgKAkeKiGDAYkBIAjBQXxYDBgJQAYKS4KAYMBqQEACPFRTFgMCAlABgpLooBgwEpAcBIcVEMGAxICQBGiotiwGBASgAwUlwUAwYDUgKAkeKiGDAYkBIAjBQXxYDBgJQAYKS4KAYMBqQEACPFRTFgMCAlABgpLooBgwEpAcBIcVEMGAxICQBGiotiwGBASgAwUlwUAwYDUgKAkeKiGDAYkBIAjBQXxYDBgJQAYKS4KAYMBqQEACPFRTFgMCAlABgpLooBgwEpgakH8/7+Xs7Ozsrz83M5OTkpi4uLfwRwd3dXbm5uyvr6etnf32/+r9/vl6urq1J/tn729vbKxsbGRMF1fb2JfqkOi6YazOvrazk9PS1vb2+l1+v9BaZd7tPT0wBM+zNLS0vl6OioXF5eNtjq13Nzc2Oj7/p6HTqY+FJTC2Z4eXXaj8BcX1+Xh4eHUmvX1taaE6Y9cba3t8vOzs7g+3rKzM/PNyfP8vJyA6j+/P39fXMCra6uDnC6rjfpqTbxNjsonGowFxcX5eDgYHBKDN+S2tvO1tZWub29/RRMC6ieOI+Pj+X4+Licn5+X9iSq6P7H9TrYsfUSUwumTeGjZ4r232ZmZsru7m5zarQnTHtqjJ4w7feT3naGn5m+cj3rNjto9iPBDN9K2tvMZ7ekFkzNvJ4y9YQaflAeB/Sr1+tgz7ZL/DgwCwsLzVtTfdAd/aysrJTNzc3mremjZ5j6TNHeyuoD8MvLy19vUKMn2levZ9tkR41+HJjR1+oWQHvCjHtLmp2dbbDVt67Dw8PmpKlfD79BffZarVzvs7eyjgxIl4kDM+7vMP96vhm+Nalgxl1P2tQ3KZ56MN8kx5hfAzAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gwKGE+OMV0AE7Nqz6CA8eQY0wUwMav2DAoYT44xXQATs2rPoIDx5BjTBTAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gwKGE+OMV0AE7Nqz6CA8eQY0wUwMav2DAoYT44xXQATs2rPoIDx5BjTBTAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gwKGE+OMV0AE7Nqz6CA8eQY0wUwMav2DAoYT44xXQATs2rPoIDx5BjTBTAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gwKGE+OMV0AE7Nqz6CA8eQY0wUwMav2DAoYT44xXQATs2rPoIDx5BjTBTAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gwKGE+OMV0AE7Nqz6CA8eQY0wUwMav2DAoYT44xXQATs2rPoIDx5BjTBTAxq/YMChhPjjFdABOzas+ggPHkGNMFMDGr9gz6G1HzSbXtC7t7AAAAAElFTkSuQmCC'
20 | ]
21 |
22 | { #category : #rendering }
23 | TBSImageExample >> renderExampleOn: html [
24 |
25 | html tbsImage
26 | beRounded;
27 | url: self dataImage140x140.
28 |
29 | html tbsImage
30 | beCircle;
31 | url: self dataImage140x140.
32 |
33 | html tbsImage
34 | beThumbnail;
35 | url: self dataImage140x140.
36 |
37 | ]
38 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSVerticalTabsExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An example for vertical tabs (see also https://github.com/dbtek/bootstrap-vertical-tabs)
3 | "
4 | Class {
5 | #name : #TBSVerticalTabsExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Widgets-VerticalTabs'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSVerticalTabsExample class >> exampleName [
12 |
13 | ^'Vertical Tabs'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSVerticalTabsExample >> renderExampleOn: html [
18 | html tbsRow: [
19 | html tbsColumn smallSize: 6; with: [
20 | html heading level: 3; with: 'Left Tabs'.
21 | html horizontalRule.
22 | html tbsColumn extraSmallSize: 3; with: [
23 | html tbsNav beTabs; beTabsLeft; with: [
24 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
25 | html tbsNavItem: [ html anchor: 'Profile' ].
26 | html tbsNavItem: [ html anchor: 'Messages' ].
27 | html tbsNavItem: [ html anchor: 'Settings' ]]]].
28 |
29 | html tbsColumn smallSize: 6; with: [
30 | html heading level: 3; with: 'Right Tabs'.
31 | html horizontalRule.
32 | html tbsColumn extraSmallSize: 3; with: [
33 | html tbsNav beTabs; beTabsRight; with: [
34 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
35 | html tbsNavItem: [ html anchor: 'Profile' ].
36 | html tbsNavItem: [ html anchor: 'Messages' ].
37 | html tbsNavItem: [ html anchor: 'Settings' ]]]].
38 |
39 | html tbsColumn smallSize: 6; with: [
40 | html heading level: 3; with: 'Left Tabs - Sideways'.
41 | html horizontalRule.
42 | html tbsColumn extraSmallSize: 3; with: [
43 | html tbsNav beTabs; beTabsLeft; beTabsSideways; with: [
44 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
45 | html tbsNavItem: [ html anchor: 'Profile' ].
46 | html tbsNavItem: [ html anchor: 'Messages' ].
47 | html tbsNavItem: [ html anchor: 'Settings' ]]]].
48 |
49 | html tbsColumn smallSize: 6; with: [
50 | html heading level: 3; with: 'Right Tabs - Sideways'.
51 | html horizontalRule.
52 | html tbsColumn extraSmallSize: 3; with: [
53 | html tbsNav beTabs; beTabsRight; beTabsSideways; with: [
54 | html tbsNavItem beActive; with: [ html anchor: 'Home' ].
55 | html tbsNavItem: [ html anchor: 'Profile' ].
56 | html tbsNavItem: [ html anchor: 'Messages' ].
57 | html tbsNavItem: [ html anchor: 'Settings' ]]]].
58 |
59 | ].
60 |
61 |
62 | ]
63 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSExampleBrowser.class.st:
--------------------------------------------------------------------------------
1 | "
2 | The examples browser
3 | "
4 | Class {
5 | #name : #TBSExampleBrowser,
6 | #superclass : #WAComponent,
7 | #instVars : [
8 | 'currentExample'
9 | ],
10 | #category : 'Bootstrap-Examples-Browser'
11 | }
12 |
13 | { #category : #accessing }
14 | TBSExampleBrowser >> allExamples [
15 | ^(TBSBootstrapExample allSubclasses
16 | select: [:ea| ea isAbstract not ])
17 | sort: [:a :b | a name <= b name ]
18 | ]
19 |
20 | { #category : #accessing }
21 | TBSExampleBrowser >> children [
22 |
23 | ^Array with: currentExample
24 | ]
25 |
26 | { #category : #hooks }
27 | TBSExampleBrowser >> initialRequest: request [
28 | | exampleName |
29 | super initialRequest: request.
30 | exampleName := request url path last.
31 | currentExample :=
32 | (self allExamples
33 | detect: [ :each |
34 | each exampleName = exampleName ]
35 | ifNone: [ self allExamples first ]) new
36 | ]
37 |
38 | { #category : #initialization }
39 | TBSExampleBrowser >> initialize [
40 | super initialize.
41 | currentExample := self allExamples first new.
42 | ]
43 |
44 | { #category : #accessing }
45 | TBSExampleBrowser >> navigateToExample: example [
46 |
47 | currentExample := example
48 | ]
49 |
50 | { #category : #rendering }
51 | TBSExampleBrowser >> renderContentOn: html [
52 |
53 | html tbsRow
54 | "showGrid;"
55 | with: [
56 | html tbsColumn: [ self renderNavigationOn: html ] mediumSize: 2.
57 | html tbsColumn: [ self renderExampleOn: html ] mediumSize: 10.
58 | ]
59 | ]
60 |
61 | { #category : #rendering }
62 | TBSExampleBrowser >> renderExampleOn: html [
63 |
64 | currentExample ifNotNil: [
65 | currentExample renderOn: html.
66 | html break;break.
67 | html heading: 'Smalltalk source code'; horizontalRule.
68 | html textArea style: 'width: 100%; height: 400px'; text: (currentExample class methodNamed: #renderExampleOn:) sourceCode.
69 | ].
70 |
71 | ]
72 |
73 | { #category : #rendering }
74 | TBSExampleBrowser >> renderNavigationOn: html [
75 |
76 | |examples item|
77 | examples := self allExamples.
78 | html form: [
79 | html tbsListGroup: [
80 | examples do: [:ex |
81 | item := html tbsLinkifyListGroupItem.
82 | currentExample class = ex ifTrue: [ item beActive ].
83 | item callback: [ self navigateToExample: ex new ];
84 | with: ex exampleName ]] ]
85 | ]
86 |
87 | { #category : #updating }
88 | TBSExampleBrowser >> updateUrl: url [
89 | super updateUrl: url.
90 | url addToPath: '/browser'; addToPath: currentExample class exampleName
91 | ]
92 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSVerticalTabsDeploymentLibrary.class.st:
--------------------------------------------------------------------------------
1 | "
2 | For deployment, see https://github.com/dbtek/bootstrap-vertical-tabs
3 | "
4 | Class {
5 | #name : #TBSVerticalTabsDeploymentLibrary,
6 | #superclass : #TBSVerticalTabsFileLibrary,
7 | #category : 'Bootstrap-Widgets-Libraries'
8 | }
9 |
10 | { #category : #'uploaded metadata' }
11 | TBSVerticalTabsDeploymentLibrary >> bootstrapverticaltabsminCss [
12 | ^ WAFileLibraryResource
13 | filepath: 'bootstrap.vertical-tabs.min.css'
14 | mimeType: (WAMimeType main: 'text' sub: 'css')
15 | cacheDuration: (Duration days: 0 hours: 0 minutes: 30 seconds: 0)
16 | contents: (GRDelayedSend receiver: self selector: #bootstrapverticaltabsminCssContent)
17 | ]
18 |
19 | { #category : #uploaded }
20 | TBSVerticalTabsDeploymentLibrary >> bootstrapverticaltabsminCssContent [
21 | ^ '/*!
22 | * bootstrap-vertical-tabs - v1.1.0
23 | * https://dbtek.github.io/bootstrap-vertical-tabs
24 | * 2014-07-24
25 | * Copyright (c) 2014 İsmail Demirbilek
26 | * License: MIT
27 | */
28 |
29 | .tabs-left,.tabs-right{border-bottom:none;padding-top:2px}.tabs-left{border-right:1px solid #ddd}.tabs-right{border-left:1px solid #ddd}.tabs-left>li,.tabs-right>li{float:none;margin-bottom:2px}.tabs-left>li{margin-right:-1px}.tabs-right>li{margin-left:-1px}.tabs-left>li.active>a,.tabs-left>li.active>a:focus,.tabs-left>li.active>a:hover{border-bottom-color:#ddd;border-right-color:transparent}.tabs-right>li.active>a,.tabs-right>li.active>a:focus,.tabs-right>li.active>a:hover{border-bottom:1px solid #ddd;border-left-color:transparent}.tabs-left>li>a{border-radius:4px 0 0 4px;margin-right:0;display:block}.tabs-right>li>a{border-radius:0 4px 4px 0;margin-right:0}.sideways{margin-top:50px;border:none;position:relative}.sideways>li{height:20px;width:120px;margin-bottom:100px}.sideways>li>a{border-bottom:1px solid #ddd;border-right-color:transparent;text-align:center;border-radius:4px 4px 0 0}.sideways>li.active>a,.sideways>li.active>a:focus,.sideways>li.active>a:hover{border-bottom-color:transparent;border-right-color:#ddd;border-left-color:#ddd}.sideways.tabs-left{left:-50px}.sideways.tabs-right{right:-50px}.sideways.tabs-right>li{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.sideways.tabs-left>li{-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}'
30 | ]
31 |
32 | { #category : #accessing }
33 | TBSVerticalTabsDeploymentLibrary >> selectorsToInclude [
34 | ^ #(bootstrapverticaltabsminCss)
35 | ]
36 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSAlerter.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An alerter component
3 | "
4 | Class {
5 | #name : #TBSAlerter,
6 | #superclass : #WAComponent,
7 | #instVars : [
8 | 'text',
9 | 'state'
10 | ],
11 | #category : 'Bootstrap-Core-Component'
12 | }
13 |
14 | { #category : #'instance creation' }
15 | TBSAlerter class >> dangerOn: aText [
16 | ^(self on: aText)
17 | beDanger;
18 | yourself
19 | ]
20 |
21 | { #category : #'instance creation' }
22 | TBSAlerter class >> on: aText [
23 | ^self new
24 | text: aText;
25 | yourself
26 | ]
27 |
28 | { #category : #'instance creation' }
29 | TBSAlerter class >> successOn: aText [
30 | ^(self on: aText)
31 | beSuccess;
32 | yourself
33 | ]
34 |
35 | { #category : #'instance creation' }
36 | TBSAlerter class >> warningOn: aText [
37 | ^(self on: aText)
38 | beWarning;
39 | yourself
40 | ]
41 |
42 | { #category : #accessing }
43 | TBSAlerter >> beDanger [
44 | self state: #danger
45 | ]
46 |
47 | { #category : #accessing }
48 | TBSAlerter >> beSuccess [
49 | self state: #success
50 | ]
51 |
52 | { #category : #accessing }
53 | TBSAlerter >> beWarning [
54 | self state: #warning
55 | ]
56 |
57 | { #category : #testing }
58 | TBSAlerter >> isDanger [
59 | ^self state = #danger
60 | ]
61 |
62 | { #category : #testing }
63 | TBSAlerter >> isSuccess [
64 | ^self state = #success
65 | ]
66 |
67 | { #category : #testing }
68 | TBSAlerter >> isWarning [
69 | ^self state = #warning
70 | ]
71 |
72 | { #category : #actions }
73 | TBSAlerter >> ok [
74 | self answer
75 | ]
76 |
77 | { #category : #rendering }
78 | TBSAlerter >> renderButtonsOn: canvas [
79 | canvas tbsButton on: #ok of: self
80 | ]
81 |
82 | { #category : #rendering }
83 | TBSAlerter >> renderContentOn: canvas [
84 | self renderMessageOn: canvas.
85 | canvas form: [
86 | self renderButtonsOn: canvas ]
87 | ]
88 |
89 | { #category : #rendering }
90 | TBSAlerter >> renderMessageOn: canvas [
91 | | tag |
92 | tag := canvas tbsAlert.
93 | self isSuccess ifTrue: [ tag beSuccess ].
94 | self isWarning ifTrue: [ tag beWarning ].
95 | self isDanger ifTrue: [ tag beDanger ].
96 | tag with: self text
97 | ]
98 |
99 | { #category : #accessing }
100 | TBSAlerter >> state [
101 | ^ state
102 | ]
103 |
104 | { #category : #accessing }
105 | TBSAlerter >> state: aSymbol [
106 | state := aSymbol
107 | ]
108 |
109 | { #category : #accessing }
110 | TBSAlerter >> text [
111 | ^ text
112 | ]
113 |
114 | { #category : #accessing }
115 | TBSAlerter >> text: anObject [
116 | text := anObject
117 | ]
118 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSInputGroupExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap input groups
3 | "
4 | Class {
5 | #name : #TBSInputGroupExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSInputGroupExample class >> exampleName [
12 |
13 | ^'Input groups'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSInputGroupExample >> renderExampleOn: html [
18 |
19 | |menu|
20 | menu := [ html tbsDropdownMenuItem: [ html anchor: 'Action' ].
21 | html tbsDropdownMenuItem: [ html anchor: 'Another Action' ].
22 | html tbsDropdownMenuItem: [ html anchor: 'Something else here' ].
23 | html tbsDivider.
24 | html tbsDropdownMenuItem: [ html anchor: 'Separated link' ]].
25 |
26 | html heading level: 2; with: 'Basic example'.
27 |
28 | html tbsInputGroup: [
29 | html tbsInputGroupAddOn: '@'.
30 | html textInput
31 | tbsFormControl;
32 | placeholder: 'Username' ].
33 |
34 | html break.
35 | html tbsInputGroup: [
36 | html textInput tbsFormControl.
37 | html tbsInputGroupAddOn: '.00'].
38 |
39 | html break.
40 | html tbsInputGroup: [
41 | html tbsInputGroupAddOn: '$'.
42 | html textInput tbsFormControl.
43 | html tbsInputGroupAddOn: '.00'].
44 |
45 | html heading level: 2; with: 'Sizes'.
46 |
47 | html tbsInputGroup beLarge; with: [
48 | html tbsInputGroupAddOn: '@'.
49 | html textInput tbsFormControl; placeholder: 'Username' ].
50 |
51 | html break.
52 | html tbsInputGroup: [
53 | html tbsInputGroupAddOn: '@'.
54 | html textInput tbsFormControl; placeholder: 'Username' ].
55 |
56 | html break.
57 | html tbsInputGroup beSmall; with: [
58 | html tbsInputGroupAddOn: '@'.
59 | html textInput tbsFormControl; placeholder: 'Username' ].
60 |
61 | html heading level: 2; with: 'Checkboxes and radio addons'.
62 |
63 | html tbsInputGroup: [
64 | html tbsInputGroupAddOn: [ html checkbox ].
65 | html textInput tbsFormControl ].
66 |
67 | html break.
68 | html tbsInputGroup: [
69 | html tbsInputGroupAddOn: [ html radioButton ].
70 | html textInput tbsFormControl ].
71 |
72 | html heading level: 2; with: 'Button addons'.
73 | html tbsInputGroup: [
74 | html tbsInputGroupButton: [ html tbsDropdownButton beDefault; with: [html text: 'Default '; tbsCaret]. html tbsDropdownMenu: menu].
75 | html textInput tbsFormControl ].
76 |
77 | html break.
78 | html tbsInputGroup: [
79 | html textInput tbsFormControl.
80 | html tbsInputGroupButton: [ html tbsDropdownButton beDefault; with: [html text: 'Default '; tbsCaret]. html tbsDropdownMenu tbsPullRight; with: menu]].
81 |
82 | ]
83 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSAccordionItem.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An accordion item
3 | "
4 | Class {
5 | #name : #TBSAccordionItem,
6 | #superclass : #WACanvasWidget,
7 | #instVars : [
8 | 'componentOrBlock',
9 | 'title',
10 | 'isCollapsed',
11 | 'accordion'
12 | ],
13 | #category : 'Bootstrap-Widgets-Components'
14 | }
15 |
16 | { #category : #'instance creation' }
17 | TBSAccordionItem class >> on: aComponentOrOneArgumentBlock title: aString in: anAccordion [
18 |
19 | ^(self new)
20 | componentOrBlock: aComponentOrOneArgumentBlock;
21 | title: aString;
22 | accordion: anAccordion;
23 | yourself
24 | ]
25 |
26 | { #category : #accessing }
27 | TBSAccordionItem >> accordion [
28 | ^ accordion
29 | ]
30 |
31 | { #category : #accessing }
32 | TBSAccordionItem >> accordion: anObject [
33 | accordion := anObject
34 | ]
35 |
36 | { #category : #accessing }
37 | TBSAccordionItem >> children [
38 | ^self componentOrBlock isBlock
39 | ifTrue: [ #() ]
40 | ifFalse: [ Array with: componentOrBlock ]
41 | ]
42 |
43 | { #category : #accessing }
44 | TBSAccordionItem >> componentOrBlock [
45 | ^ componentOrBlock
46 | ]
47 |
48 | { #category : #accessing }
49 | TBSAccordionItem >> componentOrBlock: aComponentOrOneArgumentBlock [
50 | componentOrBlock := aComponentOrOneArgumentBlock
51 | ]
52 |
53 | { #category : #initialization }
54 | TBSAccordionItem >> initialize [
55 |
56 | super initialize.
57 | self isCollapsed: false
58 | ]
59 |
60 | { #category : #accessing }
61 | TBSAccordionItem >> isCollapsed [
62 | ^ isCollapsed
63 | ]
64 |
65 | { #category : #accessing }
66 | TBSAccordionItem >> isCollapsed: anObject [
67 | isCollapsed := anObject
68 | ]
69 |
70 | { #category : #'private - rendering' }
71 | TBSAccordionItem >> renderBodyOn: html [
72 | |styleClasses|
73 | styleClasses := 'panel-collapse collapse'.
74 | self isCollapsed ifFalse: [styleClasses := styleClasses, ' in'].
75 |
76 | html div
77 | id: self uniqueIdString;
78 | class: styleClasses;
79 | with: [
80 | html tbsPanelBody: [
81 | self componentOrBlock isBlock
82 | ifTrue: [ self componentOrBlock value: html ]
83 | ifFalse: [ html render: self componentOrBlock ]]]
84 | ]
85 |
86 | { #category : #rendering }
87 | TBSAccordionItem >> renderContentOn: html [
88 |
89 | self renderHeadingOn: html.
90 | self renderBodyOn: html
91 | ]
92 |
93 | { #category : #'private - rendering' }
94 | TBSAccordionItem >> renderHeadingOn: html [
95 |
96 | html tbsPanelHeading: [
97 | html tbsPanelTitle: [
98 | html anchor
99 | attributeAt: 'data-toggle' ifAbsentPut: 'collapse';
100 | attributeAt: 'data-parent' ifAbsentPut: self accordion id asSymbol printString;
101 | url: '#', self uniqueIdString;
102 | with: self title
103 | ]]
104 | ]
105 |
106 | { #category : #accessing }
107 | TBSAccordionItem >> title [
108 | ^ title
109 | ]
110 |
111 | { #category : #accessing }
112 | TBSAccordionItem >> title: anObject [
113 | title := anObject
114 | ]
115 |
116 | { #category : #'private - accessing' }
117 | TBSAccordionItem >> uniqueIdString [
118 |
119 | ^'item', (self hash) asString
120 | ]
121 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/WATagBrush.extension.st:
--------------------------------------------------------------------------------
1 | Extension { #name : #WATagBrush }
2 |
3 | { #category : #'*bootstrap-core-canvas' }
4 | WATagBrush >> role: aString [
5 | self attributes at: 'role' put: aString
6 | ]
7 |
8 | { #category : #'*bootstrap-core-canvas' }
9 | WATagBrush >> tbsClearfix [
10 | "Clear the float on any element."
11 |
12 | self class: 'clearfix'
13 | ]
14 |
15 | { #category : #'*bootstrap-core-canvas' }
16 | WATagBrush >> tbsDropdown [
17 | "Creates a bootstrap dropdown."
18 |
19 | ^ self
20 | class: 'dropdown';
21 | yourself
22 | ]
23 |
24 | { #category : #'*bootstrap-core-canvas' }
25 | WATagBrush >> tbsDropdown: aBlock [
26 | "Create a bootstrap dropdown by wrapping its contents given by a block"
27 |
28 | ^ self tbsDropdown
29 | with: aBlock
30 |
31 | ]
32 |
33 | { #category : #'*bootstrap-core-canvas' }
34 | WATagBrush >> tbsHiddenForExtraSmallDevices [
35 |
36 | self class: 'hidden-xs'
37 | ]
38 |
39 | { #category : #'*bootstrap-core-canvas' }
40 | WATagBrush >> tbsHiddenForLargeDevices [
41 |
42 | self class: 'hidden-lg'
43 | ]
44 |
45 | { #category : #'*bootstrap-core-canvas' }
46 | WATagBrush >> tbsHiddenForMediumDevices [
47 |
48 | self class: 'hidden-md'
49 | ]
50 |
51 | { #category : #'*bootstrap-core-canvas' }
52 | WATagBrush >> tbsHiddenForPrint [
53 |
54 | self class: 'hidden-print'
55 | ]
56 |
57 | { #category : #'*bootstrap-core-canvas' }
58 | WATagBrush >> tbsHiddenForSmallDevices [
59 |
60 | self class: 'hidden-sm'
61 | ]
62 |
63 | { #category : #'*bootstrap-core-canvas' }
64 | WATagBrush >> tbsPullLeft [
65 | "Float an element left with a class"
66 |
67 | self class: 'pull-left'
68 | ]
69 |
70 | { #category : #'*bootstrap-core-canvas' }
71 | WATagBrush >> tbsPullRight [
72 | "Float an element right with a class."
73 |
74 | self class: 'pull-right'
75 | ]
76 |
77 | { #category : #'*bootstrap-core-canvas' }
78 | WATagBrush >> tbsScreenReaderOnly [
79 |
80 | self class: 'sr-only'
81 | ]
82 |
83 | { #category : #'*bootstrap-core-canvas' }
84 | WATagBrush >> tbsTooltip: aString [
85 | self attributeAt: 'data-toggle' put: 'tooltip'.
86 | self title: aString
87 | ]
88 |
89 | { #category : #'*bootstrap-core-canvas' }
90 | WATagBrush >> tbsTooltip: aString direction: aDirectionSymbol [
91 | "Provide any of the following directions: #left, #top, #bottom, #right"
92 | self tbsTooltip: aString.
93 | self attributes at: 'data-placement' put: aDirectionSymbol asString
94 |
95 | ]
96 |
97 | { #category : #'*bootstrap-core-canvas' }
98 | WATagBrush >> tbsVisibleForExtraSmallDevices [
99 |
100 | self class: 'visible-xs'
101 | ]
102 |
103 | { #category : #'*bootstrap-core-canvas' }
104 | WATagBrush >> tbsVisibleForLargeDevices [
105 |
106 | self class: 'visible-lg'
107 | ]
108 |
109 | { #category : #'*bootstrap-core-canvas' }
110 | WATagBrush >> tbsVisibleForMediumDevices [
111 |
112 | self class: 'visible-md'
113 | ]
114 |
115 | { #category : #'*bootstrap-core-canvas' }
116 | WATagBrush >> tbsVisibleForPrint [
117 |
118 | self class: 'visible-print'
119 | ]
120 |
121 | { #category : #'*bootstrap-core-canvas' }
122 | WATagBrush >> tbsVisibleForSmallDevices [
123 |
124 | self class: 'visible-sm'
125 | ]
126 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSPanelExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap panels
3 | "
4 | Class {
5 | #name : #TBSPanelExample,
6 | #superclass : #TBSBootstrapExample,
7 | #instVars : [
8 | 'data',
9 | 'headerBlock',
10 | 'tableBlock'
11 | ],
12 | #category : 'Bootstrap-Examples-Core'
13 | }
14 |
15 | { #category : #accessing }
16 | TBSPanelExample class >> exampleName [
17 |
18 | ^'Panel'
19 | ]
20 |
21 | { #category : #rendering }
22 | TBSPanelExample >> renderExampleOn: html [
23 |
24 | html heading level: 2; with: 'Basic example'.
25 |
26 | html tbsPanel beDefault
27 | with: [ html tbsPanelBody: 'Basic panel example'].
28 |
29 |
30 | html heading level: 2; with: 'Panel with heading'.
31 |
32 | html tbsPanel beDefault
33 | with: [ html tbsPanelHeading: 'Panel heading without title'.
34 | html tbsPanelBody: 'Panel content'].
35 |
36 | html tbsPanel beDefault
37 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title' ].
38 | html tbsPanelBody: 'Panel content'].
39 |
40 | html heading level: 3; with: 'Panel with footer'.
41 | html tbsPanel beDefault
42 | with: [ html tbsPanelBody: 'Panel content'.
43 | html tbsPanelFooter: 'Panel footer'].
44 |
45 | html heading level: 2; with: 'Contextual alternatives'.
46 |
47 | html tbsPanel bePrimary
48 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title - Primary' ].
49 | html tbsPanelBody: 'Panel content'].
50 |
51 | html tbsPanel beSuccess
52 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title - Success' ].
53 | html tbsPanelBody: 'Panel content'].
54 |
55 | html tbsPanel beInfo
56 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title - Info' ].
57 | html tbsPanelBody: 'Panel content'].
58 |
59 | html tbsPanel beWarning
60 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title - Warning' ].
61 | html tbsPanelBody: 'Panel content'].
62 |
63 | html tbsPanel beDanger
64 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title - Danger' ].
65 | html tbsPanelBody: 'Panel content'].
66 |
67 |
68 |
69 | data := #(('1' 'Mark' 'Otto' '@mdo') ('2' 'Jacob' 'Thornton' '@fat') ('3' 'Larry' 'the Bird' '@twitter')).
70 |
71 | headerBlock := [
72 | html tableHeading: '#'.
73 | html tableHeading: 'First Name'.
74 | html tableHeading: 'Last Name'.
75 | html tableHeading: 'Username' ].
76 |
77 | tableBlock := [
78 | html tableHead: (headerBlock).
79 | html tableBody: [
80 | data do: [:row | html tableRow: [ row do: [:col | html tableData: col ]]]]].
81 |
82 | html heading level: 2; with: 'With tables'.
83 | html tbsPanel beDefault
84 | with: [ html tbsPanelHeading: [ html tbsPanelTitle level: 3; with: 'Panel title' ].
85 | html tbsPanelBody: [ html paragraph: 'Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.' ].
86 | html tbsTable: tableBlock ].
87 |
88 |
89 |
90 | ]
91 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSExampleInformsConfirms.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap information and confirmation messages example
3 | "
4 | Class {
5 | #name : #TBSExampleInformsConfirms,
6 | #superclass : #TBSBootstrapExample,
7 | #instVars : [
8 | 'informMessage',
9 | 'confirmMessage',
10 | 'yourAnswer'
11 | ],
12 | #category : 'Bootstrap-Examples-Core'
13 | }
14 |
15 | { #category : #accessing }
16 | TBSExampleInformsConfirms class >> exampleName [
17 |
18 | ^'Alerts and Confirmations'
19 | ]
20 |
21 | { #category : #accessing }
22 | TBSExampleInformsConfirms class >> label [
23 | ^ [ :html | html text: 'Bootstrap versions of Seaside''s '; code: 'WAComponent>>#inform'; text: ', '; code: 'WAComponent>>#confirm' ]
24 | ]
25 |
26 | { #category : #accessing }
27 | TBSExampleInformsConfirms >> confirmMessage [
28 | ^ confirmMessage ifNil: [ 'Does this colour suit me?' ]
29 | ]
30 |
31 | { #category : #accessing }
32 | TBSExampleInformsConfirms >> confirmMessage: anObject [
33 | confirmMessage := anObject
34 | ]
35 |
36 | { #category : #accessing }
37 | TBSExampleInformsConfirms >> confirms [
38 | ^ Array with: #confirmInfo -> 'btn-info' with: #confirmSuccess -> 'btn-success' with: #confirmWarning -> 'btn-warning' with: #confirmError -> 'btn-danger'
39 |
40 | ]
41 |
42 | { #category : #accessing }
43 | TBSExampleInformsConfirms >> informMessage [
44 | ^ informMessage ifNil: [ informMessage := 'A really important message' ]
45 | ]
46 |
47 | { #category : #accessing }
48 | TBSExampleInformsConfirms >> informMessage: anObject [
49 | informMessage := anObject
50 | ]
51 |
52 | { #category : #accessing }
53 | TBSExampleInformsConfirms >> informs [
54 | ^ Array with: #informInfo -> 'btn-info' with: #informSuccess -> 'btn-success' with: #informWarning -> 'btn-warning' with: #informError -> 'btn-danger'
55 |
56 | ]
57 |
58 | { #category : #rendering }
59 | TBSExampleInformsConfirms >> renderExampleOn: html [
60 | html form: [
61 | html label: [
62 | html text: 'Inform Message: '.
63 | html textInput
64 | on: #informMessage of: self ].
65 |
66 | html div: [
67 | self informs do: [ :each |
68 | html button
69 | class: 'btn';
70 | class: each value;
71 | callback: [
72 | yourAnswer := nil.
73 | self perform: each key asMutator with: [ :r | r strong: 'Message: '; text: self informMessage ] ];
74 | with: each key ]
75 | separatedBy: [ html space ] ].
76 |
77 | html break.
78 | html label: [
79 | html text: 'Confirm Message: '.
80 | html textInput
81 | on: #confirmMessage of: self ].
82 |
83 | html div: [
84 | self confirms do: [ :each |
85 | html button
86 | class: 'btn';
87 | class: each value;
88 | callback: [ yourAnswer := (self perform: each key asMutator with: [ :r | r strong: 'Message: '; text: self confirmMessage ]) ];
89 | with: each key ]
90 | separatedBy: [ html space ] ].
91 | yourAnswer ifNotNil: [
92 | html div: [
93 | yourAnswer ifTrue: [ html text: 'Your answer was yes' ]
94 | ifFalse: [ html text: 'Your answer was no' ] ] ].
95 |
96 | html div
97 | class: 'form-actions';
98 | with: [
99 | html button
100 | class: 'btn';
101 | callback: [ self answer ];
102 | with: 'Return' ] ]
103 | ]
104 |
--------------------------------------------------------------------------------
/src/Bootstrap-Widgets/TBSVerticalTabsDevelopmentLibrary.class.st:
--------------------------------------------------------------------------------
1 | "
2 | For development, see https://github.com/dbtek/bootstrap-vertical-tabs
3 | "
4 | Class {
5 | #name : #TBSVerticalTabsDevelopmentLibrary,
6 | #superclass : #TBSVerticalTabsFileLibrary,
7 | #category : 'Bootstrap-Widgets-Libraries'
8 | }
9 |
10 | { #category : #'uploaded metadata' }
11 | TBSVerticalTabsDevelopmentLibrary >> bootstrapverticaltabsCss [
12 | ^ WAFileLibraryResource
13 | filepath: 'bootstrap.vertical-tabs.css'
14 | mimeType: (WAMimeType main: 'text' sub: 'css')
15 | cacheDuration: (Duration days: 0 hours: 0 minutes: 30 seconds: 0)
16 | contents: (GRDelayedSend receiver: self selector: #bootstrapverticaltabsCssContent)
17 | ]
18 |
19 | { #category : #uploaded }
20 | TBSVerticalTabsDevelopmentLibrary >> bootstrapverticaltabsCssContent [
21 | ^ '/*!
22 | * bootstrap-vertical-tabs - v1.1.0
23 | * https://dbtek.github.io/bootstrap-vertical-tabs
24 | * 2014-07-24
25 | * Copyright (c) 2014 İsmail Demirbilek
26 | * License: MIT
27 | */
28 | .tabs-left, .tabs-right {
29 | border-bottom: none;
30 | padding-top: 2px;
31 | }
32 | .tabs-left {
33 | border-right: 1px solid #ddd;
34 | }
35 | .tabs-right {
36 | border-left: 1px solid #ddd;
37 | }
38 | .tabs-left>li, .tabs-right>li {
39 | float: none;
40 | margin-bottom: 2px;
41 | }
42 | .tabs-left>li {
43 | margin-right: -1px;
44 | }
45 | .tabs-right>li {
46 | margin-left: -1px;
47 | }
48 | .tabs-left>li.active>a,
49 | .tabs-left>li.active>a:hover,
50 | .tabs-left>li.active>a:focus {
51 | border-bottom-color: #ddd;
52 | border-right-color: transparent;
53 | }
54 |
55 | .tabs-right>li.active>a,
56 | .tabs-right>li.active>a:hover,
57 | .tabs-right>li.active>a:focus {
58 | border-bottom: 1px solid #ddd;
59 | border-left-color: transparent;
60 | }
61 | .tabs-left>li>a {
62 | border-radius: 4px 0 0 4px;
63 | margin-right: 0;
64 | display:block;
65 | }
66 | .tabs-right>li>a {
67 | border-radius: 0 4px 4px 0;
68 | margin-right: 0;
69 | }
70 | .sideways {
71 | margin-top:50px;
72 | border: none;
73 | position: relative;
74 | }
75 | .sideways>li {
76 | height: 20px;
77 | width: 120px;
78 | margin-bottom: 100px;
79 | }
80 | .sideways>li>a {
81 | border-bottom: 1px solid #ddd;
82 | border-right-color: transparent;
83 | text-align: center;
84 | border-radius: 4px 4px 0px 0px;
85 | }
86 | .sideways>li.active>a,
87 | .sideways>li.active>a:hover,
88 | .sideways>li.active>a:focus {
89 | border-bottom-color: transparent;
90 | border-right-color: #ddd;
91 | border-left-color: #ddd;
92 | }
93 | .sideways.tabs-left {
94 | left: -50px;
95 | }
96 | .sideways.tabs-right {
97 | right: -50px;
98 | }
99 | .sideways.tabs-right>li {
100 | -webkit-transform: rotate(90deg);
101 | -moz-transform: rotate(90deg);
102 | -ms-transform: rotate(90deg);
103 | -o-transform: rotate(90deg);
104 | transform: rotate(90deg);
105 | }
106 | .sideways.tabs-left>li {
107 | -webkit-transform: rotate(-90deg);
108 | -moz-transform: rotate(-90deg);
109 | -ms-transform: rotate(-90deg);
110 | -o-transform: rotate(-90deg);
111 | transform: rotate(-90deg);
112 | }'
113 | ]
114 |
115 | { #category : #accessing }
116 | TBSVerticalTabsDevelopmentLibrary >> selectorsToInclude [
117 | ^ #(bootstrapverticaltabsCss)
118 | ]
119 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSButtonExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap button examples
3 | "
4 | Class {
5 | #name : #TBSButtonExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSButtonExample class >> exampleName [
12 |
13 | ^'Buttons'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSButtonExample >> renderButtonsDisabledStateOn: html [
18 |
19 | html
20 | heading level: 2; with: 'Disabled state'.
21 |
22 | html paragraph: 'Make buttons look unclickable by fading them back 50%.'.
23 |
24 | html heading level: 2; with: 'Disabled state'.
25 |
26 | html tbsButton
27 | bePrimary;
28 | beDisabled;
29 | with: 'Disabled button'.
30 | html space.
31 | html tbsButton
32 | beDisabled;
33 | with: 'Disabled button'.
34 |
35 |
36 | ]
37 |
38 | { #category : #rendering }
39 | TBSButtonExample >> renderButtonsOptionsOn: html [
40 |
41 | html
42 | heading level: 2; with: 'Options'.
43 |
44 | html tbsButton
45 | beDefault;
46 | with: 'Default'.
47 |
48 | html space.
49 |
50 | html tbsButton
51 | bePrimary;
52 | with: 'Primary'.
53 |
54 | html space.
55 |
56 | html tbsButton
57 | beSuccess;
58 | with: 'Success'.
59 |
60 | html space.
61 |
62 | html tbsButton
63 | beInfo;
64 | with: 'Info'.
65 |
66 | html space.
67 |
68 | html tbsButton
69 | beWarning;
70 | with: 'Warning'.
71 |
72 | html space.
73 |
74 | html tbsButton
75 | beDanger;
76 | with: 'Danger'.
77 |
78 | html space.
79 |
80 | html tbsButton
81 | beLink;
82 | with: 'Link'.
83 |
84 | ]
85 |
86 | { #category : #rendering }
87 | TBSButtonExample >> renderButtonsSizesOn: html [
88 |
89 | html heading level: 2; with: 'Sizes'.
90 |
91 | html paragraph: 'Fancy larger or smaller buttons? Just add #beLarge, #beSmall, #beExtraSmall for additional sizes'.
92 | html tbsButton
93 | bePrimary;
94 | beLarge;
95 | with: 'Large button'.
96 | html space.
97 | html tbsButton
98 | beLarge;
99 | with: 'Large button'.
100 |
101 | html break; break.
102 |
103 | html tbsButton
104 | bePrimary;
105 | beDefault;
106 | with: 'Default button'.
107 | html space.
108 | html tbsButton
109 | with: 'Default button'.
110 |
111 | html break; break.
112 |
113 | html tbsButton
114 | bePrimary;
115 | beSmall;
116 | with: 'Small button'.
117 | html space.
118 | html tbsButton
119 | beSmall;
120 | with: 'Small button'.
121 |
122 | html break; break.
123 |
124 | html tbsButton
125 | bePrimary;
126 | beExtraSmall;
127 | with: 'Extra small button'.
128 | html space.
129 | html tbsButton
130 | beExtraSmall;
131 | with: 'Extra small button'.
132 |
133 | html break; break.
134 |
135 | html paragraph: 'Create block level buttons those that span the full width of a parent.'.
136 |
137 | html tbsButton
138 | bePrimary;
139 | beBlock;
140 | with: 'Block level button'.
141 |
142 | html tbsButton
143 | beBlock;
144 | with: 'Block level button'.
145 |
146 |
147 |
148 |
149 | ]
150 |
151 | { #category : #rendering }
152 | TBSButtonExample >> renderExampleOn: html [
153 |
154 | self
155 | renderButtonsOptionsOn: html;
156 | renderButtonsSizesOn: html;
157 | renderButtonsDisabledStateOn: html
158 | ]
159 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Widgets/TBSWidgetsCanvasBrushTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSWidgetsCanvasBrushTest,
3 | #superclass : #WAAbstractCanvasBrushTest,
4 | #category : 'Bootstrap-Tests-Widgets-Components'
5 | }
6 |
7 | { #category : #'testing - offer' }
8 | TBSWidgetsCanvasBrushTest >> testTbsOffer [
9 |
10 | self
11 | assert: [ :html | html tbsOffer ]
12 | gives: ''
13 |
14 | ]
15 |
16 | { #category : #'testing - offer' }
17 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeDanger [
18 | self
19 | assert: [ :html | html tbsOffer beDanger ]
20 | gives: ''
21 |
22 | ]
23 |
24 | { #category : #'testing - offer' }
25 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeDefault [
26 |
27 | self
28 | assert: [ :html | html tbsOffer beDefault ]
29 | gives: ''
30 |
31 | ]
32 |
33 | { #category : #'testing - offer' }
34 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeInfo [
35 |
36 | self
37 | assert: [ :html | html tbsOffer beInfo ]
38 | gives: ''
39 |
40 | ]
41 |
42 | { #category : #'testing - offer' }
43 | TBSWidgetsCanvasBrushTest >> testTbsOfferBePrimary [
44 |
45 | self
46 | assert: [ :html | html tbsOffer bePrimary ]
47 | gives: ''
48 |
49 | ]
50 |
51 | { #category : #'testing - offer' }
52 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeRounded [
53 |
54 | self
55 | assert: [ :html | html tbsOffer beRounded ]
56 | gives: ''
57 |
58 | ]
59 |
60 | { #category : #'testing - offer' }
61 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeSuccess [
62 |
63 | self
64 | assert: [ :html | html tbsOffer beSuccess ]
65 | gives: ''
66 |
67 | ]
68 |
69 | { #category : #'testing - offer' }
70 | TBSWidgetsCanvasBrushTest >> testTbsOfferBeWarning [
71 |
72 | self
73 | assert: [ :html | html tbsOffer beWarning ]
74 | gives: ''
75 |
76 | ]
77 |
78 | { #category : #'testing - offer' }
79 | TBSWidgetsCanvasBrushTest >> testTbsOfferContent [
80 |
81 | self
82 | assert: [ :html | html tbsOfferContent ]
83 | gives: ''
84 |
85 | ]
86 |
87 | { #category : #'testing - offer' }
88 | TBSWidgetsCanvasBrushTest >> testTbsOfferContentWithContents [
89 |
90 | self
91 | assert: [ :html | html tbsOfferContent: 'Bootstrap' ]
92 | gives: 'Bootstrap
'
93 |
94 | ]
95 |
96 | { #category : #'testing - offer' }
97 | TBSWidgetsCanvasBrushTest >> testTbsOfferShape [
98 |
99 | self
100 | assert: [ :html | html tbsOfferShape ]
101 | gives: ''
102 |
103 | ]
104 |
105 | { #category : #'testing - offer' }
106 | TBSWidgetsCanvasBrushTest >> testTbsOfferShapeText [
107 |
108 | self
109 | assert: [ :html | html tbsOfferShapeText ]
110 | gives: ''
111 |
112 | ]
113 |
114 | { #category : #'testing - offer' }
115 | TBSWidgetsCanvasBrushTest >> testTbsOfferShapeTextWithContents [
116 |
117 | self
118 | assert: [ :html | html tbsOfferShapeText: 'Bootstrap' ]
119 | gives: 'Bootstrap
'
120 |
121 | ]
122 |
123 | { #category : #'testing - offer' }
124 | TBSWidgetsCanvasBrushTest >> testTbsOfferShapeWithContents [
125 |
126 | self
127 | assert: [ :html | html tbsOfferShape: 'Bootstrap' ]
128 | gives: 'Bootstrap
'
129 |
130 | ]
131 |
132 | { #category : #'testing - offer' }
133 | TBSWidgetsCanvasBrushTest >> testTbsOfferWithContents [
134 |
135 | self
136 | assert: [ :html | html tbsOffer: 'Bootstrap' ]
137 | gives: 'Bootstrap
'
138 |
139 | ]
140 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSGridSystemExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for the bootstrap grid system
3 | "
4 | Class {
5 | #name : #TBSGridSystemExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Core'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSGridSystemExample class >> exampleName [
12 |
13 | ^'Grid system'
14 | ]
15 |
16 | { #category : #rendering }
17 | TBSGridSystemExample >> renderExampleOn: html [
18 |
19 | html heading level: 2; with: 'Example: Stacked-to-horizontal'.
20 | html tbsRow showGrid;
21 | with: [ 12 timesRepeat: [ html tbsColumn: '.col-md-1' mediumSize: 1]].
22 |
23 | html break.
24 | html tbsRow showGrid;
25 | with: [ html tbsColumn: '.col-md-8' mediumSize: 8.
26 | html tbsColumn: '.col-md-4' mediumSize: 4. ].
27 |
28 | html break.
29 | html tbsRow showGrid;
30 | with: [ html tbsColumn: '.col-md-4' mediumSize: 4.
31 | html tbsColumn: '.col-md-4' mediumSize: 4.
32 | html tbsColumn: '.col-md-4' mediumSize: 4. ].
33 |
34 | html break.
35 | html tbsRow showGrid;
36 | with: [ html tbsColumn: '.col-md-6' mediumSize: 6.
37 | html tbsColumn: '.col-md-6' mediumSize: 6. ].
38 |
39 | html heading level: 2; with: 'Example: Mobile and desktop'.
40 | html tbsRow showGrid;
41 | with: [ html tbsColumn
42 | extraSmallSize: 12;
43 | mediumSize: 8;
44 | with: '.col-xs-12 .col-md-8'.
45 | html tbsColumn
46 | extraSmallSize: 6;
47 | mediumSize: 4;
48 | with: '.col-xs-6 .col-md-4' ].
49 |
50 | html break.
51 | html tbsRow showGrid;
52 | with: [ 3 timesRepeat: [html tbsColumn
53 | extraSmallSize: 6;
54 | mediumSize: 4;
55 | with: '.col-xs-6 .col-md-4']].
56 |
57 | html break.
58 | html tbsRow showGrid;
59 | with: [ 2 timesRepeat: [html tbsColumn
60 | extraSmallSize: 6;
61 | with: '.col-xs-6' ] ].
62 |
63 | html heading level: 2; with: 'Example: Mobile, tablet, desktops'.
64 |
65 | html tbsRow showGrid;
66 | with: [ html tbsColumn
67 | extraSmallSize: 12;
68 | smallSize: 6;
69 | mediumSize: 8;
70 | with: '.col-xs-12 .col-sm-6 .col-md-8'.
71 | html tbsColumn
72 | extraSmallSize: 6;
73 | smallSize: 6;
74 | mediumSize: 4;
75 | with: '.col-xs-6 .col-sm-6 .col-md-4' ].
76 |
77 | html break.
78 | html tbsRow showGrid;
79 | with: [ 3 timesRepeat: [html tbsColumn
80 | extraSmallSize: 6;
81 | smallSize: 4;
82 | mediumSize: 4;
83 | with: '.col-xs-6 .col-sm-4 .col-md-4']].
84 |
85 | html heading level: 2; with: 'Offsetting columns'.
86 | html tbsRow showGrid;
87 | with: [ html tbsColumn: '.col-md-4' mediumSize: 4.
88 | html tbsColumn
89 | mediumSize: 4;
90 | mediumOffset: 4;
91 | with: '.col-md-4 .col-md-offset-4' ].
92 |
93 | html break.
94 | html tbsRow showGrid;
95 | with: [ 2 timesRepeat: [
96 | html tbsColumn
97 | mediumSize: 3;
98 | mediumOffset: 3;
99 | with: '.col-md-3 .col-md-offset-3']].
100 |
101 | html break.
102 | html tbsRow showGrid;
103 | with: [ html tbsColumn
104 | mediumSize: 6;
105 | mediumOffset: 3;
106 | with: '.col-md-6 .col-md-offset-3'].
107 |
108 | html heading level: 2; with: 'Column ordering'.
109 | html text: 'Easily change the order of our built-in grid columns with #push: and #pull:'.
110 | html tbsRow showGrid;
111 | with: [ html tbsColumn
112 | mediumSize: 9;
113 | mediumPush: 3;
114 | with: '.col-md-9 .col-md-push-3'.
115 | html tbsColumn
116 | mediumSize: 3;
117 | mediumPull: 9;
118 | with: '.col-md-3 .col-md-pull-9'].
119 |
120 |
121 |
122 | ]
123 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSExamplesHome.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Examples for Bootstrap
3 | "
4 | Class {
5 | #name : #TBSExamplesHome,
6 | #superclass : #WAComponent,
7 | #instVars : [
8 | 'displayIntro',
9 | 'browser',
10 | 'currentExample'
11 | ],
12 | #category : 'Bootstrap-Examples-Browser'
13 | }
14 |
15 | { #category : #initialization }
16 | TBSExamplesHome class >> initialize [
17 |
18 | self register
19 | ]
20 |
21 | { #category : #registration }
22 | TBSExamplesHome class >> register [
23 |
24 | |app|
25 | app := WAAdmin register: self asApplicationAt: 'bootstrap'.
26 | app
27 | addLibrary: JQDeploymentLibrary;
28 | addLibrary: TBSDevelopmentLibrary;
29 | addLibrary: TBSExamplesLibrary;
30 | addLibrary: TBSJasnyDeploymentLibrary;
31 | addLibrary: TBSVerticalTabsDeploymentLibrary
32 | ]
33 |
34 | { #category : #actions }
35 | TBSExamplesHome >> browseExamples [
36 | displayIntro := false.
37 |
38 | ]
39 |
40 | { #category : #accessing }
41 | TBSExamplesHome >> children [
42 | ^self isDisplayingIntro
43 | ifTrue: [ #() ]
44 | ifFalse: [ Array with: browser ]
45 | ]
46 |
47 | { #category : #actions }
48 | TBSExamplesHome >> initialRequest: request [
49 | super initialRequest: request.
50 | browser initialRequest: request.
51 | displayIntro := (request url path includes: 'browser') not.
52 | ]
53 |
54 | { #category : #initialization }
55 | TBSExamplesHome >> initialize [
56 | super initialize.
57 | displayIntro := true.
58 | browser := TBSExampleBrowser new
59 | ]
60 |
61 | { #category : #testing }
62 | TBSExamplesHome >> isDisplayingIntro [
63 |
64 | ^displayIntro
65 | ]
66 |
67 | { #category : #testing }
68 | TBSExamplesHome >> noExampleSelected [
69 |
70 | ^currentExample isNil
71 | ]
72 |
73 | { #category : #rendering }
74 | TBSExamplesHome >> renderContentOn: html [
75 |
76 | self renderNavigationbarOn: html.
77 | self isDisplayingIntro
78 | ifTrue: [ self renderIntroOn: html ]
79 | ifFalse: [ browser renderOn: html ]
80 |
81 | ]
82 |
83 | { #category : #'rendering components' }
84 | TBSExamplesHome >> renderIntroOn: html [
85 | html tbsContainer: [
86 | html tbsJumbotron: [
87 | html heading: 'Bootstrap for Seaside'.
88 | html image url: TBSExamplesLibrary / #logoPng.
89 | html break; break.
90 | html paragraph: [
91 | html text: 'Combine the sleek, intuitive, and powerful '.
92 | html anchor url: 'http://getbootstrap.com'; with: 'mobile first front-end framework'.
93 | html text: ' together with the most '.
94 | html anchor url: 'http://www.seaside.st'; with: 'productive web framework'.
95 | html text: ' and the hottest '.
96 | html anchor url: 'http://www.pharo.org'; with: 'innovative open source development platform'.
97 | html text: ' for faster and easier web application development '.
98 | html text: ' using the latest version of '.
99 | html anchor url: 'http://smalltalkhub.com/#!/~TorstenBergmann/Bootstrap'; with: 'Bootstrap for Seaside'. ].
100 | html paragraph: [
101 | html form: [
102 | html tbsButton
103 | bePrimary;
104 | beLarge;
105 | callback: [ self browseExamples ];
106 | with: 'Browse Examples' ]].
107 |
108 |
109 | ]]
110 | ]
111 |
112 | { #category : #'rendering components' }
113 | TBSExamplesHome >> renderNavigationbarOn: html [
114 |
115 | html tbsNavbar beDefault; with: [
116 |
117 | html tbsContainer: [
118 | html tbsNavbarHeader: [
119 | html image tbsPullLeft; style: 'padding: 10px;';url: TBSExamplesLibrary / #logosmallPng.
120 | html tbsNavbarBrand
121 | url: 'http://smalltalkhub.com/#!/~TorstenBergmann/Bootstrap';
122 | with: 'Bootstrap for Seaside'.
123 | ].
124 | html form: [
125 | html tbsNavbarButton
126 | tbsPullRight;
127 | callback: [ self returnToIntro ];
128 | with: 'Home' ]] ]
129 |
130 | ]
131 |
132 | { #category : #actions }
133 | TBSExamplesHome >> returnToIntro [
134 |
135 | displayIntro := true.
136 |
137 | ]
138 |
139 | { #category : #updating }
140 | TBSExamplesHome >> updateRoot: htmlRoot [
141 |
142 | htmlRoot title: 'Bootstrap for Seaside'
143 | ]
144 |
--------------------------------------------------------------------------------
/src/Bootstrap-Tests-Jasny/TBSJasnyCanvasBrushTest.class.st:
--------------------------------------------------------------------------------
1 | Class {
2 | #name : #TBSJasnyCanvasBrushTest,
3 | #superclass : #WAAbstractCanvasBrushTest,
4 | #category : 'Bootstrap-Tests-Jasny-Canvas'
5 | }
6 |
7 | { #category : #'tests-button options' }
8 | TBSJasnyCanvasBrushTest >> testTbsButtonBeLabeled [
9 |
10 | self
11 | assert: [ :html | html tbsButton beLabeled ]
12 | gives: ''
13 |
14 |
15 | ]
16 |
17 | { #category : #'tests-button options' }
18 | TBSJasnyCanvasBrushTest >> testTbsButtonBeLabeledConditional [
19 |
20 | self
21 | assert: [ :html | html tbsButton beLabeledIf: true ]
22 | gives: ''.
23 |
24 | self
25 | assert: [ :html | html tbsButton beLabeledIf: false ]
26 | gives: ''
27 |
28 | ]
29 |
30 | { #category : #'tests-button label' }
31 | TBSJasnyCanvasBrushTest >> testTbsButtonLabel [
32 | self
33 | assert: [ :html | html tbsButtonLabel ]
34 | gives: ''
35 |
36 |
37 | ]
38 |
39 | { #category : #'tests-button label' }
40 | TBSJasnyCanvasBrushTest >> testTbsButtonLabelRight [
41 | self
42 | assert: [ :html | html tbsButtonLabelRight ]
43 | gives: ''
44 |
45 |
46 | ]
47 |
48 | { #category : #'tests-button label' }
49 | TBSJasnyCanvasBrushTest >> testTbsButtonLabelRightWithContents [
50 |
51 | self
52 | assert: [ :html | html tbsButtonLabelRight: 'Bootstrap' ]
53 | gives: 'Bootstrap'
54 |
55 |
56 | ]
57 |
58 | { #category : #'tests-button label' }
59 | TBSJasnyCanvasBrushTest >> testTbsButtonLabelWithContents [
60 |
61 | self
62 | assert: [ :html | html tbsButtonLabel: 'Bootstrap' ]
63 | gives: 'Bootstrap'
64 |
65 |
66 | ]
67 |
68 | { #category : #'tests-container' }
69 | TBSJasnyCanvasBrushTest >> testTbsContainerSmooth [
70 |
71 | self
72 | assert: [ :html | html tbsContainerSmooth ]
73 | gives: ''
74 |
75 |
76 | ]
77 |
78 | { #category : #'tests-container' }
79 | TBSJasnyCanvasBrushTest >> testTbsContainerSmoothWithContents [
80 |
81 | self
82 | assert: [ :html | html tbsContainerSmooth: 'Bootstrap' ]
83 | gives: 'Bootstrap
'
84 |
85 | ]
86 |
87 | { #category : #'tests-nav options' }
88 | TBSJasnyCanvasBrushTest >> testTbsNavBeNavmenuNavigation [
89 |
90 | self
91 | assert: [ :html | html tbsNav beNavmenuNavigation ]
92 | gives: ''
93 |
94 |
95 | ]
96 |
97 | { #category : #'tests-navmenu' }
98 | TBSJasnyCanvasBrushTest >> testTbsNavmenu [
99 |
100 | self
101 | assert: [ :html | html tbsNavmenu ]
102 | gives: ''
103 | ]
104 |
105 | { #category : #'tests-navmenu options' }
106 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBeDefault [
107 |
108 | self
109 | assert: [ :html | html tbsNavmenu beDefault ]
110 | gives: ''
111 | ]
112 |
113 | { #category : #'tests-navmenu options' }
114 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBeFixedLeft [
115 |
116 | self
117 | assert: [ :html | html tbsNavmenu beFixedLeft ]
118 | gives: ''
119 | ]
120 |
121 | { #category : #'tests-navmenu options' }
122 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBeFixedRight [
123 |
124 | self
125 | assert: [ :html | html tbsNavmenu beFixedRight ]
126 | gives: ''
127 | ]
128 |
129 | { #category : #'tests-navmenu options' }
130 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBeInverse [
131 |
132 | self
133 | assert: [ :html | html tbsNavmenu beInverse ]
134 | gives: ''
135 | ]
136 |
137 | { #category : #'tests-navmenu' }
138 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBrand [
139 |
140 | self
141 | assert: [ :html | html tbsNavmenuBrand ]
142 | gives: ''
143 | ]
144 |
145 | { #category : #'tests-navmenu' }
146 | TBSJasnyCanvasBrushTest >> testTbsNavmenuBrandWithContent [
147 |
148 | self
149 | assert: [ :html | html tbsNavmenuBrand: 'Bootstrap' ]
150 | gives: 'Bootstrap'
151 | ]
152 |
153 | { #category : #'tests-navmenu' }
154 | TBSJasnyCanvasBrushTest >> testTbsNavmenuWithContent [
155 |
156 | self
157 | assert: [ :html | html tbsNavmenu: 'Bootstrap' ]
158 | gives: ''
159 |
160 | ]
161 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSButtonTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Bootstrap button
3 | "
4 | Class {
5 | #name : #TBSButtonTag,
6 | #superclass : #WAButtonTag,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #sizes }
11 | TBSButtonTag >> beBlock [
12 | "Creates an extra small sized button."
13 | self beBlockIf: true
14 | ]
15 |
16 | { #category : #sizes }
17 | TBSButtonTag >> beBlockIf: aBlock [
18 | "Creates an block sized button if aBlock is true."
19 | self class: 'btn-block' if: aBlock
20 | ]
21 |
22 | { #category : #options }
23 | TBSButtonTag >> beDanger [
24 | "Creates an Danger type button."
25 | self beDangerIf: true
26 | ]
27 |
28 | { #category : #options }
29 | TBSButtonTag >> beDangerIf: aBlock [
30 | "Creates an Danger type button if aBlock is true."
31 | self class: 'btn-danger' if: aBlock
32 | ]
33 |
34 | { #category : #options }
35 | TBSButtonTag >> beDefault [
36 | "Creates an Default type button."
37 | self beDefaultIf: true
38 | ]
39 |
40 | { #category : #options }
41 | TBSButtonTag >> beDefaultIf: aBlock [
42 | "Creates an default type button if aBlock is true."
43 | self class: 'btn-default' if: aBlock
44 | ]
45 |
46 | { #category : #options }
47 | TBSButtonTag >> beDisabled [
48 | "Creates an Default type button."
49 | self beDisabledIf: true
50 | ]
51 |
52 | { #category : #options }
53 | TBSButtonTag >> beDisabledIf: aBlock [
54 | "Creates an default type button if aBlock is true."
55 | aBlock value ifTrue: [ self disabled: 'disabled' ]
56 | ]
57 |
58 | { #category : #sizes }
59 | TBSButtonTag >> beExtraSmall [
60 | "Creates an extra small sized button."
61 | self beExtraSmallIf: true
62 | ]
63 |
64 | { #category : #sizes }
65 | TBSButtonTag >> beExtraSmallIf: aBlock [
66 | "Creates an extra small sized button if aBlock is true."
67 | self class: 'btn-xs' if: aBlock
68 | ]
69 |
70 | { #category : #options }
71 | TBSButtonTag >> beInfo [
72 | "Creates an Info type button."
73 | self beInfoIf: true
74 | ]
75 |
76 | { #category : #options }
77 | TBSButtonTag >> beInfoIf: aBlock [
78 | "Creates an Info type button if aBlock is true."
79 | self class: 'btn-info' if: aBlock
80 | ]
81 |
82 | { #category : #options }
83 | TBSButtonTag >> beInverse [
84 | "Creates an Inverse type button."
85 | self class: 'btn-inverse'
86 | ]
87 |
88 | { #category : #sizes }
89 | TBSButtonTag >> beLarge [
90 | "Creates an large sized button."
91 | self beLargeIf: true
92 | ]
93 |
94 | { #category : #sizes }
95 | TBSButtonTag >> beLargeIf: aBlock [
96 | "Creates an large sized button if aBlock is true."
97 | self class: 'btn-lg' if: aBlock
98 | ]
99 |
100 | { #category : #options }
101 | TBSButtonTag >> beLink [
102 | "Creates an Link type button."
103 | self beLinkIf: true
104 | ]
105 |
106 | { #category : #options }
107 | TBSButtonTag >> beLinkIf: aBlock [
108 | "Creates an Link type button if aBlock is true."
109 | self class: 'btn-link' if: aBlock
110 | ]
111 |
112 | { #category : #options }
113 | TBSButtonTag >> beNavbarButton [
114 |
115 | self class: 'navbar-btn'
116 | ]
117 |
118 | { #category : #options }
119 | TBSButtonTag >> bePrimary [
120 | "Creates an Primary type button."
121 | self bePrimaryIf: true
122 | ]
123 |
124 | { #category : #options }
125 | TBSButtonTag >> bePrimaryIf: aBlock [
126 | "Creates an Primary type button if aBlock is true."
127 | self class: 'btn-primary' if: aBlock value
128 | ]
129 |
130 | { #category : #sizes }
131 | TBSButtonTag >> beSmall [
132 | "Creates an small sized button."
133 | self beSmallIf: true
134 | ]
135 |
136 | { #category : #sizes }
137 | TBSButtonTag >> beSmallIf: aBlock [
138 | "Creates a small sized button if aBlock is true."
139 | self class: 'btn-sm' if: aBlock
140 | ]
141 |
142 | { #category : #options }
143 | TBSButtonTag >> beSuccess [
144 | "Creates an Success type button if aBlock is true."
145 | self beSuccessIf: true
146 | ]
147 |
148 | { #category : #options }
149 | TBSButtonTag >> beSuccessIf: aBlock [
150 | "Creates an Success type button if aBlock is true."
151 | self class: 'btn-success' if: aBlock
152 | ]
153 |
154 | { #category : #options }
155 | TBSButtonTag >> beWarning [
156 | "Creates an Warning type button."
157 | self beWarningIf: true
158 | ]
159 |
160 | { #category : #options }
161 | TBSButtonTag >> beWarningIf: aBlock [
162 | "Creates an Warning type button if aBlock is true."
163 | self class: 'btn-warning' if: aBlock
164 | ]
165 |
166 | { #category : #callbacks }
167 | TBSButtonTag >> cancelCallback: aBlock [
168 | self name: (self storeCallback: (WACancelActionCallback on: aBlock))
169 | ]
170 |
171 | { #category : #options }
172 | TBSButtonTag >> dataDismiss: aString [
173 |
174 | self attributes at: 'data-dismiss' put: aString
175 | ]
176 |
177 | { #category : #initialization }
178 | TBSButtonTag >> initialize [
179 | super initialize.
180 | self resetType.
181 | self class: 'btn'
182 | ]
183 |
184 | { #category : #private }
185 | TBSButtonTag >> resetType [
186 | type := nil
187 |
188 | ]
189 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSOfferExample.class.st:
--------------------------------------------------------------------------------
1 | "
2 | An example for an offer built using Bootstrap
3 | "
4 | Class {
5 | #name : #TBSOfferExample,
6 | #superclass : #TBSBootstrapExample,
7 | #category : 'Bootstrap-Examples-Widgets-Canvas'
8 | }
9 |
10 | { #category : #accessing }
11 | TBSOfferExample class >> exampleName [
12 | ^ 'Offer'
13 | ]
14 |
15 | { #category : #rendering }
16 | TBSOfferExample >> renderExampleOn: html [
17 |
18 | html tbsContainer: [
19 | html tbsRow: [
20 |
21 | "Default"
22 | html tbsColumn extraSmallSize: 3; with: [
23 | html tbsOffer beDefault with: [
24 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
25 | html tbsOfferContent: [
26 | html heading level: 3; with: 'A default offer'.
27 | html paragraph: 'And a little description']]].
28 |
29 | "Success"
30 | html tbsColumn extraSmallSize: 3; with: [
31 | html tbsOffer beSuccess with: [
32 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
33 | html tbsOfferContent: [
34 | html heading level: 3; with: 'A success offer'.
35 | html paragraph: 'And a little description']]].
36 |
37 | "Primary rounded"
38 | html tbsColumn extraSmallSize: 3; with: [
39 | html tbsOffer bePrimary; beRounded; with: [
40 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
41 | html tbsOfferContent: [
42 | html heading level: 3; with: 'A primary-rounded offer'.
43 | html paragraph: 'And a little description']]].
44 |
45 | "Info"
46 | html tbsColumn extraSmallSize: 3; with: [
47 | html tbsOffer beInfo; with: [
48 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
49 | html tbsOfferContent: [
50 | html heading level: 3; with: 'An info offer'.
51 | html paragraph: 'And a little description']]].
52 |
53 | "Warning"
54 | html tbsColumn extraSmallSize: 3; with: [
55 | html tbsOffer beWarning; with: [
56 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
57 | html tbsOfferContent: [
58 | html heading level: 3; with: 'An warning offer'.
59 | html paragraph: 'And a little description']]].
60 |
61 | "Danger rounded"
62 | html tbsColumn extraSmallSize: 3; with: [
63 | html tbsOffer beDanger; beRounded; with: [
64 | html tbsOfferShape: [ html tbsOfferShapeText: 'top' ].
65 | html tbsOfferContent: [
66 | html heading level: 3; with: 'A dangerrous rounded offer'.
67 | html paragraph: 'And a little description']]].
68 | ]
69 | ]
70 | ]
71 |
72 | { #category : #styling }
73 | TBSOfferExample >> style [
74 |
75 | ^'
76 | .offer-shape{
77 | border-style: solid;
78 | border-width: 0 70px 40px 0; float:right; height: 0px; width: 0px;
79 | -ms-transform:rotate(360deg); /* IE 9 */
80 | -o-transform: rotate(360deg); /* Opera 10.5 */
81 | -webkit-transform:rotate(360deg); /* Safari and Chrome */
82 | transform:rotate(360deg);
83 | }
84 | .offer {
85 | background:#fff;
86 | border:1px solid #ddd;
87 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
88 | margin: 15px 0;
89 | overflow:hidden;
90 | }
91 |
92 | .offer-rounded {
93 | border-radius:7px;
94 | }
95 |
96 | .offer-danger { border-color: #d9534f; }
97 | .offer-danger .offer-shape{
98 | border-color: transparent #d9534f transparent transparent;
99 | border-color: rgba(255,255,255,0) #d9534f rgba(255,255,255,0) rgba(255,255,255,0);
100 | }
101 |
102 | .offer-success {
103 | border-color: #5cb85c; }
104 | .offer-success .offer-shape{
105 | border-color: transparent #5cb85c transparent transparent;
106 | border-color: rgba(255,255,255,0) #5cb85c rgba(255,255,255,0) rgba(255,255,255,0);
107 | }
108 |
109 | .offer-default { border-color: #999999; }
110 | .offer-default .offer-shape{
111 | border-color: transparent #999999 transparent transparent;
112 | border-color: rgba(255,255,255,0) #999999 rgba(255,255,255,0) rgba(255,255,255,0);
113 | }
114 |
115 | .offer-primary { border-color: #428bca; }
116 | .offer-primary .offer-shape{
117 | border-color: transparent #428bca transparent transparent;
118 | border-color: rgba(255,255,255,0) #428bca rgba(255,255,255,0) rgba(255,255,255,0);
119 | }
120 |
121 | .offer-info { border-color: #5bc0de; }
122 | .offer-info .offer-shape{
123 | border-color: transparent #5bc0de transparent transparent;
124 | border-color: rgba(255,255,255,0) #5bc0de rgba(255,255,255,0) rgba(255,255,255,0);
125 | }
126 |
127 | .offer-warning { border-color: #f0ad4e; }
128 | .offer-warning .offer-shape{
129 | border-color: transparent #f0ad4e transparent transparent;
130 | border-color: rgba(255,255,255,0) #f0ad4e rgba(255,255,255,0) rgba(255,255,255,0);
131 | }
132 |
133 | .offer-shape-text{
134 | color:#fff;
135 | font-size:12px;
136 | font-weight:bold;
137 | position:relative;
138 | right:-40px;
139 | top:2px;
140 | white-space: nowrap;
141 | -ms-transform:rotate(30deg); /* IE 9 */
142 | -o-transform: rotate(360deg); /* Opera 10.5 */
143 | -webkit-transform:rotate(30deg); /* Safari and Chrome */
144 | transform:rotate(30deg);
145 | }
146 |
147 | .offer-content{
148 | padding:0 20px 10px;
149 | }
150 |
151 |
152 | '
153 | ]
154 |
--------------------------------------------------------------------------------
/src/Bootstrap-Examples/TBSBootstrapTableExampleLibrary.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Provide JSON example from json directory in https://github.com/wenzhixin/bootstrap-table-examples
3 | "
4 | Class {
5 | #name : #TBSBootstrapTableExampleLibrary,
6 | #superclass : #WAFileMetadataLibrary,
7 | #category : 'Bootstrap-Examples-Widgets-Table'
8 | }
9 |
10 | { #category : #'uploaded metadata' }
11 | TBSBootstrapTableExampleLibrary >> data1Json [
12 | ^ WAFileLibraryResource
13 | filepath: 'data1.json'
14 | mimeType: (WAMimeType main: 'application' sub: 'octet-stream')
15 | cacheDuration: (Duration days: 0 hours: 0 minutes: 30 seconds: 0)
16 | contents: (GRDelayedSend receiver: self selector: #data1JsonContent)
17 | ]
18 |
19 | { #category : #uploaded }
20 | TBSBootstrapTableExampleLibrary >> data1JsonContent [
21 | ^ #[91 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 48 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 48 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 48 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 50 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 50 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 50 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 51 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 51 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 51 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 52 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 52 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 52 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 53 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 53 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 53 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 54 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 54 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 54 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 55 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 55 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 55 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 56 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 56 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 56 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 57 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 57 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 57 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 48 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 48 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 48 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 49 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 49 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 49 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 50 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 50 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 50 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 51 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 51 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 51 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 52 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 52 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 52 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 53 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 53 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 53 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 54 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 54 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 54 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 55 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 55 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 55 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 56 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 56 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 56 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 49 57 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 49 57 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 49 57 34 13 10 32 32 32 32 125 44 13 10 32 32 32 32 123 13 10 32 32 32 32 32 32 32 32 34 105 100 34 58 32 50 48 44 13 10 32 32 32 32 32 32 32 32 34 110 97 109 101 34 58 32 34 73 116 101 109 32 50 48 34 44 13 10 32 32 32 32 32 32 32 32 34 112 114 105 99 101 34 58 32 34 36 50 48 34 13 10 32 32 32 32 125 13 10 93]
22 | ]
23 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSDeploymentLibraryRTL.class.st:
--------------------------------------------------------------------------------
1 | "
2 | self recursivelyAddAllFilesIn: 'C:\bootstrap-3.1.1-dist\'
3 | "
4 | Class {
5 | #name : #TBSDeploymentLibraryRTL,
6 | #superclass : #TBSDeploymentLibrary,
7 | #category : 'Bootstrap-Core-Libraries'
8 | }
9 |
10 | { #category : #'uploaded metadata' }
11 | TBSDeploymentLibraryRTL >> bootstraprtlminCss [
12 | ^ WAFileLibraryResource
13 | filepath: 'bootstrap-rtl.min.css'
14 | mimeType: (WAMimeType main: 'text' sub: 'css')
15 | cacheDuration: (Duration days: 0 hours: 0 minutes: 30 seconds: 0)
16 | contents: (GRDelayedSend receiver: self selector: #bootstraprtlminCssContent)
17 | ]
18 |
19 | { #category : #uploaded }
20 | TBSDeploymentLibraryRTL >> bootstraprtlminCssContent [
21 | ^ '/*******************************************************************************
22 | * bootstrap-rtl (Version 3.2.0-rc5)
23 | * Author: Morteza Ansarinia (http://github.com/morteza)
24 | * Created on: September 08,2014
25 | * Project: bootstrap-rtl
26 | * Copyright: See the file "LICENSE.md" for the full license governing this code.
27 | *******************************************************************************/
28 |
29 | html{direction:rtl}body{direction:rtl}.list-unstyled{padding-right:0;padding-left:initial}.list-inline{padding-right:0;padding-left:initial;margin-right:-5px;margin-left:0}dd{margin-right:0;margin-left:initial}@media (min-width:768px){.dl-horizontal dt{float:right;clear:right;text-align:left}.dl-horizontal dd{margin-right:180px;margin-left:0}}blockquote{border-right:5px solid #eee;border-left:0}.blockquote-reverse,blockquote.pull-left{padding-left:15px;padding-right:0;border-left:5px solid #eee;border-right:0;text-align:left}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:right}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{left:100%;right:auto}.col-xs-pull-11{left:91.66666667%;right:auto}.col-xs-pull-10{left:83.33333333%;right:auto}.col-xs-pull-9{left:75%;right:auto}.col-xs-pull-8{left:66.66666667%;right:auto}.col-xs-pull-7{left:58.33333333%;right:auto}.col-xs-pull-6{left:50%;right:auto}.col-xs-pull-5{left:41.66666667%;right:auto}.col-xs-pull-4{left:33.33333333%;right:auto}.col-xs-pull-3{left:25%;right:auto}.col-xs-pull-2{left:16.66666667%;right:auto}.col-xs-pull-1{left:8.33333333%;right:auto}.col-xs-pull-0{left:auto;right:auto}.col-xs-push-12{right:100%;left:0}.col-xs-push-11{right:91.66666667%;left:0}.col-xs-push-10{right:83.33333333%;left:0}.col-xs-push-9{right:75%;left:0}.col-xs-push-8{right:66.66666667%;left:0}.col-xs-push-7{right:58.33333333%;left:0}.col-xs-push-6{right:50%;left:0}.col-xs-push-5{right:41.66666667%;left:0}.col-xs-push-4{right:33.33333333%;left:0}.col-xs-push-3{right:25%;left:0}.col-xs-push-2{right:16.66666667%;left:0}.col-xs-push-1{right:8.33333333%;left:0}.col-xs-push-0{right:auto;left:0}.col-xs-offset-12{margin-right:100%;margin-left:0}.col-xs-offset-11{margin-right:91.66666667%;margin-left:0}.col-xs-offset-10{margin-right:83.33333333%;margin-left:0}.col-xs-offset-9{margin-right:75%;margin-left:0}.col-xs-offset-8{margin-right:66.66666667%;margin-left:0}.col-xs-offset-7{margin-right:58.33333333%;margin-left:0}.col-xs-offset-6{margin-right:50%;margin-left:0}.col-xs-offset-5{margin-right:41.66666667%;margin-left:0}.col-xs-offset-4{margin-right:33.33333333%;margin-left:0}.col-xs-offset-3{margin-right:25%;margin-left:0}.col-xs-offset-2{margin-right:16.66666667%;margin-left:0}.col-xs-offset-1{margin-right:8.33333333%;margin-left:0}.col-xs-offset-0{margin-right:0;margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:right}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{left:100%;right:auto}.col-sm-pull-11{left:91.66666667%;right:auto}.col-sm-pull-10{left:83.33333333%;right:auto}.col-sm-pull-9{left:75%;right:auto}.col-sm-pull-8{left:66.66666667%;right:auto}.col-sm-pull-7{left:58.33333333%;right:auto}.col-sm-pull-6{left:50%;right:auto}.col-sm-pull-5{left:41.66666667%;right:auto}.col-sm-pull-4{left:33.33333333%;right:auto}.col-sm-pull-3{left:25%;right:auto}.col-sm-pull-2{left:16.66666667%;right:auto}.col-sm-pull-1{left:8.33333333%;right:auto}.col-sm-pull-0{left:auto;right:auto}.col-sm-push-12{right:100%;left:0}.col-sm-push-11{right:91.66666667%;left:0}.col-sm-push-10{right:83.33333333%;left:0}.col-sm-push-9{right:75%;left:0}.col-sm-push-8{right:66.66666667%;left:0}.col-sm-push-7{right:58.33333333%;left:0}.col-sm-push-6{right:50%;left:0}.col-sm-push-5{right:41.66666667%;left:0}.col-sm-push-4{right:33.33333333%;left:0}.col-sm-push-3{right:25%;left:0}.col-sm-push-2{right:16.66666667%;left:0}.col-sm-push-1{right:8.33333333%;left:0}.col-sm-push-0{right:auto;left:0}.col-sm-offset-12{margin-right:100%;margin-left:0}.col-sm-offset-11{margin-right:91.66666667%;margin-left:0}.col-sm-offset-10{margin-right:83.33333333%;margin-left:0}.col-sm-offset-9{margin-right:75%;margin-left:0}.col-sm-offset-8{margin-right:66.66666667%;margin-left:0}.col-sm-offset-7{margin-right:58.33333333%;margin-left:0}.col-sm-offset-6{margin-right:50%;margin-left:0}.col-sm-offset-5{margin-right:41.66666667%;margin-left:0}.col-sm-offset-4{margin-right:33.33333333%;margin-left:0}.col-sm-offset-3{margin-right:25%;margin-left:0}.col-sm-offset-2{margin-right:16.66666667%;margin-left:0}.col-sm-offset-1{margin-right:8.33333333%;margin-left:0}.col-sm-offset-0{margin-right:0;margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:right}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{left:100%;right:auto}.col-md-pull-11{left:91.66666667%;right:auto}.col-md-pull-10{left:83.33333333%;right:auto}.col-md-pull-9{left:75%;right:auto}.col-md-pull-8{left:66.66666667%;right:auto}.col-md-pull-7{left:58.33333333%;right:auto}.col-md-pull-6{left:50%;right:auto}.col-md-pull-5{left:41.66666667%;right:auto}.col-md-pull-4{left:33.33333333%;right:auto}.col-md-pull-3{left:25%;right:auto}.col-md-pull-2{left:16.66666667%;right:auto}.col-md-pull-1{left:8.33333333%;right:auto}.col-md-pull-0{left:auto;right:auto}.col-md-push-12{right:100%;left:0}.col-md-push-11{right:91.66666667%;left:0}.col-md-push-10{right:83.33333333%;left:0}.col-md-push-9{right:75%;left:0}.col-md-push-8{right:66.66666667%;left:0}.col-md-push-7{right:58.33333333%;left:0}.col-md-push-6{right:50%;left:0}.col-md-push-5{right:41.66666667%;left:0}.col-md-push-4{right:33.33333333%;left:0}.col-md-push-3{right:25%;left:0}.col-md-push-2{right:16.66666667%;left:0}.col-md-push-1{right:8.33333333%;left:0}.col-md-push-0{right:auto;left:0}.col-md-offset-12{margin-right:100%;margin-left:0}.col-md-offset-11{margin-right:91.66666667%;margin-left:0}.col-md-offset-10{margin-right:83.33333333%;margin-left:0}.col-md-offset-9{margin-right:75%;margin-left:0}.col-md-offset-8{margin-right:66.66666667%;margin-left:0}.col-md-offset-7{margin-right:58.33333333%;margin-left:0}.col-md-offset-6{margin-right:50%;margin-left:0}.col-md-offset-5{margin-right:41.66666667%;margin-left:0}.col-md-offset-4{margin-right:33.33333333%;margin-left:0}.col-md-offset-3{margin-right:25%;margin-left:0}.col-md-offset-2{margin-right:16.66666667%;margin-left:0}.col-md-offset-1{margin-right:8.33333333%;margin-left:0}.col-md-offset-0{margin-right:0;margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:right}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{left:100%;right:auto}.col-lg-pull-11{left:91.66666667%;right:auto}.col-lg-pull-10{left:83.33333333%;right:auto}.col-lg-pull-9{left:75%;right:auto}.col-lg-pull-8{left:66.66666667%;right:auto}.col-lg-pull-7{left:58.33333333%;right:auto}.col-lg-pull-6{left:50%;right:auto}.col-lg-pull-5{left:41.66666667%;right:auto}.col-lg-pull-4{left:33.33333333%;right:auto}.col-lg-pull-3{left:25%;right:auto}.col-lg-pull-2{left:16.66666667%;right:auto}.col-lg-pull-1{left:8.33333333%;right:auto}.col-lg-pull-0{left:auto;right:auto}.col-lg-push-12{right:100%;left:0}.col-lg-push-11{right:91.66666667%;left:0}.col-lg-push-10{right:83.33333333%;left:0}.col-lg-push-9{right:75%;left:0}.col-lg-push-8{right:66.66666667%;left:0}.col-lg-push-7{right:58.33333333%;left:0}.col-lg-push-6{right:50%;left:0}.col-lg-push-5{right:41.66666667%;left:0}.col-lg-push-4{right:33.33333333%;left:0}.col-lg-push-3{right:25%;left:0}.col-lg-push-2{right:16.66666667%;left:0}.col-lg-push-1{right:8.33333333%;left:0}.col-lg-push-0{right:auto;left:0}.col-lg-offset-12{margin-right:100%;margin-left:0}.col-lg-offset-11{margin-right:91.66666667%;margin-left:0}.col-lg-offset-10{margin-right:83.33333333%;margin-left:0}.col-lg-offset-9{margin-right:75%;margin-left:0}.col-lg-offset-8{margin-right:66.66666667%;margin-left:0}.col-lg-offset-7{margin-right:58.33333333%;margin-left:0}.col-lg-offset-6{margin-right:50%;margin-left:0}.col-lg-offset-5{margin-right:41.66666667%;margin-left:0}.col-lg-offset-4{margin-right:33.33333333%;margin-left:0}.col-lg-offset-3{margin-right:25%;margin-left:0}.col-lg-offset-2{margin-right:16.66666667%;margin-left:0}.col-lg-offset-1{margin-right:8.33333333%;margin-left:0}.col-lg-offset-0{margin-right:0;margin-left:0}}th{text-align:right}@media screen and (max-width:767px){.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-right:0;border-left:initial}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-left:0;border-right:initial}}.radio label,.checkbox label{padding-right:20px;padding-left:initial}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{margin-right:-20px;margin-left:auto}.radio-inline,.checkbox-inline{padding-right:20px;padding-left:0}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-right:10px;margin-left:0}.has-feedback .form-control{padding-left:42.5px;padding-right:12px}.form-control-feedback{left:0;right:auto}@media (min-width:768px){.form-inline label{padding-right:0;padding-left:initial}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{margin-right:0;margin-left:auto}}@media (min-width:768px){.form-horizontal .control-label{text-align:left}}.form-horizontal .has-feedback .form-control-feedback{left:15px;right:auto}.caret{margin-right:2px;margin-left:0}.dropdown-menu{right:0;left:auto;float:left;text-align:right}.dropdown-menu.pull-right{left:0;right:auto;float:right}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group>.btn,.btn-group-vertical>.btn{float:right}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-right:-1px;margin-left:0}.btn-toolbar{margin-right:-5px;margin-left:0}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:right}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-right:5px;margin-left:0}.btn-group>.btn:first-child{margin-right:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:4px;border-bottom-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group{float:right}.btn-group.btn-group-justified>.btn,.btn-group.btn-group-justified>.btn-group{float:none}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.btn .caret{margin-right:0}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-right:0}.input-group .form-control{float:right}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:first-child{border-right:1px solid #ccc;border-left:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:last-child{border-left:1px solid #ccc;border-right:0}.input-group-btn>.btn+.btn{margin-right:-1px;margin-left:auto}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-left:-1px;margin-right:auto}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-right:-1px;margin-left:auto}.nav{padding-right:0;padding-left:initial}.nav-tabs>li{float:right}.nav-tabs>li>a{margin-left:auto;margin-right:-2px;border-radius:4px 4px 0 0}.nav-pills>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-right:2px;margin-left:auto}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-right:0;margin-left:auto}.nav-justified>.dropdown .dropdown-menu{right:auto}.nav-tabs-justified>li>a{margin-left:0;margin-right:auto}@media (min-width:768px){.nav-tabs-justified>li>a{border-radius:4px 4px 0 0}}@media (min-width:768px){.navbar-header{float:right}}.navbar-collapse{padding-right:15px;padding-left:15px}.navbar-brand{float:right}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-right:-15px;margin-left:auto}}.navbar-toggle{float:left;margin-left:15px;margin-right:auto}@media (max-width:767px){.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 25px 5px 15px}}@media (min-width:768px){.navbar-nav{float:right}.navbar-nav>li{float:right}.navbar-nav.navbar-right:last-child{margin-left:-15px;margin-right:auto}.navbar-nav.navbar-right.flip{float:left!important}.navbar-nav.navbar-right .dropdown-menu{left:0;right:auto}}@media (min-width:768px){.navbar-text{float:right}.navbar-text.navbar-right:last-child{margin-left:0;margin-right:auto}}.pagination{padding-right:0}.pagination>li>a,.pagination>li>span{float:right;margin-right:-1px;margin-left:0}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-right-radius:4px;border-top-right-radius:4px;border-bottom-left-radius:0;border-top-left-radius:0}.pagination>li:last-child>a,.pagination>li:last-child>span{margin-right:-1px;border-bottom-left-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-top-right-radius:0}.pager{padding-right:0;padding-left:initial}.pager .next>a,.pager .next>span{float:left}.pager .previous>a,.pager .previous>span{float:right}.nav-pills>li>a>.badge{margin-left:0;margin-right:3px}.alert-dismissable,.alert-dismissible{padding-left:35px;padding-right:15px}.alert-dismissable .close,.alert-dismissible .close{right:0;left:21px}.progress-bar{float:right}.media>.pull-left{margin-right:10px}.media>.pull-left.flip{margin-right:0;margin-left:10px}.media>.pull-right{margin-left:10px}.media>.pull-right.flip{margin-left:0;margin-right:10px}.media-list{padding-right:0;padding-left:initial;list-style:none}.list-group{padding-right:0;padding-left:initial}.list-group-item>.badge{float:left}.list-group-item>.badge+.badge{margin-right:5px;margin-left:auto}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-right-radius:3px;border-top-left-radius:0}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-left-radius:3px;border-top-right-radius:0}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px;border-top-right-radius:0}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px;border-top-left-radius:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-right:0;border-left:none}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:none;border-left:0}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{right:0;left:auto}.close{float:left}.modal-footer{text-align:left}.modal-footer .btn+.btn{margin-left:auto;margin-right:5px}.modal-footer .btn-group .btn+.btn{margin-right:-1px;margin-left:auto}.modal-footer .btn-block+.btn-block{margin-right:0;margin-left:auto}.popover{left:auto;text-align:right}.popover.top>.arrow{right:50%;left:auto;margin-right:-11px;margin-left:auto}.popover.top>.arrow:after{margin-right:-10px;margin-left:auto}.popover.bottom>.arrow{right:50%;left:auto;margin-right:-11px;margin-left:auto}.popover.bottom>.arrow:after{margin-right:-10px;margin-left:auto}.carousel-control{right:0;bottom:0}.carousel-control.left{right:auto;left:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.5)0),color-stop(rgba(0,0,0,.0001)100%));background-image:-o-linear-gradient(left,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-image:linear-gradient(to right,rgba(0,0,0,.5)0,rgba(0,0,0,.0001)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=''#80000000'', endColorstr=''#00000000'', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,.0001)0),color-stop(rgba(0,0,0,.5)100%));background-image:-o-linear-gradient(left,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001)0,rgba(0,0,0,.5)100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=''#00000000'', endColorstr=''#80000000'', GradientType=1)}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;right:auto;margin-right:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;left:auto;margin-left:-10px}.carousel-indicators{right:50%;left:0;margin-right:-30%;margin-left:0;padding-left:0}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:0;margin-right:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-left:0;margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}}.pull-right.flip{float:left!important}.pull-left.flip{float:right!important}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}'
30 | ]
31 |
32 | { #category : #accessing }
33 | TBSDeploymentLibraryRTL >> selectorsToInclude [
34 | ^ #(cssbootstrapminCss bootstraprtlminCss cssbootstrapthememinCss jsbootstrapminJs holderminJs)
35 | ]
36 |
--------------------------------------------------------------------------------
/src/Bootstrap-Core/TBSGlyphTag.class.st:
--------------------------------------------------------------------------------
1 | "
2 | Boostraph glyph icon
3 | "
4 | Class {
5 | #name : #TBSGlyphTag,
6 | #superclass : #WATagBrush,
7 | #category : 'Bootstrap-Core-Canvas'
8 | }
9 |
10 | { #category : #'default icons' }
11 | TBSGlyphTag >> iconAdjust [
12 |
13 | ^self class: 'glyphicon-adjust'
14 | ]
15 |
16 | { #category : #'default icons text' }
17 | TBSGlyphTag >> iconAlignCenter [
18 |
19 | ^self class: 'glyphicon-align-center'
20 | ]
21 |
22 | { #category : #'default icons text' }
23 | TBSGlyphTag >> iconAlignJustify [
24 |
25 | ^self class: 'glyphicon-align-justify'
26 | ]
27 |
28 | { #category : #'default icons text' }
29 | TBSGlyphTag >> iconAlignLeft [
30 |
31 | ^self class: 'glyphicon-align-left'
32 | ]
33 |
34 | { #category : #'default icons text' }
35 | TBSGlyphTag >> iconAlignRight [
36 |
37 | ^self class: 'glyphicon-align-right'
38 | ]
39 |
40 | { #category : #'default icons arrows' }
41 | TBSGlyphTag >> iconArrowDown [
42 |
43 | ^self class: 'glyphicon-arrow-down'
44 | ]
45 |
46 | { #category : #'default icons arrows' }
47 | TBSGlyphTag >> iconArrowLeft [
48 |
49 | ^self class: 'glyphicon-arrow-left'
50 | ]
51 |
52 | { #category : #'default icons arrows' }
53 | TBSGlyphTag >> iconArrowRight [
54 |
55 | ^self class: 'glyphicon-arrow-right'
56 | ]
57 |
58 | { #category : #'default icons arrows' }
59 | TBSGlyphTag >> iconArrowUp [
60 |
61 | ^self class: 'glyphicon-arrow-up'
62 | ]
63 |
64 | { #category : #'default icons' }
65 | TBSGlyphTag >> iconAsterisk [
66 |
67 | ^self class: 'glyphicon-asterisk'
68 | ]
69 |
70 | { #category : #'default icons media navigation' }
71 | TBSGlyphTag >> iconBackward [
72 |
73 | ^self class: 'glyphicon-backward'
74 | ]
75 |
76 | { #category : #'default icons' }
77 | TBSGlyphTag >> iconBanCircle [
78 |
79 | ^self class: 'glyphicon-ban-circle'
80 | ]
81 |
82 | { #category : #'default icons' }
83 | TBSGlyphTag >> iconBarcode [
84 |
85 | ^self class: 'glyphicon-barcode'
86 | ]
87 |
88 | { #category : #'default icons' }
89 | TBSGlyphTag >> iconBell [
90 |
91 | ^self class: 'glyphicon-bell'
92 | ]
93 |
94 | { #category : #'default icons text' }
95 | TBSGlyphTag >> iconBold [
96 |
97 | ^self class: 'glyphicon-bold'
98 | ]
99 |
100 | { #category : #'default icons internet' }
101 | TBSGlyphTag >> iconBook [
102 |
103 | ^self class: 'glyphicon-book'
104 | ]
105 |
106 | { #category : #'default icons internet' }
107 | TBSGlyphTag >> iconBookmark [
108 |
109 | ^self class: 'glyphicon-bookmark'
110 | ]
111 |
112 | { #category : #'default icons money' }
113 | TBSGlyphTag >> iconBriefcase [
114 |
115 | ^self class: 'glyphicon-briefcase'
116 | ]
117 |
118 | { #category : #'default icons' }
119 | TBSGlyphTag >> iconBullhorn [
120 |
121 | ^self class: 'glyphicon-bullhorn'
122 | ]
123 |
124 | { #category : #'default icons common' }
125 | TBSGlyphTag >> iconCalendar [
126 |
127 | ^self class: 'glyphicon-calendar'
128 | ]
129 |
130 | { #category : #'default icons media video' }
131 | TBSGlyphTag >> iconCamera [
132 |
133 | ^self class: 'glyphicon-camera'
134 | ]
135 |
136 | { #category : #'default icons legal' }
137 | TBSGlyphTag >> iconCertificate [
138 |
139 | ^self class: 'glyphicon-certificate'
140 | ]
141 |
142 | { #category : #'default icons' }
143 | TBSGlyphTag >> iconCheck [
144 |
145 | ^self class: 'glyphicon-check'
146 | ]
147 |
148 | { #category : #'default icons arrows' }
149 | TBSGlyphTag >> iconChevronDown [
150 |
151 | ^self class: 'glyphicon-chevron-down'
152 | ]
153 |
154 | { #category : #'default icons arrows' }
155 | TBSGlyphTag >> iconChevronLeft [
156 |
157 | ^self class: 'glyphicon-chevron-left'
158 | ]
159 |
160 | { #category : #'default icons arrows' }
161 | TBSGlyphTag >> iconChevronRight [
162 |
163 | ^self class: 'glyphicon-chevron-right'
164 | ]
165 |
166 | { #category : #'default icons arrows' }
167 | TBSGlyphTag >> iconChevronUp [
168 |
169 | ^self class: 'glyphicon-chevron-up'
170 | ]
171 |
172 | { #category : #'default icons arrows' }
173 | TBSGlyphTag >> iconCircleArrowDown [
174 |
175 | ^self class: 'glyphicon-circle-arrow-down'
176 | ]
177 |
178 | { #category : #'default icons arrows' }
179 | TBSGlyphTag >> iconCircleArrowLeft [
180 |
181 | ^self class: 'glyphicon-circle-arrow-left'
182 | ]
183 |
184 | { #category : #'default icons arrows' }
185 | TBSGlyphTag >> iconCircleArrowRight [
186 |
187 | ^self class: 'glyphicon-circle-arrow-right'
188 | ]
189 |
190 | { #category : #'default icons arrows' }
191 | TBSGlyphTag >> iconCircleArrowUp [
192 |
193 | ^self class: 'glyphicon-circle-arrow-up'
194 | ]
195 |
196 | { #category : #'default icons internet' }
197 | TBSGlyphTag >> iconCloud [
198 |
199 | ^self class: 'glyphicon-cloud'
200 | ]
201 |
202 | { #category : #'default icons internet' }
203 | TBSGlyphTag >> iconCloudDownload [
204 |
205 | ^self class: 'glyphicon-cloud-download'
206 | ]
207 |
208 | { #category : #'default icons internet' }
209 | TBSGlyphTag >> iconCloudUpload [
210 |
211 | ^self class: 'glyphicon-cloud-upload'
212 | ]
213 |
214 | { #category : #'default icons' }
215 | TBSGlyphTag >> iconCog [
216 |
217 | ^self class: 'glyphicon-cog'
218 | ]
219 |
220 | { #category : #'default icons' }
221 | TBSGlyphTag >> iconCollapseDown [
222 |
223 | ^self class: 'glyphicon-collapse-down'
224 | ]
225 |
226 | { #category : #'default icons' }
227 | TBSGlyphTag >> iconCollapseUp [
228 |
229 | ^self class: 'glyphicon-collapse-up'
230 | ]
231 |
232 | { #category : #'default icons text' }
233 | TBSGlyphTag >> iconComment [
234 |
235 | ^self class: 'glyphicon-comment'
236 | ]
237 |
238 | { #category : #'default icons internet' }
239 | TBSGlyphTag >> iconCompressed [
240 |
241 | ^self class: 'glyphicon-compressed'
242 | ]
243 |
244 | { #category : #'default icons legal' }
245 | TBSGlyphTag >> iconCopyrightMark [
246 |
247 | ^self class: 'glyphicon-copyright-mark'
248 | ]
249 |
250 | { #category : #'default icons money' }
251 | TBSGlyphTag >> iconCreditCard [
252 |
253 | ^self class: 'glyphicon-credit-card'
254 | ]
255 |
256 | { #category : #'default icons' }
257 | TBSGlyphTag >> iconCutlery [
258 |
259 | ^self class: 'glyphicon-cutlery'
260 | ]
261 |
262 | { #category : #'default icons common' }
263 | TBSGlyphTag >> iconDashbord [
264 |
265 | ^self class: 'glyphicon-dashboard'
266 | ]
267 |
268 | { #category : #'default icons file handling' }
269 | TBSGlyphTag >> iconDownload [
270 |
271 | ^self class: 'glyphicon-download'
272 | ]
273 |
274 | { #category : #'default icons file handling' }
275 | TBSGlyphTag >> iconDownloadAlt [
276 |
277 | ^self class: 'glyphicon-download-alt'
278 | ]
279 |
280 | { #category : #'default icons' }
281 | TBSGlyphTag >> iconEarphone [
282 |
283 | ^self class: 'glyphicon-earphone'
284 | ]
285 |
286 | { #category : #'default icons text' }
287 | TBSGlyphTag >> iconEdit [
288 |
289 | ^self class: 'glyphicon-edit'
290 | ]
291 |
292 | { #category : #'default icons media navigation' }
293 | TBSGlyphTag >> iconEject [
294 |
295 | ^self class: 'glyphicon-eject'
296 | ]
297 |
298 | { #category : #'default icons money' }
299 | TBSGlyphTag >> iconEnvelope [
300 |
301 | ^self class: 'glyphicon-envelope'
302 | ]
303 |
304 | { #category : #'default icons money' }
305 | TBSGlyphTag >> iconEuro [
306 |
307 | ^self class: 'glyphicon-euro'
308 | ]
309 |
310 | { #category : #'default icons' }
311 | TBSGlyphTag >> iconExclamationSign [
312 |
313 | ^self class: 'glyphicon-exclamation-sign'
314 | ]
315 |
316 | { #category : #'default icons' }
317 | TBSGlyphTag >> iconExpand [
318 |
319 | ^self class: 'glyphicon-expand'
320 | ]
321 |
322 | { #category : #'default icons' }
323 | TBSGlyphTag >> iconExport [
324 |
325 | ^self class: 'glyphicon-export'
326 | ]
327 |
328 | { #category : #'default icons' }
329 | TBSGlyphTag >> iconEyeClose [
330 |
331 | ^self class: 'glyphicon-eye-close'
332 | ]
333 |
334 | { #category : #'default icons' }
335 | TBSGlyphTag >> iconEyeOpen [
336 |
337 | ^self class: 'glyphicon-eye-open'
338 | ]
339 |
340 | { #category : #'default icons media video' }
341 | TBSGlyphTag >> iconFacetimeVideo [
342 |
343 | ^self class: 'glyphicon-facetime-video'
344 | ]
345 |
346 | { #category : #'default icons media navigation' }
347 | TBSGlyphTag >> iconFastBackward [
348 |
349 | ^self class: 'glyphicon-fast-backward'
350 | ]
351 |
352 | { #category : #'default icons media navigation' }
353 | TBSGlyphTag >> iconFastForward [
354 |
355 | ^self class: 'glyphicon-fast-forward'
356 | ]
357 |
358 | { #category : #'default icons file handling' }
359 | TBSGlyphTag >> iconFile [
360 |
361 | ^self class: 'glyphicon-file'
362 | ]
363 |
364 | { #category : #'default icons media video' }
365 | TBSGlyphTag >> iconFilm [
366 |
367 | ^self class: 'glyphicon-film'
368 | ]
369 |
370 | { #category : #'default icons' }
371 | TBSGlyphTag >> iconFilter [
372 |
373 | ^self class: 'glyphicon-filter'
374 | ]
375 |
376 | { #category : #'default icons' }
377 | TBSGlyphTag >> iconFire [
378 |
379 | ^self class: 'glyphicon-fire'
380 | ]
381 |
382 | { #category : #'default icons' }
383 | TBSGlyphTag >> iconFlag [
384 |
385 | ^self class: 'glyphicon-flag'
386 | ]
387 |
388 | { #category : #'default icons' }
389 | TBSGlyphTag >> iconFlash [
390 |
391 | ^self class: 'glyphicon-flash'
392 | ]
393 |
394 | { #category : #'default icons file handling' }
395 | TBSGlyphTag >> iconFloppyDisk [
396 |
397 | ^self class: 'glyphicon-floppy-disk'
398 | ]
399 |
400 | { #category : #'default icons file handling' }
401 | TBSGlyphTag >> iconFloppyOpen [
402 |
403 | ^self class: 'glyphicon-floppy-open'
404 | ]
405 |
406 | { #category : #'default icons file handling' }
407 | TBSGlyphTag >> iconFloppyRemove [
408 |
409 | ^self class: 'glyphicon-floppy-remove'
410 | ]
411 |
412 | { #category : #'default icons file handling' }
413 | TBSGlyphTag >> iconFloppySave [
414 |
415 | ^self class: 'glyphicon-floppy-save'
416 | ]
417 |
418 | { #category : #'default icons file handling' }
419 | TBSGlyphTag >> iconFloppySaved [
420 |
421 | ^self class: 'glyphicon-floppy-saved'
422 | ]
423 |
424 | { #category : #'default icons file handling' }
425 | TBSGlyphTag >> iconFolderClose [
426 |
427 | ^self class: 'glyphicon-folder-close'
428 | ]
429 |
430 | { #category : #'default icons file handling' }
431 | TBSGlyphTag >> iconFolderOpen [
432 |
433 | ^self class: 'glyphicon-folder-open'
434 | ]
435 |
436 | { #category : #'default icons text' }
437 | TBSGlyphTag >> iconFont [
438 |
439 | ^self class: 'glyphicon-font'
440 | ]
441 |
442 | { #category : #'default icons media navigation' }
443 | TBSGlyphTag >> iconForward [
444 |
445 | ^self class: 'glyphicon-forward'
446 | ]
447 |
448 | { #category : #'default icons sizing' }
449 | TBSGlyphTag >> iconFullscreen [
450 |
451 | ^self class: 'glyphicon-fullscreen'
452 | ]
453 |
454 | { #category : #'default icons money' }
455 | TBSGlyphTag >> iconGBP [
456 |
457 | ^self class: 'glyphicon-gbp'
458 | ]
459 |
460 | { #category : #'default icons' }
461 | TBSGlyphTag >> iconGift [
462 |
463 | ^self class: 'glyphicon-gift'
464 | ]
465 |
466 | { #category : #'default icons' }
467 | TBSGlyphTag >> iconGlass [
468 |
469 | ^self class: 'glyphicon-glass'
470 | ]
471 |
472 | { #category : #'default icons internet' }
473 | TBSGlyphTag >> iconGlobe [
474 |
475 | ^self class: 'glyphicon-globe'
476 | ]
477 |
478 | { #category : #'default icons media video' }
479 | TBSGlyphTag >> iconHDVideo [
480 |
481 | ^self class: 'glyphicon-hd-video'
482 | ]
483 |
484 | { #category : #'default icons hands' }
485 | TBSGlyphTag >> iconHandDown [
486 |
487 | ^self class: 'glyphicon-hand-down'
488 | ]
489 |
490 | { #category : #'default icons hands' }
491 | TBSGlyphTag >> iconHandLeft [
492 |
493 | ^self class: 'glyphicon-hand-left'
494 | ]
495 |
496 | { #category : #'default icons hands' }
497 | TBSGlyphTag >> iconHandRight [
498 |
499 | ^self class: 'glyphicon-hand-right'
500 | ]
501 |
502 | { #category : #'default icons hands' }
503 | TBSGlyphTag >> iconHandUp [
504 |
505 | ^self class: 'glyphicon-hand-up'
506 | ]
507 |
508 | { #category : #'default icons file handling' }
509 | TBSGlyphTag >> iconHardDiskDrive [
510 |
511 | ^self class: 'glyphicon-hdd'
512 | ]
513 |
514 | { #category : #'default icons text' }
515 | TBSGlyphTag >> iconHeader [
516 |
517 | ^self class: 'glyphicon-header'
518 | ]
519 |
520 | { #category : #'default icons media audio' }
521 | TBSGlyphTag >> iconHeadphones [
522 |
523 | ^self class: 'glyphicon-headphones'
524 | ]
525 |
526 | { #category : #'default icons' }
527 | TBSGlyphTag >> iconHeart [
528 |
529 | ^self class: 'glyphicon-heart'
530 | ]
531 |
532 | { #category : #'default icons' }
533 | TBSGlyphTag >> iconHeartEmpty [
534 |
535 | ^self class: 'glyphicon-heart-empty'
536 | ]
537 |
538 | { #category : #'default icons common' }
539 | TBSGlyphTag >> iconHome [
540 |
541 | ^self class: 'glyphicon-home'
542 | ]
543 |
544 | { #category : #'default icons file handling' }
545 | TBSGlyphTag >> iconImport [
546 |
547 | ^self class: 'glyphicon-import'
548 | ]
549 |
550 | { #category : #'default icons common' }
551 | TBSGlyphTag >> iconInbox [
552 |
553 | ^self class: 'glyphicon-inbox'
554 | ]
555 |
556 | { #category : #'default icons text' }
557 | TBSGlyphTag >> iconIndentLeft [
558 |
559 | ^self class: 'glyphicon-indent-left'
560 | ]
561 |
562 | { #category : #'default icons text' }
563 | TBSGlyphTag >> iconIndentRight [
564 |
565 | ^self class: 'glyphicon-indent-right'
566 | ]
567 |
568 | { #category : #'default icons common' }
569 | TBSGlyphTag >> iconInfo [
570 |
571 | ^self class: 'glyphicon-info-sign'
572 | ]
573 |
574 | { #category : #'default icons text' }
575 | TBSGlyphTag >> iconItalic [
576 |
577 | ^self class: 'glyphicon-italic'
578 | ]
579 |
580 | { #category : #'default icons' }
581 | TBSGlyphTag >> iconLeaf [
582 |
583 | ^self class: 'glyphicon-leaf'
584 | ]
585 |
586 | { #category : #'default icons internet' }
587 | TBSGlyphTag >> iconLink [
588 |
589 | ^self class: 'glyphicon-link'
590 | ]
591 |
592 | { #category : #'default icons common' }
593 | TBSGlyphTag >> iconList [
594 |
595 | ^self class: 'glyphicon-list'
596 | ]
597 |
598 | { #category : #'default icons common' }
599 | TBSGlyphTag >> iconListAlt [
600 |
601 | ^self class: 'glyphicon-list-alt'
602 | ]
603 |
604 | { #category : #'default icons common' }
605 | TBSGlyphTag >> iconLock [
606 |
607 | ^self class: 'glyphicon-lock'
608 | ]
609 |
610 | { #category : #'default icons common' }
611 | TBSGlyphTag >> iconLogin [
612 |
613 | ^self class: 'glyphicon-log-in'
614 | ]
615 |
616 | { #category : #'default icons common' }
617 | TBSGlyphTag >> iconLogout [
618 |
619 | ^self class: 'glyphicon-log-out'
620 | ]
621 |
622 | { #category : #'default icons' }
623 | TBSGlyphTag >> iconMagnet [
624 |
625 | ^self class: 'glyphicon-magnet'
626 | ]
627 |
628 | { #category : #'default icons' }
629 | TBSGlyphTag >> iconMapMarker [
630 |
631 | ^self class: 'glyphicon-map-marker'
632 | ]
633 |
634 | { #category : #'default icons' }
635 | TBSGlyphTag >> iconMinus [
636 |
637 | ^self class: 'glyphicon-minus'
638 | ]
639 |
640 | { #category : #'default icons' }
641 | TBSGlyphTag >> iconMinusSign [
642 |
643 | ^self class: 'glyphicon-minus-sign'
644 | ]
645 |
646 | { #category : #'default icons' }
647 | TBSGlyphTag >> iconMove [
648 |
649 | ^self class: 'glyphicon-move'
650 | ]
651 |
652 | { #category : #'default icons media audio' }
653 | TBSGlyphTag >> iconMusic [
654 |
655 | ^self class: 'glyphicon-music'
656 | ]
657 |
658 | { #category : #'default icons common' }
659 | TBSGlyphTag >> iconNewWindow [
660 |
661 | ^self class: 'glyphicon-new-window'
662 | ]
663 |
664 | { #category : #'default icons common' }
665 | TBSGlyphTag >> iconOff [
666 |
667 | ^self class: 'glyphicon-off'
668 | ]
669 |
670 | { #category : #'default icons common' }
671 | TBSGlyphTag >> iconOk [
672 |
673 | ^self class: 'glyphicon-ok'
674 | ]
675 |
676 | { #category : #'default icons common' }
677 | TBSGlyphTag >> iconOkCircle [
678 |
679 | ^self class: 'glyphicon-ok-circle'
680 | ]
681 |
682 | { #category : #'default icons common' }
683 | TBSGlyphTag >> iconOkSign [
684 |
685 | ^self class: 'glyphicon-ok-sign'
686 | ]
687 |
688 | { #category : #'default icons' }
689 | TBSGlyphTag >> iconOpen [
690 |
691 | ^self class: 'glyphicon-open'
692 | ]
693 |
694 | { #category : #'default icons' }
695 | TBSGlyphTag >> iconPaperclip [
696 |
697 | ^self class: 'glyphicon-paperclip'
698 | ]
699 |
700 | { #category : #'default icons' }
701 | TBSGlyphTag >> iconPause [
702 |
703 | ^self class: 'glyphicon-pause'
704 | ]
705 |
706 | { #category : #'default icons' }
707 | TBSGlyphTag >> iconPencil [
708 |
709 | ^self class: 'glyphicon-pencil'
710 | ]
711 |
712 | { #category : #'default icons' }
713 | TBSGlyphTag >> iconPhone [
714 |
715 | ^self class: 'glyphicon-phone'
716 | ]
717 |
718 | { #category : #'default icons' }
719 | TBSGlyphTag >> iconPhoneAlt [
720 |
721 | ^self class: 'glyphicon-phone-alt'
722 | ]
723 |
724 | { #category : #'default icons common' }
725 | TBSGlyphTag >> iconPicture [
726 |
727 | ^self class: 'glyphicon-picture'
728 | ]
729 |
730 | { #category : #'default icons' }
731 | TBSGlyphTag >> iconPlane [
732 |
733 | ^self class: 'glyphicon-plane'
734 | ]
735 |
736 | { #category : #'default icons media navigation' }
737 | TBSGlyphTag >> iconPlay [
738 |
739 | ^self class: 'glyphicon-play'
740 | ]
741 |
742 | { #category : #'default icons media navigation' }
743 | TBSGlyphTag >> iconPlayCircle [
744 |
745 | ^self class: 'glyphicon-play-circle'
746 | ]
747 |
748 | { #category : #'default icons' }
749 | TBSGlyphTag >> iconPlus [
750 |
751 | ^self class: 'glyphicon-plus'
752 | ]
753 |
754 | { #category : #'default icons' }
755 | TBSGlyphTag >> iconPlusSign [
756 |
757 | ^self class: 'glyphicon-plus-sign'
758 | ]
759 |
760 | { #category : #'default icons' }
761 | TBSGlyphTag >> iconPrint [
762 |
763 | ^self class: 'glyphicon-print'
764 | ]
765 |
766 | { #category : #'default icons' }
767 | TBSGlyphTag >> iconPushpin [
768 |
769 | ^self class: 'glyphicon-pushpin'
770 | ]
771 |
772 | { #category : #'default icons' }
773 | TBSGlyphTag >> iconQRCode [
774 |
775 | ^self class: 'glyphicon-qrcode'
776 | ]
777 |
778 | { #category : #'default icons' }
779 | TBSGlyphTag >> iconQuestionSign [
780 |
781 | ^self class: 'glyphicon-question-sign'
782 | ]
783 |
784 | { #category : #'default icons' }
785 | TBSGlyphTag >> iconRandom [
786 |
787 | ^self class: 'glyphicon-random'
788 | ]
789 |
790 | { #category : #'default icons media navigation' }
791 | TBSGlyphTag >> iconRecord [
792 |
793 | ^self class: 'glyphicon-record'
794 | ]
795 |
796 | { #category : #'default icons common' }
797 | TBSGlyphTag >> iconRefresh [
798 |
799 | ^self class: 'glyphicon-refresh'
800 | ]
801 |
802 | { #category : #'default icons legal' }
803 | TBSGlyphTag >> iconRegistrationMark [
804 |
805 | ^self class: 'glyphicon-registration-mark'
806 | ]
807 |
808 | { #category : #'default icons common' }
809 | TBSGlyphTag >> iconRemove [
810 |
811 | ^self class: 'glyphicon-remove'
812 | ]
813 |
814 | { #category : #'default icons common' }
815 | TBSGlyphTag >> iconRemoveCircle [
816 |
817 | ^self class: 'glyphicon-remove-circle'
818 | ]
819 |
820 | { #category : #'default icons common' }
821 | TBSGlyphTag >> iconRemoveSign [
822 |
823 | ^self class: 'glyphicon-remove-sign'
824 | ]
825 |
826 | { #category : #'default icons media navigation' }
827 | TBSGlyphTag >> iconRepeat [
828 |
829 | ^self class: 'glyphicon-repeat'
830 | ]
831 |
832 | { #category : #'default icons sizing' }
833 | TBSGlyphTag >> iconResizeFull [
834 |
835 | ^self class: 'glyphicon-resize-full'
836 | ]
837 |
838 | { #category : #'default icons sizing' }
839 | TBSGlyphTag >> iconResizeHorizontal [
840 |
841 | ^self class: 'glyphicon-resize-horizontal'
842 | ]
843 |
844 | { #category : #'default icons sizing' }
845 | TBSGlyphTag >> iconResizeSmall [
846 |
847 | ^self class: 'glyphicon-resize-small'
848 | ]
849 |
850 | { #category : #'default icons sizing' }
851 | TBSGlyphTag >> iconResizeVertical [
852 |
853 | ^self class: 'glyphicon-resize-vertical'
854 | ]
855 |
856 | { #category : #'default icons sizing' }
857 | TBSGlyphTag >> iconRetweet [
858 |
859 | ^self class: 'glyphicon-retweet'
860 | ]
861 |
862 | { #category : #'default icons' }
863 | TBSGlyphTag >> iconRoad [
864 |
865 | ^self class: 'glyphicon-road'
866 | ]
867 |
868 | { #category : #'default icons media video' }
869 | TBSGlyphTag >> iconSDVideo [
870 |
871 | ^self class: 'glyphicon-sd-video'
872 | ]
873 |
874 | { #category : #'default icons common' }
875 | TBSGlyphTag >> iconSave [
876 |
877 | ^self class: 'glyphicon-save'
878 | ]
879 |
880 | { #category : #'default icons common' }
881 | TBSGlyphTag >> iconSaved [
882 |
883 | ^self class: 'glyphicon-saved'
884 | ]
885 |
886 | { #category : #'default icons' }
887 | TBSGlyphTag >> iconScreenshot [
888 |
889 | ^self class: 'glyphicon-screenshot'
890 | ]
891 |
892 | { #category : #'default icons common' }
893 | TBSGlyphTag >> iconSearch [
894 |
895 | ^self class: 'glyphicon-search'
896 | ]
897 |
898 | { #category : #'default icons common' }
899 | TBSGlyphTag >> iconSend [
900 |
901 | ^self class: 'glyphicon-send'
902 | ]
903 |
904 | { #category : #'default icons common' }
905 | TBSGlyphTag >> iconShare [
906 |
907 | ^self class: 'glyphicon-share'
908 | ]
909 |
910 | { #category : #'default icons common' }
911 | TBSGlyphTag >> iconShareAlt [
912 |
913 | ^self class: 'glyphicon-share-alt'
914 | ]
915 |
916 | { #category : #'default icons internet' }
917 | TBSGlyphTag >> iconShoppingCart [
918 |
919 | ^self class: 'glyphicon-shopping-cart'
920 | ]
921 |
922 | { #category : #'default icons' }
923 | TBSGlyphTag >> iconSignal [
924 |
925 | ^self class: 'glyphicon-signal'
926 | ]
927 |
928 | { #category : #'default icons' }
929 | TBSGlyphTag >> iconSort [
930 |
931 | ^self class: 'glyphicon-sort'
932 | ]
933 |
934 | { #category : #'default icons' }
935 | TBSGlyphTag >> iconSortByAlphabet [
936 |
937 | ^self class: 'glyphicon-sort-by-alphabet'
938 | ]
939 |
940 | { #category : #'default icons' }
941 | TBSGlyphTag >> iconSortByAlphabetAlt [
942 |
943 | ^self class: 'glyphicon-sort-by-alphabet-alt'
944 | ]
945 |
946 | { #category : #'default icons' }
947 | TBSGlyphTag >> iconSortByAttributes [
948 |
949 | ^self class: 'glyphicon-sort-by-attributes'
950 | ]
951 |
952 | { #category : #'default icons' }
953 | TBSGlyphTag >> iconSortByAttributesAlt [
954 |
955 | ^self class: 'glyphicon-sort-by-attributes-alt'
956 | ]
957 |
958 | { #category : #'default icons' }
959 | TBSGlyphTag >> iconSortByOrder [
960 |
961 | ^self class: 'glyphicon-sort-by-order'
962 | ]
963 |
964 | { #category : #'default icons' }
965 | TBSGlyphTag >> iconSortByOrderAlt [
966 |
967 | ^self class: 'glyphicon-sort-by-order-alt'
968 | ]
969 |
970 | { #category : #'default icons media audio' }
971 | TBSGlyphTag >> iconSound51 [
972 |
973 | ^self class: 'glyphicon-sound-5-1'
974 | ]
975 |
976 | { #category : #'default icons media audio' }
977 | TBSGlyphTag >> iconSound61 [
978 |
979 | ^self class: 'glyphicon-sound-6-1'
980 | ]
981 |
982 | { #category : #'default icons media audio' }
983 | TBSGlyphTag >> iconSound71 [
984 |
985 | ^self class: 'glyphicon-sound-7-1'
986 | ]
987 |
988 | { #category : #'default icons media audio' }
989 | TBSGlyphTag >> iconSoundDolby [
990 |
991 | ^self class: 'glyphicon-sound-dolby'
992 | ]
993 |
994 | { #category : #'default icons media audio' }
995 | TBSGlyphTag >> iconSoundStereo [
996 |
997 | ^self class: 'glyphicon-sound-stereo'
998 | ]
999 |
1000 | { #category : #'default icons common' }
1001 | TBSGlyphTag >> iconStar [
1002 |
1003 | ^self class: 'glyphicon-star'
1004 | ]
1005 |
1006 | { #category : #'default icons common' }
1007 | TBSGlyphTag >> iconStarEmpty [
1008 |
1009 | ^self class: 'glyphicon-star-empty'
1010 | ]
1011 |
1012 | { #category : #'default icons common' }
1013 | TBSGlyphTag >> iconStatistics [
1014 |
1015 | ^self class: 'glyphicon-stats'
1016 | ]
1017 |
1018 | { #category : #'default icons media navigation' }
1019 | TBSGlyphTag >> iconStepBackward [
1020 |
1021 | ^self class: 'glyphicon-step-backward'
1022 | ]
1023 |
1024 | { #category : #'default icons media navigation' }
1025 | TBSGlyphTag >> iconStepForward [
1026 |
1027 | ^self class: 'glyphicon-step-forward'
1028 | ]
1029 |
1030 | { #category : #'default icons media navigation' }
1031 | TBSGlyphTag >> iconStop [
1032 |
1033 | ^self class: 'glyphicon-stop'
1034 | ]
1035 |
1036 | { #category : #'default icons media navigation' }
1037 | TBSGlyphTag >> iconSubtitles [
1038 |
1039 | ^self class: 'glyphicon-subtitles'
1040 | ]
1041 |
1042 | { #category : #'default icons internet' }
1043 | TBSGlyphTag >> iconTag [
1044 |
1045 | ^self class: 'glyphicon-tag'
1046 | ]
1047 |
1048 | { #category : #'default icons internet' }
1049 | TBSGlyphTag >> iconTags [
1050 |
1051 | ^self class: 'glyphicon-tags'
1052 | ]
1053 |
1054 | { #category : #'default icons' }
1055 | TBSGlyphTag >> iconTasks [
1056 |
1057 | ^self class: 'glyphicon-tasks'
1058 | ]
1059 |
1060 | { #category : #'default icons text' }
1061 | TBSGlyphTag >> iconTextHeight [
1062 |
1063 | ^self class: 'glyphicon-text-height'
1064 | ]
1065 |
1066 | { #category : #'default icons text' }
1067 | TBSGlyphTag >> iconTextHeightDefault [
1068 |
1069 | ^self class: 'glyphicon-th'
1070 | ]
1071 |
1072 | { #category : #'default icons text' }
1073 | TBSGlyphTag >> iconTextHeightLarge [
1074 |
1075 | ^self class: 'glyphicon-th-large'
1076 | ]
1077 |
1078 | { #category : #'default icons text' }
1079 | TBSGlyphTag >> iconTextHeightList [
1080 |
1081 | ^self class: 'glyphicon-th-list'
1082 | ]
1083 |
1084 | { #category : #'default icons text' }
1085 | TBSGlyphTag >> iconTextWidth [
1086 |
1087 | ^self class: 'glyphicon-text-width'
1088 | ]
1089 |
1090 | { #category : #'default icons hands' }
1091 | TBSGlyphTag >> iconThumbsDown [
1092 |
1093 | ^self class: 'glyphicon-thumbs-down'
1094 | ]
1095 |
1096 | { #category : #'default icons hands' }
1097 | TBSGlyphTag >> iconThumbsUp [
1098 |
1099 | ^self class: 'glyphicon-thumbs-up'
1100 | ]
1101 |
1102 | { #category : #'default icons common' }
1103 | TBSGlyphTag >> iconTime [
1104 |
1105 | ^self class: 'glyphicon-time'
1106 | ]
1107 |
1108 | { #category : #'default icons text' }
1109 | TBSGlyphTag >> iconTint [
1110 |
1111 | ^self class: 'glyphicon-tint'
1112 | ]
1113 |
1114 | { #category : #'default icons' }
1115 | TBSGlyphTag >> iconTower [
1116 |
1117 | ^self class: 'glyphicon-tower'
1118 | ]
1119 |
1120 | { #category : #'default icons file handling' }
1121 | TBSGlyphTag >> iconTransfer [
1122 |
1123 | ^self class: 'glyphicon-transfer'
1124 | ]
1125 |
1126 | { #category : #'default icons file handling' }
1127 | TBSGlyphTag >> iconTrash [
1128 |
1129 | ^self class: 'glyphicon-trash'
1130 | ]
1131 |
1132 | { #category : #'default icons trees' }
1133 | TBSGlyphTag >> iconTreeConifer [
1134 |
1135 | ^self class: 'glyphicon-tree-conifer'
1136 | ]
1137 |
1138 | { #category : #'default icons trees' }
1139 | TBSGlyphTag >> iconTreeDeciduous [
1140 |
1141 | ^self class: 'glyphicon-tree-deciduous'
1142 | ]
1143 |
1144 | { #category : #'default icons money' }
1145 | TBSGlyphTag >> iconUSD [
1146 |
1147 | ^self class: 'glyphicon-usd'
1148 | ]
1149 |
1150 | { #category : #'default icons common' }
1151 | TBSGlyphTag >> iconUnchecked [
1152 |
1153 | ^self class: 'glyphicon-unchecked'
1154 | ]
1155 |
1156 | { #category : #'default icons file handling' }
1157 | TBSGlyphTag >> iconUpload [
1158 |
1159 | ^self class: 'glyphicon-upload'
1160 | ]
1161 |
1162 | { #category : #'default icons common' }
1163 | TBSGlyphTag >> iconUser [
1164 |
1165 | ^self class: 'glyphicon-user'
1166 | ]
1167 |
1168 | { #category : #'default icons media audio' }
1169 | TBSGlyphTag >> iconVolumeDown [
1170 |
1171 | ^self class: 'glyphicon-volume-down'
1172 | ]
1173 |
1174 | { #category : #'default icons media audio' }
1175 | TBSGlyphTag >> iconVolumeOff [
1176 |
1177 | ^self class: 'glyphicon-volume-off'
1178 | ]
1179 |
1180 | { #category : #'default icons media audio' }
1181 | TBSGlyphTag >> iconVolumeUp [
1182 |
1183 | ^self class: 'glyphicon-volume-up'
1184 | ]
1185 |
1186 | { #category : #'default icons common' }
1187 | TBSGlyphTag >> iconWarningSign [
1188 |
1189 | ^self class: 'glyphicon-warning-sign'
1190 | ]
1191 |
1192 | { #category : #'default icons common' }
1193 | TBSGlyphTag >> iconWrench [
1194 |
1195 | ^self class: 'glyphicon-wrench'
1196 | ]
1197 |
1198 | { #category : #'default icons common' }
1199 | TBSGlyphTag >> iconZoomIn [
1200 |
1201 | ^self class: 'glyphicon-zoom-in'
1202 | ]
1203 |
1204 | { #category : #'default icons common' }
1205 | TBSGlyphTag >> iconZoomOut [
1206 |
1207 | ^self class: 'glyphicon-zoom-out'
1208 | ]
1209 |
1210 | { #category : #initialization }
1211 | TBSGlyphTag >> initialize [
1212 | super initialize.
1213 | self class: 'glyphicon'
1214 | ]
1215 |
1216 | { #category : #accessing }
1217 | TBSGlyphTag >> tag [
1218 |
1219 | ^'span'
1220 | ]
1221 |
--------------------------------------------------------------------------------