summaryrefslogtreecommitdiffstats
path: root/web/_static/tablesorter/css/less
diff options
context:
space:
mode:
Diffstat (limited to 'web/_static/tablesorter/css/less')
-rw-r--r--web/_static/tablesorter/css/less/bootstrap.less328
-rw-r--r--web/_static/tablesorter/css/less/metro.less357
-rw-r--r--web/_static/tablesorter/css/less/theme.less330
3 files changed, 1015 insertions, 0 deletions
diff --git a/web/_static/tablesorter/css/less/bootstrap.less b/web/_static/tablesorter/css/less/bootstrap.less
new file mode 100644
index 0000000..d71e220
--- /dev/null
+++ b/web/_static/tablesorter/css/less/bootstrap.less
@@ -0,0 +1,328 @@
+/* Tablesorter Custom Bootstrap v3 LESS Theme by Rob Garrison
+
+To create your own theme, modify the code below and run it through
+a LESS compiler, like this one: http://leafo.net/lessphp/editor.html
+or download less.js from http://lesscss.org/
+
+Test out these customization files live
+ Basic LESS Theme : http://codepen.io/Mottie/pen/eqBbn
+ Bootstrap LESS : http://codepen.io/Mottie/pen/Ltzpi
+ Metro LESS Style : http://codepen.io/Mottie/pen/gCslk
+ Basic SCSS : http://codepen.io/Mottie/pen/LbXdNR
+
+*/
+
+/*** theme ***/
+@theme : tablesorter-bootstrap;
+
+/*** fonts ***/
+@tableHeaderFont : 14px bold Arial, Sans-serif;
+@tableBodyFont : 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
+
+/*** color definitions ***/
+/* for best results, only change the hue (240),
+ leave the saturation (60%) and luminosity (80%) alone
+ pick the color from here: http://hslpicker.com/#99E699 */
+@headerBackground : hsl(240, 60%, 80%);
+@borderAndBackground : #cdcdcd;
+@overallBorder : @borderAndBackground 1px solid;
+@headerTextColor : #000;
+
+@bodyBackground : #fff;
+@bodyTextColor : #000;
+
+@headerAsc : darken(spin(@headerBackground, 5), 10%); /* darken(@headerBackground, 10%); */
+@headerDesc : lighten(spin(@headerBackground, -5), 10%); /* desaturate(@headerAsc, 5%); */
+
+@captionBackground : #fff; /* it might be best to match the document body background color here */
+@errorBackground : #e6bf99; /* ajax error message (added to thead) */
+
+@filterCellBackground : #eee;
+@filterElementTextColor: #333;
+@filterElementBkgd : #fff;
+@filterElementBorder : 1px solid #bbb;
+@filterTransitionTime : 0.1s;
+@filterRowHiddenHeight : 4px; /* becomes height using padding (so it's divided by 2) */
+
+@overallPadding : 4px;
+/* 20px should be slightly wider than the icon width to avoid overlap */
+@headerPadding : 4px 20px 4px 4px;
+@headerMargin : 0 0 18px;
+
+/* url(icons/loading.gif); */
+@processingIcon : url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=');
+
+/* zebra striping */
+.allRows {
+ background-color: @bodyBackground;
+ color: @bodyTextColor;
+}
+.evenRows {
+ background-color: lighten(@headerBackground, 35%);
+}
+.oddRows {
+ background-color: lighten(@headerBackground, 18%);
+}
+
+/* hovered rows */
+.oddHovered {
+ background-color: desaturate(@headerBackground, 60%);
+}
+.evenHovered {
+ background-color: lighten( desaturate(@headerBackground, 60%), 10% );
+}
+
+/* Columns widget */
+@primaryOdd : spin(@headerBackground, 10); /* saturate( darken( desaturate(@headerBackground, 10%), 10% ), 30%); */
+@primaryEven : lighten( @primaryOdd, 10% );
+@secondaryOdd : @primaryEven;
+@secondaryEven : lighten( @primaryEven, 5% );
+@tertiaryOdd : @secondaryEven;
+@tertiaryEven : lighten( @secondaryEven, 5% );
+
+/* Filter widget transition */
+.filterWidgetTransition {
+ -webkit-transition: line-height @filterTransitionTime ease;
+ -moz-transition: line-height @filterTransitionTime ease;
+ -o-transition: line-height @filterTransitionTime ease;
+ transition: line-height @filterTransitionTime ease;
+}
+
+/*** icon block ***/
+.iconPosition {
+ font-size: 11px;
+ position: absolute;
+ right: 2px;
+ top: 50%;
+ margin-top: -7px; /* half the icon height; older IE doesn't like this */
+ width: 14px;
+ height: 14px;
+ background-repeat: no-repeat;
+ line-height: 14px;
+}
+
+/* black */
+@unsortedBlack : url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAA20lEQVR4AWJABpKSkoxALCstLb0aUAsZaCAMhVEY6B0amx8YZWDDEDSBa2AGe7XeIiAAClYwVGBvsAcIllsf/mvcC9DgOOd8h90fxWvngVEUbZIkuWRZZlE8eQjcisgZMM9zi+LJ6ZfwegmWZflZDugdHMfxTcGqql7TNBlUB/QObtv2VBSFrev6OY7jngzFk9OT/fn73fWYpqnlXNyXDMWT0zuYx/Bvel9ej+LJ6R08DMOu67q7DkTkrSA5vYPneV71fX/QASdTkJwezhs0TfMARn0wMDDGXEPgF4oijqwM5YjNAAAAAElFTkSuQmCC);
+
+/* white */
+@unsortedWhite : url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAOCAYAAAD5YeaVAAAAe0lEQVR4AbXQoRWDMBiF0Sh2QLAAQ8SxJGugWSA6A2STW1PxTsnB9cnkfuYvv8OGC1t5G3Y0QMP+Bm857keAdQIzWBP3+Bw4MADQE18B6/etRnCV/w9nnGuLezfAmXhABGtAGIkruvk6auIFRwQJDywllsEAjCecB20GP59BQQ+gtlRLAAAAAElFTkSuQmCC);
+
+/* automatically choose the correct arrow/text color */
+.headerText (@a) when (lightness(@a) >= 50%) {
+ color: @headerTextColor;
+}
+.headerText (@a) when (lightness(@a) < 50%) {
+ color: lighten(@headerTextColor, 90%);
+}
+.unsorted (@a) when (lightness(@a) >= 50%) {
+ background-image: @unsortedBlack;
+ color: @headerTextColor;
+}
+.unsorted (@a) when (lightness(@a) < 50%) {
+ background-image: @unsortedWhite;
+ color: lighten(@headerTextColor, 90%);
+}
+
+/* variable theme name - requires less.js 1.3+;
+ or just replace (!".@{theme}") with the contents of @theme
+*/
+.@{theme} {
+ font: @tableBodyFont;
+ background-color: @borderAndBackground;
+ width: 100%;
+
+ /* style th's outside of the thead */
+ th, thead td {
+ font: @tableHeaderFont;
+ font-weight: bold;
+ background-color: @headerBackground;
+ .headerText(@headerBackground);
+ border-collapse: collapse;
+ margin: @headerMargin;
+ padding: @overallPadding;
+ }
+
+ tbody td, tfoot th, tfoot td {
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* style header */
+ .tablesorter-header {
+ cursor: pointer;
+ }
+
+ .tablesorter-header-inner {
+ position: relative;
+ padding: @headerPadding;
+ }
+
+ /* bootstrap uses <i> for icons */
+ .tablesorter-header-inner i.tablesorter-icon {
+ .iconPosition
+ }
+
+ .tablesorter-header.sorter-false {
+ cursor: default;
+
+ i.tablesorter-icon {
+ display: none;
+ }
+ .tablesorter-header-inner {
+ padding: @overallPadding;
+ }
+ }
+
+ .tablesorter-headerAsc {
+ background-color: @headerAsc;
+ }
+
+ .tablesorter-headerDesc {
+ background-color: @headerDesc;
+ }
+
+ .bootstrap-icon-unsorted {
+ .unsorted(@headerBackground);
+ }
+
+
+ /* tfoot */
+ tfoot .tablesorter-headerAsc,
+ tfoot .tablesorter-headerDesc {
+ /* remove sort arrows from footer */
+ background-image: none;
+ }
+
+ /* optional disabled input styling */
+ .disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ cursor: not-allowed;
+ }
+
+ /* body */
+ tbody {
+
+ td {
+ .allRows;
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* Zebra Widget - row alternating colors */
+ tr.odd > td {
+ .oddRows;
+ }
+ tr.even > td {
+ .evenRows;
+ }
+
+ }
+
+ /* hovered row colors
+ you'll need to add additional lines for
+ rows with more than 2 child rows
+ */
+ tbody > tr.hover > td,
+ tbody > tr:hover > td,
+ tbody > tr:hover + tr.tablesorter-childRow > td,
+ tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td,
+ tbody > tr.even.hover > td,
+ tbody > tr.even:hover > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .evenHovered;
+ }
+ tbody > tr.odd.hover > td,
+ tbody > tr.odd:hover > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .oddHovered;
+ }
+
+ /* table processing indicator - indeterminate spinner */
+ .tablesorter-processing {
+ background-image: @processingIcon;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+
+ /* Column Widget - column sort colors */
+ tr.odd td.primary {
+ background-color: @primaryOdd;
+ }
+ td.primary, tr.even td.primary {
+ background-color: @primaryEven;
+ }
+ tr.odd td.secondary {
+ background-color: @secondaryOdd;
+ }
+ td.secondary, tr.even td.secondary {
+ background-color: @secondaryEven;
+ }
+ tr.odd td.tertiary {
+ background-color: @tertiaryOdd;
+ }
+ td.tertiary, tr.even td.tertiary {
+ background-color: @tertiaryEven;
+ }
+
+ /* caption (non-theme matching) */
+ caption {
+ background-color: @captionBackground ;
+ }
+
+ /* filter widget */
+ .tablesorter-filter-row input,
+ .tablesorter-filter-row select{
+ width: 98%;
+ margin: 0;
+ padding: @overallPadding;
+ color: @filterElementTextColor;
+ background-color: @filterElementBkgd;
+ border: @filterElementBorder;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ .filterWidgetTransition;
+ }
+ .tablesorter-filter-row {
+ background-color: @filterCellBackground;
+ }
+ .tablesorter-filter-row td {
+ text-align: center;
+ background-color: @filterCellBackground;
+ line-height: normal;
+ text-align: center; /* center the input */
+ .filterWidgetTransition;
+ }
+ /* hidden filter row */
+ .tablesorter-filter-row.hideme td {
+ padding: @filterRowHiddenHeight / 2;
+ margin: 0;
+ line-height: 0;
+ cursor: pointer;
+ }
+ .tablesorter-filter-row.hideme * {
+ height: 1px;
+ min-height: 0;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ /* don't use visibility: hidden because it disables tabbing */
+ opacity: 0;
+ filter: alpha(opacity=0);
+ }
+ /* rows hidden by filtering (needed for child rows) */
+ .filtered {
+ display: none;
+ }
+
+ /* ajax error row */
+ .tablesorter-errorRow td {
+ text-align: center;
+ cursor: pointer;
+ background-color: @errorBackground;
+ }
+
+}
diff --git a/web/_static/tablesorter/css/less/metro.less b/web/_static/tablesorter/css/less/metro.less
new file mode 100644
index 0000000..5fd989f
--- /dev/null
+++ b/web/_static/tablesorter/css/less/metro.less
@@ -0,0 +1,357 @@
+/* Tablesorter Custom Metro LESS Theme by Rob Garrison
+
+To create your own theme, modify the code below and run it through
+a LESS compiler, like this one: http://leafo.net/lessphp/editor.html
+or download less.js from http://lesscss.org/
+
+Test out these customization files live
+ Basic LESS Theme : http://codepen.io/Mottie/pen/eqBbn
+ Bootstrap LESS : http://codepen.io/Mottie/pen/Ltzpi
+ Metro LESS Style : http://codepen.io/Mottie/pen/gCslk
+ Basic SCSS : http://codepen.io/Mottie/pen/LbXdNR
+
+*/
+
+/*** theme ***/
+@theme : tablesorter-metro;
+
+/*** fonts ***/
+@tableHeaderFont : 14px 'Segoe UI Semilight', 'Open Sans', Verdana, Arial, Helvetica, sans-serif;
+@tableBodyFont : 14px 'Segoe UI Semilight', 'Open Sans', Verdana, Arial, Helvetica, sans-serif;
+
+/*** color definitions ***/
+/* for best results, only change the hue (120),
+ leave the saturation (60%) and luminosity (75%) alone
+ pick the color from here: http://hslpicker.com/#825a2b
+
+ Inspired by http://www.jtable.org/ metro themes:
+ Blue: hsl(212, 86%, 35%)
+ Brown hsl(32, 50%, 30%)
+ Crimson hsl(0, 100%, 38%)
+ Dark Grey hsl(0, 0%, 27%)
+ Dark Orange hsl(13, 70%, 51%)
+ Green hsl(120, 100%, 32%)
+ Light Gray hsl(0, 0%, 44%)
+ Pink hsl(297, 100%, 33%)
+ Purple hsl(257, 51%, 48%)
+ Red hsl(5, 100%, 40%)
+*/
+@headerBackground : hsl(32, 50%, 30%);
+@borderAndBackground : #cdcdcd;
+@headerTextColor : #eee;
+
+@bodyBackground : #fff;
+@bodyTextColor : #000;
+
+@captionBackground : #fff; /* it might be best to match the document body background color here */
+@errorBackground : #e6bf99; /* ajax error message (added to thead) */
+
+@filterCellBackground : #eee;
+@filterElementTextColor: #333;
+@filterElementBkgd : #fff;
+@filterElementBorder : 1px solid #bbb;
+@filterTransitionTime : 0.1s;
+@filterRowHiddenHeight : 4px; /* becomes height using padding (so it's divided by 2) */
+
+@overallPadding : 4px;
+/* 20px should be slightly wider than the icon width to avoid overlap */
+@headerPadding : 4px 20px 4px 4px;
+
+/* url(icons/loading.gif); */
+@processingIcon : url('data:image/gif;base64,R0lGODlhEAAQAPIAAP///1VVVdbW1oCAgFVVVZaWlqurq7a2tiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==');
+
+/* zebra striping */
+.allRows {
+ background-color: @bodyBackground;
+ color: @bodyTextColor;
+}
+.evenRows {
+ background-color: lighten( desaturate(@headerBackground, 80%), 70%);
+ color: @bodyTextColor;
+}
+.oddRows {
+ background-color: lighten( desaturate(@headerBackground, 80%), 50%);
+}
+
+/* hovered rows */
+.oddHovered {
+ background-color: lighten( desaturate(@headerBackground, 50%), 40%);
+ color: @bodyTextColor;
+}
+.evenHovered {
+ background-color: lighten( desaturate(@headerBackground, 50%), 30%);
+ color: @bodyTextColor;
+}
+
+/* Columns widget */
+@primaryOdd : lighten( spin(@headerBackground, 10), 40%);
+@primaryEven : lighten( @primaryOdd, 8% );
+@secondaryOdd : @primaryEven;
+@secondaryEven : lighten( @primaryEven, 8% );
+@tertiaryOdd : @secondaryEven;
+@tertiaryEven : lighten( @secondaryEven, 8% );
+
+/* Filter widget transition */
+.filterWidgetTransition {
+ -webkit-transition: line-height @filterTransitionTime ease;
+ -moz-transition: line-height @filterTransitionTime ease;
+ -o-transition: line-height @filterTransitionTime ease;
+ transition: line-height @filterTransitionTime ease;
+}
+
+/*** Arrows ***/
+@arrowPosition : right 5px center;
+
+/* black */
+@unsortedBlack : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAIVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt0UjBAAAACnRSTlMAMwsqXt+gIBUGxGoDMAAAAFlJREFUCNctzC0SQAAUReEzGNQ3AlHRiSRZFCVZYgeswRL8hLdK7834wj3tAlGP6y7fYHpKS6w6WwbVG0I1NZVnZPG8/DYxOYlnhUYkA06R1s9ESsxR4NIdPhkPFDFYuEnMAAAAAElFTkSuQmCC);
+@sortAscBlack : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAIVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABt0UjBAAAACnRSTlMAMwsqXt+gIBUGxGoDMAAAAFlJREFUCNctzC0SQAAUReEzGNQ3AlHRiSRZFCVZYgeswRL8hLdK7834wj3tAlGP6y7fYHpKS6w6WwbVG0I1NZVnZPG8/DYxOYlnhUYkA06R1s9ESsxR4NIdPhkPFDFYuEnMAAAAAElFTkSuQmCC);
+@sortDescBlack : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAALVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADBoCg+AAAADnRSTlMAMiweCQITTvDctZZqaTlM310AAABcSURBVAjXY2BgYEtgAAFHERDJqigUAKSYBQUNgFSioKAYAwOLIBA4MASBKFUGQxAlzAAF+94BwWuGKBC1lIFl3rt3Lx0YGCzevWsGSjK9e6cAUlT3HKyW9wADAwDRrBiDy6bKzwAAAABJRU5ErkJggg==);
+
+/* white */
+@unsortedWhite : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAElBMVEUAAADu7u7u7u7u7u7u7u7u7u7yb344AAAABnRSTlMAMhIHKyAHBrhHAAAATElEQVQI12NgYGBSYAABQ2Ew5SgCIlkFBQOAlKKgoBADA7MgEBgwsIAoB4ZAECXKAAFQHkg9WIejoCBIv4mgoDOQYgZpAxkDNARqEQBTkAYuMZEHPgAAAABJRU5ErkJggg==);
+@sortAscWhite : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAHlBMVEUAAADu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u4+jEeEAAAACXRSTlMAMwkqFV7roCD4hW+/AAAAWUlEQVQI1y3MrQ5AABSG4Xd+Rj0jiDabjKZxB6qqaarGNRh27tY5myd8b/uAeML1l2+wPqUlUd0ss+oNoZqG2rOwe15+p5iC1HNAK5IBlUjnZyIlZsxx0QAfzokSZgp96u4AAAAASUVORK5CYII=);
+@sortDescWhite : url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAQBAMAAADQT4M0AAAAJ1BMVEUAAADu7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u7u4RJgHSAAAADHRSTlMAMiweCQITaU7olrlu2HdvAAAAXElEQVQI12NgYGBLYAABRxEQyaooFACkmAUFDYBUoqCgGAMDiyAQODAEgShVBkMQJcwABWvOAMEphmgQtZWBZc6ZMycdGBhszpw5DJRkOnNGAaSo5wRYLXsBAwMAi4YWQHRX4F0AAAAASUVORK5CYII=);
+
+/* automatically choose the correct arrow/text color */
+.headerText (@a) when (lightness(@a) >= 50%) {
+ color: @headerTextColor;
+}
+.headerText (@a) when (lightness(@a) < 50%) {
+ color: lighten(@headerTextColor, 90%);
+}
+.unsorted (@a) when (lightness(@a) >= 50%) {
+ background-image: @unsortedBlack;
+}
+.unsorted (@a) when (lightness(@a) < 50%) {
+ background-image: @unsortedWhite;
+}
+.sortAsc (@a) when (lightness(@a) >= 50%) {
+ background-image: @sortAscBlack;
+}
+.sortAsc (@a) when (lightness(@a) < 50%) {
+ background-image: @sortAscWhite;
+}
+.sortDesc (@a) when (lightness(@a) >= 50%) {
+ background-image: @sortDescBlack;
+}
+.sortDesc (@a) when (lightness(@a) < 50%) {
+ background-image: @sortDescWhite;
+}
+
+/* variable theme name - requires less.js 1.3+;
+ or just replace (!".@{theme}") with the contents of @theme
+*/
+.@{theme} {
+ font: @tableBodyFont;
+ background-color: @borderAndBackground;
+ margin: 10px 0 15px;
+ width: 100%;
+ text-align: left;
+ border-spacing: 0;
+ border: 0;
+
+ th, td {
+ border: 0;
+ }
+
+ /* style th's outside of the thead */
+ th, thead td {
+ font: @tableHeaderFont;
+ font-weight: bold;
+ background-color: @headerBackground;
+ color: @headerTextColor;
+ .headerText(@headerBackground);
+ border-collapse: collapse;
+ padding: @overallPadding;
+ }
+
+ .dark-row th, .dark-row td, caption.dark-row {
+ background-color: darken( @headerBackground, 10% );
+ }
+
+ tbody td, tfoot th, tfoot td {
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* style header */
+ .tablesorter-header {
+ .unsorted(@headerBackground);
+ background-repeat: no-repeat;
+ background-position: @arrowPosition;
+ cursor: pointer;
+ white-space: normal;
+ }
+
+ .tablesorter-header-inner {
+ padding: @headerPadding;
+ }
+
+ .tablesorter-header.sorter-false {
+ background-image: none;
+ cursor: default;
+ padding: @overallPadding;
+ }
+
+ .tablesorter-headerAsc {
+ .sortAsc(@headerBackground);
+ }
+
+ .tablesorter-headerDesc {
+ .sortDesc(@headerBackground);
+ }
+
+ /* tfoot */
+ tfoot .tablesorter-headerAsc,
+ tfoot .tablesorter-headerDesc {
+ /* remove sort arrows from footer */
+ background-image: none;
+ }
+
+ /* optional disabled input styling */
+ .disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ cursor: not-allowed;
+ }
+
+ /* body */
+ tbody {
+
+ td {
+ .allRows;
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* Zebra Widget - row alternating colors */
+ tr.odd > td {
+ .oddRows;
+ }
+ tr.even > td {
+ .evenRows;
+ }
+
+ }
+
+ /* hovered row colors
+ you'll need to add additional lines for
+ rows with more than 2 child rows
+ */
+ tbody > tr.hover > td,
+ tbody > tr:hover > td,
+ tbody > tr:hover + tr.tablesorter-childRow > td,
+ tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td,
+ tbody > tr.even.hover > td,
+ tbody > tr.even:hover > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .evenHovered;
+ }
+ tbody > tr.odd.hover > td,
+ tbody > tr.odd:hover > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .oddHovered;
+ }
+
+ /* table processing indicator - indeterminate spinner */
+ .tablesorter-processing {
+ background-image: @processingIcon;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+
+ /* pager */
+ div.tablesorter-pager {
+ button {
+ background-color: lighten( @headerBackground, 7% );
+ color: @headerTextColor;
+ border: lighten( @headerBackground, 15% ) 1px solid;
+ cursor: pointer;
+ }
+ button:hover {
+ background-color: lighten( @headerBackground, 15% );
+ }
+ }
+
+ /* Column Widget - column sort colors */
+ tr.odd td.primary {
+ background-color: @primaryOdd;
+ }
+ td.primary, tr.even td.primary {
+ background-color: @primaryEven;
+ }
+ tr.odd td.secondary {
+ background-color: @secondaryOdd;
+ }
+ td.secondary, tr.even td.secondary {
+ background-color: @secondaryEven;
+ }
+ tr.odd td.tertiary {
+ background-color: @tertiaryOdd;
+ }
+ td.tertiary, tr.even td.tertiary {
+ background-color: @tertiaryEven;
+ }
+
+ /* caption (non-theme matching) */
+ caption {
+ background-color: @captionBackground ;
+ }
+
+ /* filter widget */
+ .tablesorter-filter-row input,
+ .tablesorter-filter-row select{
+ width: 98%;
+ height: auto;
+ margin: 0;
+ padding: @overallPadding;
+ color: @filterElementTextColor;
+ background-color: @filterElementBkgd;
+ border: @filterElementBorder;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ .filterWidgetTransition;
+ }
+ .tablesorter-filter-row {
+ background-color: @filterCellBackground;
+ }
+ .tablesorter-filter-row td {
+ text-align: center;
+ background-color: @filterCellBackground;
+ line-height: normal;
+ text-align: center; /* center the input */
+ .filterWidgetTransition;
+ }
+ /* hidden filter row */
+ .tablesorter-filter-row.hideme td {
+ padding: @filterRowHiddenHeight / 2;
+ margin: 0;
+ line-height: 0;
+ cursor: pointer;
+ }
+ .tablesorter-filter-row.hideme * {
+ height: 1px;
+ min-height: 0;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ /* don't use visibility: hidden because it disables tabbing */
+ opacity: 0;
+ filter: alpha(opacity=0);
+ }
+ /* rows hidden by filtering (needed for child rows) */
+ .filtered {
+ display: none;
+ }
+
+ /* ajax error row */
+ .tablesorter-errorRow td {
+ text-align: center;
+ cursor: pointer;
+ background-color: @errorBackground;
+ }
+
+}
diff --git a/web/_static/tablesorter/css/less/theme.less b/web/_static/tablesorter/css/less/theme.less
new file mode 100644
index 0000000..e645227
--- /dev/null
+++ b/web/_static/tablesorter/css/less/theme.less
@@ -0,0 +1,330 @@
+/* Tablesorter Custom LESS Theme by Rob Garrison
+
+ To create your own theme, modify the code below and run it through
+ a LESS compiler, like this one: http://leafo.net/lessphp/editor.html
+ or download less.js from http://lesscss.org/
+
+Test out these custom less files live
+ Basic Theme : http://codepen.io/Mottie/pen/eqBbn
+ Bootstrap : http://codepen.io/Mottie/pen/Ltzpi
+ Metro Style : http://codepen.io/Mottie/pen/gCslk
+ Basic SCSS : http://codepen.io/Mottie/pen/LbXdNR
+
+ */
+
+/*** theme ***/
+@theme : tablesorter-custom;
+
+/*** fonts ***/
+@tableHeaderFont : 11px 'trebuchet ms', verdana, arial;
+@tableBodyFont : 11px 'trebuchet ms', verdana, arial;
+
+/*** color definitions ***/
+/* for best results, only change the hue (120),
+ leave the saturation (60%) and luminosity (75%) alone
+ pick the color from here: http://hslpicker.com/#99E699 */
+@headerBackground : hsl(120, 60%, 75%);
+@borderAndBackground : #cdcdcd;
+@overallBorder : @borderAndBackground 1px solid;
+@headerTextColor : #000;
+
+@bodyBackground : #fff;
+@bodyTextColor : #000;
+
+@headerAsc : darken(spin(@headerBackground, 5), 10%); /* darken(@headerBackground, 10%); */
+@headerDesc : lighten(spin(@headerBackground, -5), 10%); /* desaturate(@headerAsc, 5%); */
+
+@captionBackground : #fff; /* it might be best to match the document body background color here */
+@errorBackground : #e6bf99; /* ajax error message (added to thead) */
+
+@filterCellBackground : #eee;
+@filterElementTextColor: #333;
+@filterElementBkgd : #fff;
+@filterElementBorder : 1px solid #bbb;
+@filterTransitionTime : 0.1s;
+@filterRowHiddenHeight : 4px; /* becomes height using padding (so it's divided by 2) */
+
+@overallPadding : 4px;
+/* 20px should be slightly wider than the icon width to avoid overlap */
+@headerPadding : 4px 20px 4px 4px;
+
+/* url(icons/loading.gif); */
+@processingIcon : url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=');
+
+/* zebra striping */
+.allRows {
+ background-color: @bodyBackground;
+ color: @bodyTextColor;
+}
+.evenRows {
+ background-color: lighten(@headerBackground, 40%);
+ color: @bodyTextColor;
+}
+.oddRows {
+ background-color: lighten(@headerBackground, 20%);
+}
+
+/* hovered rows */
+.oddHovered {
+ background-color: desaturate(@headerBackground, 60%);
+ color: @bodyTextColor;
+}
+.evenHovered {
+ background-color: lighten( desaturate(@headerBackground, 60%), 10% );
+ color: @bodyTextColor;
+}
+
+/* Columns widget */
+@primaryOdd : spin(@headerBackground, 10); /* saturate( darken( desaturate(@headerBackground, 10%), 10% ), 30%); */
+@primaryEven : lighten( @primaryOdd, 10% );
+@secondaryOdd : @primaryEven;
+@secondaryEven : lighten( @primaryEven, 5% );
+@tertiaryOdd : @secondaryEven;
+@tertiaryEven : lighten( @secondaryEven, 5% );
+
+/* Filter widget transition */
+.filterWidgetTransition {
+ -webkit-transition: line-height @filterTransitionTime ease;
+ -moz-transition: line-height @filterTransitionTime ease;
+ -o-transition: line-height @filterTransitionTime ease;
+ transition: line-height @filterTransitionTime ease;
+}
+
+/*** Arrows ***/
+@arrowPosition : right 5px center;
+
+/* black */
+@unsortedBlack : url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
+@sortAscBlack : url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
+@sortDescBlack : url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
+
+/* white */
+@unsortedWhite : url(data:image/gif;base64,R0lGODlhFQAJAIAAAP///////yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
+@sortAscWhite : url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7);
+@sortDescWhite : url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7);
+
+/* automatically choose the correct arrow/text color */
+.headerText (@a) when (lightness(@a) >= 50%) {
+ color: @headerTextColor;
+}
+.headerText (@a) when (lightness(@a) < 50%) {
+ color: lighten(@headerTextColor, 90%);
+}
+.unsorted (@a) when (lightness(@a) >= 50%) {
+ background-image: @unsortedBlack;
+}
+.unsorted (@a) when (lightness(@a) < 50%) {
+ background-image: @unsortedWhite;
+}
+.sortAsc (@a) when (lightness(@a) >= 50%) {
+ background-image: @sortAscBlack;
+}
+.sortAsc (@a) when (lightness(@a) < 50%) {
+ background-image: @sortAscWhite;
+}
+.sortDesc (@a) when (lightness(@a) >= 50%) {
+ background-image: @sortDescBlack;
+}
+.sortDesc (@a) when (lightness(@a) < 50%) {
+ background-image: @sortDescWhite;
+}
+
+/* variable theme name - requires less.js 1.3+;
+ or just replace (!".@{theme}") with the contents of @theme
+ */
+.@{theme} {
+ font: @tableBodyFont;
+ background-color: @borderAndBackground;
+ margin: 10px 0 15px;
+ width: 100%;
+ text-align: left;
+ border-spacing: 0;
+ border: @overallBorder;
+ border-width: 1px 0 0 1px;
+
+ th, td {
+ border: @overallBorder;
+ border-width: 0 1px 1px 0;
+ }
+
+ /* style th's outside of the thead */
+ th, thead td {
+ font: @tableHeaderFont;
+ font-weight: bold;
+ background-color: @headerBackground;
+ .headerText(@headerBackground);
+ border-collapse: collapse;
+ padding: @overallPadding;
+ }
+
+ tbody td, tfoot th, tfoot td {
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* style header */
+ .tablesorter-header {
+ .unsorted(@headerBackground);
+ background-repeat: no-repeat;
+ background-position: @arrowPosition;
+ padding: @headerPadding;
+ cursor: pointer;
+ }
+
+ .tablesorter-header.sorter-false {
+ background-image: none;
+ cursor: default;
+ padding: @overallPadding;
+ }
+
+ .tablesorter-headerAsc {
+ background-color: @headerAsc;
+ .sortAsc(@headerBackground);
+ }
+
+ .tablesorter-headerDesc {
+ background-color: @headerDesc;
+ .sortDesc(@headerBackground);
+ }
+
+ /* tfoot */
+ tfoot .tablesorter-headerAsc,
+ tfoot .tablesorter-headerDesc {
+ /* remove sort arrows from footer */
+ background-image: none;
+ }
+
+ /* optional disabled input styling */
+ .disabled {
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+ cursor: not-allowed;
+ }
+
+ /* body */
+ tbody {
+
+ td {
+ .allRows;
+ padding: @overallPadding;
+ vertical-align: top;
+ }
+
+ /* Zebra Widget - row alternating colors */
+ tr.odd > td {
+ .oddRows;
+ }
+ tr.even > td {
+ .evenRows;
+ }
+
+ }
+
+ /* hovered row colors
+ you'll need to add additional lines for
+ rows with more than 2 child rows
+ */
+ tbody > tr.hover td,
+ tbody > tr:hover td,
+ tbody > tr:hover + tr.tablesorter-childRow > td,
+ tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td,
+ tbody > tr.even.hover > td,
+ tbody > tr.even:hover > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow > td,
+ tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .evenHovered;
+ }
+ tbody > tr.odd.hover > td,
+ tbody > tr.odd:hover > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow > td,
+ tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td {
+ .oddHovered;
+ }
+
+ /* table processing indicator - indeterminate spinner */
+ .tablesorter-processing {
+ background-image: @processingIcon;
+ background-position: center center;
+ background-repeat: no-repeat;
+ }
+
+ /* Column Widget - column sort colors */
+ tr.odd td.primary {
+ background-color: @primaryOdd;
+ }
+ td.primary, tr.even td.primary {
+ background-color: @primaryEven;
+ }
+ tr.odd td.secondary {
+ background-color: @secondaryOdd;
+ }
+ td.secondary, tr.even td.secondary {
+ background-color: @secondaryEven;
+ }
+ tr.odd td.tertiary {
+ background-color: @tertiaryOdd;
+ }
+ td.tertiary, tr.even td.tertiary {
+ background-color: @tertiaryEven;
+ }
+
+ /* caption (non-theme matching) */
+ caption {
+ background-color: @captionBackground ;
+ }
+
+ /* filter widget */
+ .tablesorter-filter-row input,
+ .tablesorter-filter-row select {
+ width: 98%;
+ height: auto;
+ margin: 0;
+ padding: @overallPadding;
+ color: @filterElementTextColor;
+ background-color: @filterElementBkgd;
+ border: @filterElementBorder;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ .filterWidgetTransition;
+ }
+ .tablesorter-filter-row {
+ background-color: @filterCellBackground;
+ }
+ .tablesorter-filter-row td {
+ text-align: center;
+ background-color: @filterCellBackground;
+ line-height: normal;
+ text-align: center; /* center the input */
+ .filterWidgetTransition;
+ }
+ /* hidden filter row */
+ .tablesorter-filter-row.hideme td {
+ padding: @filterRowHiddenHeight / 2;
+ margin: 0;
+ line-height: 0;
+ cursor: pointer;
+ }
+ .tablesorter-filter-row.hideme * {
+ height: 1px;
+ min-height: 0;
+ border: 0;
+ padding: 0;
+ margin: 0;
+ /* don't use visibility: hidden because it disables tabbing */
+ opacity: 0;
+ filter: alpha(opacity=0);
+ }
+ /* rows hidden by filtering (needed for child rows) */
+ .filtered {
+ display: none;
+ }
+
+ /* ajax error row */
+ .tablesorter-errorRow td {
+ text-align: center;
+ cursor: pointer;
+ background-color: @errorBackground;
+ }
+
+}