jquery.tabulator
Version:
Interactive table generation plugin for jQuery UI
622 lines (504 loc) • 12.7 kB
text/less
@import (less) "variables.less";
// Style conversion file, bootstrap to tabulator
//BOOTSTRAP MIXINS
.table-row-variant(@state; @background) {
// Exact selectors below required to override `.table-striped` and prevent
// inheritance to nested tables.
.table > thead > tr,
.table > tbody > tr,
.table > tfoot > tr {
> td.@{state},
> th.@{state},
&.@{state} > td,
&.@{state} > th {
background-color: @background;
}
}
// Hover states for `.table-hover`
// Note: this is not available for cells or rows within `thead` or `tfoot`.
.table-hover > tbody > tr {
> td.@{state}:hover,
> th.@{state}:hover,
&.@{state}:hover > td,
&:hover > .@{state},
&.@{state}:hover > th {
background-color: darken(@background, 5%);
}
}
}
//Main Theme Variables
@backgroundColor: @table-bg; //background color of tabulator
@borderColor:@table-border-color; //border to tablulator
@textSize:@font-size-base; //table text size
//header themeing
@headerBackgroundColor:#fff; //border to tablulator
@headerSeperatorColor:@table-border-color; //header bottom seperator color
@cellPadding:@table-cell-padding; //padding round header
@cellPaddingCondensed:@table-condensed-cell-padding; //padding round header
//column header arrows
@sortArrowActive: #666;
@sortArrowInactive: #bbb;
//row themeing
@rowBackgroundColor:@backgroundColor; //table row background color
@rowAltBackgroundColor:@table-bg-accent; //table row background color
@rowBorderColor:@table-border-color; //table border color
@rowHoverBackground:@table-bg-hover; //row background color on hover
@rowSelectedBackground: #9ABCEA; //row background color when selected
@rowSelectedBackgroundHover: #769BCC;//row background color when selected and hovered
@editBoxColor:#1D68CD; //border color for edit boxes
//footer themeing
@footerBorderColor:@table-border-color; //footer border color
@footerSeperatorColor:@table-border-color; //footer bottom seperator color
//Tabulator Containing Element
.tabulator{
position: relative;
background-color: @backgroundColor;
overflow:hidden;
font-size:@textSize;
text-align: left;
width: 100%;
max-width: 100%;
margin-bottom: @line-height-computed;
//column header containing element
.tabulator-header{
position:relative;
box-sizing: border-box;
width:100%;
border-bottom:2px solid @headerSeperatorColor;
background-color: @headerBackgroundColor;
font-weight:bold;
white-space: nowrap;
overflow:hidden;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
//individual column header element
.tabulator-col{
display:inline-block;
//hold content of column header
.tabulator-col-content{
position: relative;
padding:@cellPadding;
//hold title of column header
.tabulator-col-title{
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
vertical-align:bottom;
//element to hold title editor
.tabulator-title-editor{
box-sizing: border-box;
width: 100%;
border:1px solid #999;
padding:1px;
background: #fff;
}
}
//column sorter arrow
.tabulator-arrow{
display: inline-block;
position: absolute;
top:14px;
right:8px;
width: 0;
height: 0;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-bottom: 6px solid @sortArrowInactive;
&.asc{
border-top: none;
border-bottom: 6px solid @sortArrowActive;
}
&.desc{
border-top: 6px solid @sortArrowActive;
border-bottom: none;
}
}
}
//column resize handles
.tabulator-handle{
position:absolute;
right:0;
top:0;
bottom:0;
width:5px;
&.prev{
left:0;
right:auto;
}
&:hover{
cursor:ew-resize;
}
}
//complex header column group
&.tabulator-col-group{
//gelement to hold sub columns in column group
.tabulator-col-group-cols{
position:relative;
display: flex;
border-top:1px solid @borderColor;
overflow: hidden;
.tabulator-col:last-child{
margin-right:-1px;
}
}
}
//hide left resize handle on first column
&:first-child{
.tabulator-handle.prev{
display: none;
}
}
//placeholder element for sortable columns
&.ui-sortable-helper{
position: absolute;
background-color:darken(@headerBackgroundColor, 10%) ;
border:1px solid @borderColor;
}
//header filter containing element
.tabulator-header-filter{
position: relative;
box-sizing: border-box;
margin-top:2px;
width:100%;
text-align: center;
//styling adjustment for inbuilt editors
textarea{
height:auto ;
}
svg{
margin-top: 3px;
}
}
//styling child elements for sortable columns
&[data-sortable=true]{
.tabulator-col-title{
width:calc(~"100% - 25px");
}
&:hover{
cursor:pointer;
background-color:darken(@headerBackgroundColor, 10%);
}
}
}
//empty column for spacing row handlers on tables with movable rows enabled
.tabulator-col-row-handle{
width:30px;
max-width:30px;
display:inline-block;
}
.tabulator-col, .tabulator-col-row-handle{
position:relative;
box-sizing:border-box;
text-align:left;
vertical-align: bottom;
overflow: hidden;
}
.tabulator-frozen{
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
&.tabulator-frozen-left{
border-right:1px solid @rowBorderColor;
}
&.tabulator-frozen-right{
border-left:2px solid @rowBorderColor;
}
}
}
//scrolling element to hold table
.tabulator-tableHolder{
position:relative;
width:100%;
white-space: nowrap;
overflow:auto;
-webkit-overflow-scrolling: touch;
//element to hold table rows
.tabulator-table{
position:relative;
display:inline-block;
background-color:@rowBackgroundColor;
white-space: nowrap;
overflow:visible;
//row element
.tabulator-row{
position: relative;
box-sizing: border-box;
min-height:@textSize + (@cellPadding * 2);
background-color: @rowBackgroundColor;
border-bottom:1px solid @rowBorderColor;
&.tabulator-selectable:hover{
background-color:@rowHoverBackground;
cursor: pointer;
}
&.tabulator-selected{
background-color:@rowSelectedBackground;
}
&.tabulator-selected:hover{
background-color:@rowSelectedBackgroundHover;
cursor: pointer;
}
//movable row handle
.tabulator-row-handle{
display:inline-block;
box-sizing:border-box;
width:30px;
max-width:30px;
padding:4px;
text-align: center;
vertical-align:middle;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
&:hover{
cursor:move;
background-color:rgba(0,0,0,.1);
}
//Hamburger element
div{
width:80%;
height:3px;
margin:2px 10% 0 10%;
background:#666;
}
}
.tabulator-frozen{
display: inline-block;
position: absolute;
background-color: inherit;
z-index: 10;
&.tabulator-frozen-left{
border-right:1px solid @rowBorderColor;
}
&.tabulator-frozen-right{
border-left:2px solid @rowBorderColor;
}
}
//cell element
.tabulator-cell{
position: relative;
box-sizing:border-box;
padding:@cellPadding;
vertical-align:middle;
white-space:nowrap;
overflow:hidden;
text-overflow:ellipsis;
&:last-of-type{
border-right: none;
}
&.tabulator-editing{
border:1px solid @editBoxColor;
padding: 0;
input, select{
border:1px;
background:transparent;
}
}
}
}
//row grouping element
.tabulator-group{
&.show{
.tabulator-group-header{
.tabulator-arrow{
margin-left:5px;
margin-right:10px;
border-left: 6px solid transparent;
border-right: 6px solid transparent;
border-top: 6px solid @sortArrowActive;
border-bottom: 0;
}
}
.tabulator-group-body{
visibility: visible;
height:auto;
}
}
//row grouping header
.tabulator-group-header{
box-sizing:border-box;
border-bottom:1px solid #999;
border-right:1px solid @rowBorderColor;
border-top:1px solid #999;
padding:5px;
background:#fafafa;
font-weight:bold;
//sorting arrow
.tabulator-arrow{
display: inline-block;
width: 0;
height: 0;
margin-left:8px;
margin-right:13px;
border-top: 6px solid transparent;
border-bottom: 6px solid transparent;
border-right: 0;
border-left: 6px solid @sortArrowActive;
vertical-align:middle;
&:hover{
cursor:pointer;
background-color:rgba(0,0,0,.1);
}
}
span{
margin-left:10px;
color:#666;
}
}
//row grouping footer
.tabulator-group-body{
visibility:hidden;
height:0;
}
}
}
}
//footer element
.tabulator-footer{
padding:5px 10px;
border-top:2px solid @footerSeperatorColor;
text-align:right;
font-weight:bold;
white-space:nowrap;
user-select:none;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
-o-user-select: none;
//pagination container element
.tabulator-pages{
margin:0 7px;
}
//pagination button
.tabulator-page{
display:inline-block;
margin:0 2px;
border:1px solid @footerBorderColor;
border-radius:3px;
padding:2px 5px;
background:rgba(255,255,255,.2);
&.active{
color:#d00;
}
&.disabled{
opacity:.5;
}
&:not(.disabled){
&:hover{
cursor:pointer;
background:rgba(0,0,0,.2);
color:#fff;
}
}
}
}
//holding div that contains loader and covers tabulator element to prevent interaction
.tablulator-loader{
position:absolute;
top:0;
left:0;
z-index:100;
height:100%;
width:100%;
background:rgba(0,0,0,.4);
text-align:center;
//loading message element
.tabulator-loader-msg{
//loading message
.tabulator-loading{
display:inline-block;
border:4px solid #333;
border-radius:10px;
padding:10px 20px;
background:#fff;
font-weight:bold;
font-size:16px;
color:#000;
}
//error message
.tabulator-error{
display:inline-block;
border:4px solid #D00;
border-radius:10px;
padding:10px 20px;
background:#fff;
font-weight:bold;
font-size:16px;
color:#590000;
}
}
}
//Bootstrap theming classes
&.table-striped{
.tabulator-tableHolder{
.tabulator-table{
.tabulator-row{
&:nth-child(even){
background-color: @rowAltBackgroundColor;
}
}
}
}
}
&.table-bordered{
border:1px solid @borderColor;
.tabulator-header{
.tabulator-col, .tabulator-col-row-handle{
border-right:1px solid @borderColor;
}
}
.tabulator-tableHolder{
.tabulator-table{
.tabulator-row{
.tabulator-cell{
border-right:1px solid @borderColor;
}
}
}
}
}
&.table-condensed{
.tabulator-header{
.tabulator-col{
.tabulator-col-content{
padding:@cellPaddingCondensed;
}
}
}
.tabulator-tableHolder{
.tabulator-table{
.tabulator-row{
min-height:@textSize + (@cellPaddingCondensed * 2);
.tabulator-cell{
padding:@cellPaddingCondensed;
}
}
}
}
}
//row colors
.tabulator-tableHolder{
.tabulator-table{
.tabulator-row{
&.active{
background:@table-bg-active;
}
&.success{
background:@state-success-bg;
}
&.info{
background: @state-info-bg;
}
&.warning{
background:@state-warning-bg;
}
&.danger{
background:@state-danger-bg;
}
}
}
}
}