<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <br>
    Hi Samuel,<br>
    <br>
    I applied this patch and the Ginger Base patch to be able to really
    test it and I got the following when generating a new debug report:<br>
    <br>
    <img src="cid:part1.07040608.01050607@linux.vnet.ibm.com" alt=""><br>
    <br>
    As you can see the loading icon is not aligned with the report name
    and is overloading a little bit the check box area.<br>
    <br>
    Should this issue be fixed by this patch or by the Ginger Base
    patch?<br>
    <br>
    Regards,<br>
    Aline Manera<br>
    <br>
    <div class="moz-cite-prefix">On 04/27/2016 04:03 PM,
      <a class="moz-txt-link-abbreviated" href="mailto:sguimaraes943@gmail.com">sguimaraes943@gmail.com</a> wrote:<br>
    </div>
    <blockquote
      cite="mid:1461783794-127149-2-git-send-email-sguimaraes943@gmail.com"
      type="cite">
      <pre wrap="">From: Samuel GuimarĂ£es <a class="moz-txt-link-rfc2396E" href="mailto:sguimaraes943@gmail.com">&lt;sguimaraes943@gmail.com&gt;</a>

This commit enables multiple selection with wok.list.js widget. It also features some enhancements for mobile and keyboard navigation.

Signed-off-by: Samuel GuimarĂ£es <a class="moz-txt-link-rfc2396E" href="mailto:sguimaraes943@gmail.com">&lt;sguimaraes943@gmail.com&gt;</a>
---
 ui/css/bootstrap.custom.css            |   8 +-
 ui/css/src/modules/_buttons.scss       |   8 ++
 ui/css/src/modules/_wok-forms.scss     |   1 +
 ui/css/src/modules/_wok-grid.scss      | 250 +++++++++++++++++++++++++++-----
 ui/css/src/modules/_wok-variables.scss |   4 +-
 ui/css/wok.css                         | 254 ++++++++++++++++++++++++++++-----
 ui/js/src/wok.list.js                  | 174 +++++++++++-----------
 7 files changed, 531 insertions(+), 168 deletions(-)

diff --git a/ui/css/bootstrap.custom.css b/ui/css/bootstrap.custom.css
index 13869da..c69939c 100644
--- a/ui/css/bootstrap.custom.css
+++ b/ui/css/bootstrap.custom.css
@@ -2996,7 +2996,7 @@ fieldset[disabled] .btn-link:focus {
 }

 .btn-xs, .btn-group-xs &gt; .btn {
-  padding: 1px 5px;
+  padding: 2px 10px;
   font-size: 12px;
   line-height: 1.5;
   border-radius: 3px;
@@ -3460,9 +3460,9 @@ tbody.collapse.in {
   display: table-cell;
 }

-.input-group-addon:not(:first-child):not(:last-child),
-.input-group-btn:not(:first-child):not(:last-child),
-.input-group .form-control:not(:first-child):not(:last-child) {
+.input-group-addon:not(:first-child, :first-child, :first-child):not(:last-child, :last-child, :last-child),
+.input-group-btn:not(:first-child, :first-child, :first-child):not(:last-child, :last-child, :last-child),
+.input-group .form-control:not(:first-child, :first-child, :first-child):not(:last-child, :last-child, :last-child) {
   border-radius: 0;
 }

diff --git a/ui/css/src/modules/_buttons.scss b/ui/css/src/modules/_buttons.scss
index 85d9531..077a21f 100644
--- a/ui/css/src/modules/_buttons.scss
+++ b/ui/css/src/modules/_buttons.scss
@@ -23,6 +23,14 @@
     font-size: 13pt;
 }

+.btn-xs, .btn-group-xs &gt; .btn {
+    font-size: 10.5pt;
+}
+
+.btn-sm, .btn-group-sm &gt; .btn  {
+    font-size: 11.5pt;
+}
+
 .btn-login {
   @include button-variant($btn-login-color, $btn-login-bg, $btn-login-border);
 }
\ No newline at end of file
diff --git a/ui/css/src/modules/_wok-forms.scss b/ui/css/src/modules/_wok-forms.scss
index d426a60..c3f722a 100644
--- a/ui/css/src/modules/_wok-forms.scss
+++ b/ui/css/src/modules/_wok-forms.scss
@@ -75,6 +75,7 @@ input[type=checkbox].wok-checkbox + label:before {
 input[type=checkbox].wok-checkbox:checked + label:before {
     content: "\f14a";
     letter-spacing: 8px;
+    margin-right: 0.9px // Sub-pixel unit for Chrome and Firefox anti-alias
 }

 input[type=radio].wok-radio + label:before {
diff --git a/ui/css/src/modules/_wok-grid.scss b/ui/css/src/modules/_wok-grid.scss
index 730d224..152811d 100644
--- a/ui/css/src/modules/_wok-grid.scss
+++ b/ui/css/src/modules/_wok-grid.scss
@@ -36,23 +36,17 @@
     top: 37px !important;
 }

-.wok-list-cell {
-    position: relative;
-    padding-left: 45px;
+.wok-list-content {
+    border-top: 1px solid $table-first-row-border-color;
 }

-.wok-repository-status {
-    position: absolute;
-    left: 6px;
-    top: 0;
-}
-
-.wok-repository-status .fa {
-    font-size: 23px;
-    color: $fa-green;
+.wok-list-cell {
+    position: relative;
+    padding-left: 10px;
 }

-.wok-list-name, .wok-list-description {
+.wok-list-name,
+.wok-list-description {
     display: block;
 }

@@ -67,47 +61,231 @@
     overflow: hidden;
 }

-.wok-list-content tbody tr,  .wok-list-content tbody tr * {
+.wok-list-item-status {
+    float: left;
+    margin-top: 12px;
+    margin-right: 8px;
+    margin-bottom: 6px;
+    height: 25px;
+}
+
+.wok-list-item-status &gt; .fa {
+    font-size: 23px;
+    color: $fa-green;
+}
+
+.wok-list-item-status.disabled &gt; .fa:before {
+    display: block;
+    width: 19px;
+    height: 23px;
+    padding: 0;
+    border: 0;
+    content: "";
+}
+
+.wok-list-cell.disabled span {
+    color: $gray-light;
+}
+
+.wok-list-action-button-container {
+    padding-bottom: 16px;
+}
+
+.wok-list-loading-icon-inline {
+    background: transparent url('#{$wok-icon-path}/spin5.svg') no-repeat 50% 50%;
+    @include animation(spin 3s infinite linear);
+    height: 16px;
+    width: 16px;
+    background-size: 100%;
+    display: none;
+    position: absolute;
+}
+
+.generating .wok-list-description {
+    padding-left: 24px;
+}
+
+.generating .wok-list-loading-icon-inline {
+    display: block;
+    position: absolute;
+    top: 27px;
+    left: 14px;
+}
+
+.wok-list &gt; ul {
+    list-style: none;
+    padding: 0;
+}
+
+.wok-list &gt; ul &gt; li,
+.wok-list &gt; ul &gt; li * {
     @include user-select(none);
 }

-.wok-list-content tbody tr:hover {
+.wok-list &gt; ul &gt; li,
+.wok-list &gt; ul &gt; li &gt; label {
+    width: 100%;
+}
+
+.wok-list &gt; ul &gt; li {
+    border-top: 1px solid $table-border-color;
+    background: $table-bg;
+    position: relative;
+    @include transition(background .1s ease-in-out);
+}
+
+.wok-list &gt; ul &gt; li:first-child {
+    border: 0;
+}
+
+.wok-list &gt; ul &gt; li:nth-of-type(even) {
+    background: $table-bg-accent;
+}
+
+.wok-list  &gt; ul &gt; li.selected {
+    background: $table-bg-hover;
+}
+
+.wok-list &gt; ul &gt; li &gt; label {
+    cursor: pointer !important;
+    text-decoration: none;
+    margin-bottom: 0;
+    padding-bottom: 5px;
+}
+
+.wok-list &gt; ul &gt; li &gt; label:hover {
     text-decoration: underline;
-    cursor: pointer;
 }

-.wok-list-content tbody tr.generating:hover {
+.wok-list &gt; ul &gt; li.generating &gt; label:hover {
     text-decoration: none;
     cursor: default;
 }

-.wok-list-content tbody tr.selected {
-    background: #ddd;
+.wok-list &gt; ul &gt; li &gt; input[type=checkbox] {
+    left: -15px;
 }

-span.wok-repository-status.disabled {
-    display: none;
+.wok-list &gt; ul &gt; li &gt; input[type=checkbox].wok-checkbox + label:before {
+    float: left;
+    height: 30px;
+    margin-top: 13px;
 }

-.wok-list-cell.disabled span {
-    color: #999;
+// Mobile first
+
+.wok-list-action-button-container {
+    background: $body-bg;
+    z-index: 1;
+    position: relative;
+    @include box-shadow(0 20px 20px -20px rgba(0,0,0,.4));
 }

-.wok-single-button {
-    padding-bottom: 16px;
-    margin-top: -11px;
+.mobile-action {
+    width: 100%;
 }

-.generating .wok-list-description {
-    padding-left: 24px;
+.mobile-action .btn {
+    width: 100%;
+    height: 40px;
+    border-radius: 0;
 }

-.generating .wok-list-loading-icon-inline {
-    background: transparent url('#{$wok-icon-path}/spin5.svg') no-repeat 50% 50%;
-    @include animation(spin 3s infinite linear);
-    height: 16px;
-    width: 16px;
-    background-size: 100%;
-    display: block;
-    position: absolute;
+.mobile-action &gt; .btn {
+    border-radius: $border-radius-base;
 }
+
+.mobile-action.open &gt; .btn {
+    border-radius: $border-radius-base $border-radius-base 0 0;
+}
+
+.mobile-action .btn span.mobile-action-label {
+    font-weight: 600;
+}
+
+.mobile-action .btn span.mobile-action-count {
+    font-weight: 300;
+}
+
+.mobile-action .btn span.mobile-action-count strong {
+    font-weight: 600;
+    font-size: 11pt;
+}
+
+.mobile-action .dropdown-menu {
+    width: 100%;
+    border: 0;
+    box-shadow: none;
+    background: transparent;
+    padding: 0;
+    margin: 0;
+    border-radius: 0;
+}
+
+.mobile-action.open .dropdown-menu .btn {
+    border-radius: 0;
+}
+
+.mobile-action.open .dropdown-menu li:last-child .btn {
+    border-radius: 0 0 $border-radius-base $border-radius-base;
+}
+
+.mobile-action .dropdown-menu li &gt; .btn.disabled,
+.mobile-action .dropdown-menu li &gt; .btn[disabled] {
+    opacity: 1;
+    background: #585758;
+    border-color: #585758;
+    color: #ddd;
+}
+
+// Reset Mobile styles to mimic desktop when min-width is bigger than 768px wide
+
+@media (min-width: $screen-md-min) {
+
+    .wok-list-action-button-container {
+        @include box-shadow(none);
+    }
+
+    .wok-list-action-button-container .dropdown-toggle {
+        display: none;
+    }
+
+    .wok-list-action-button-container .mobile-action {
+        position: static;
+        height: 40px;
+    }
+
+    .wok-list-action-button-container .mobile-action .btn {
+        width: auto;
+    }
+
+    .wok-list-action-button-container .mobile-action li:first-child .btn {
+        border-top-left-radius: 4px;
+        border-bottom-left-radius: 4px;
+    }
+
+
+    .wok-list-action-button-container .mobile-action li:last-child .btn {
+        border-top-left-radius: 0;
+        border-bottom-left-radius: 0 !important;
+        border-top-right-radius: $border-radius-base !important;
+        border-bottom-right-radius: $border-radius-base;
+    }
+
+    .wok-list-action-button-container &gt; .dropdown.mobile-action &gt; .dropdown-menu {
+        display: block;
+        vertical-align: middle;
+        position: absolute;
+        top: 0;
+    }
+
+    .wok-list-action-button-container &gt; .dropdown.mobile-action &gt; .dropdown-menu &gt; li {
+        display: inline-block;
+    }
+
+    .wok-list &gt; ul &gt; li &gt; input[type=checkbox].wok-checkbox:focus + label {
+        outline: auto 5px $input-border-focus; // Accessibility
+        outline: auto 5px -webkit-focus-ring-color; // Set default webkit focus ring color for webkit browsers
+    }
+
+}
\ No newline at end of file
diff --git a/ui/css/src/modules/_wok-variables.scss b/ui/css/src/modules/_wok-variables.scss
index 9f53cb2..c58feba 100644
--- a/ui/css/src/modules/_wok-variables.scss
+++ b/ui/css/src/modules/_wok-variables.scss
@@ -164,8 +164,8 @@ $padding-large-horizontal:  16px !default;
 $padding-small-vertical:    5px !default;
 $padding-small-horizontal:  10px !default;

-$padding-xs-vertical:       1px !default;
-$padding-xs-horizontal:     5px !default;
+$padding-xs-vertical:       2px !default;
+$padding-xs-horizontal:     10px !default;

 $line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
 $line-height-small:         1.5 !default;
diff --git a/ui/css/wok.css b/ui/css/wok.css
index 615cdea..d296167 100644
--- a/ui/css/wok.css
+++ b/ui/css/wok.css
@@ -336,6 +336,14 @@ body {
   font-size: 13pt;
 }

+.btn-xs, .btn-group-xs &gt; .btn {
+  font-size: 10.5pt;
+}
+
+.btn-sm, .btn-group-sm &gt; .btn {
+  font-size: 11.5pt;
+}
+
 .btn-login {
   color: #fff;
   background-color: #008abf;
@@ -676,23 +684,17 @@ fieldset[disabled] .btn-login.active {
   top: 37px !important;
 }

-.wok-list-cell {
-  position: relative;
-  padding-left: 45px;
+.wok-list-content {
+  border-top: 1px solid #e3e3e3;
 }

-.wok-repository-status {
-  position: absolute;
-  left: 6px;
-  top: 0;
-}
-
-.wok-repository-status .fa {
-  font-size: 23px;
-  color: #a8d46f;
+.wok-list-cell {
+  position: relative;
+  padding-left: 10px;
 }

-.wok-list-name, .wok-list-description {
+.wok-list-name,
+.wok-list-description {
   display: block;
 }

@@ -707,54 +709,227 @@ fieldset[disabled] .btn-login.active {
   overflow: hidden;
 }

-.wok-list-content tbody tr, .wok-list-content tbody tr * {
+.wok-list-item-status {
+  float: left;
+  margin-top: 12px;
+  margin-right: 8px;
+  margin-bottom: 6px;
+  height: 25px;
+}
+
+.wok-list-item-status &gt; .fa {
+  font-size: 23px;
+  color: #a8d46f;
+}
+
+.wok-list-item-status.disabled &gt; .fa:before {
+  display: block;
+  width: 19px;
+  height: 23px;
+  padding: 0;
+  border: 0;
+  content: "";
+}
+
+.wok-list-cell.disabled span {
+  color: #999;
+}
+
+.wok-list-action-button-container {
+  padding-bottom: 16px;
+}
+
+.wok-list-loading-icon-inline {
+  background: transparent url("/images/theme-default/spin5.svg") no-repeat 50% 50%;
+  -webkit-animation: spin 3s infinite linear;
+  -o-animation: spin 3s infinite linear;
+  animation: spin 3s infinite linear;
+  height: 16px;
+  width: 16px;
+  background-size: 100%;
+  display: none;
+  position: absolute;
+}
+
+.generating .wok-list-description {
+  padding-left: 24px;
+}
+
+.generating .wok-list-loading-icon-inline {
+  display: block;
+  position: absolute;
+  top: 27px;
+  left: 14px;
+}
+
+.wok-list &gt; ul {
+  list-style: none;
+  padding: 0;
+}
+
+.wok-list &gt; ul &gt; li,
+.wok-list &gt; ul &gt; li * {
   -webkit-user-select: none;
   -moz-user-select: none;
   -ms-user-select: none;
   user-select: none;
 }

-.wok-list-content tbody tr:hover {
+.wok-list &gt; ul &gt; li,
+.wok-list &gt; ul &gt; li &gt; label {
+  width: 100%;
+}
+
+.wok-list &gt; ul &gt; li {
+  border-top: 1px solid #eee;
+  background: #fff;
+  position: relative;
+  -webkit-transition: background 0.1s ease-in-out;
+  -o-transition: background 0.1s ease-in-out;
+  transition: background 0.1s ease-in-out;
+}
+
+.wok-list &gt; ul &gt; li:first-child {
+  border: 0;
+}
+
+.wok-list &gt; ul &gt; li:nth-of-type(even) {
+  background: #fcfcfc;
+}
+
+.wok-list &gt; ul &gt; li.selected {
+  background: #ddd;
+}
+
+.wok-list &gt; ul &gt; li &gt; label {
+  cursor: pointer !important;
+  text-decoration: none;
+  margin-bottom: 0;
+  padding-bottom: 5px;
+}
+
+.wok-list &gt; ul &gt; li &gt; label:hover {
   text-decoration: underline;
-  cursor: pointer;
 }

-.wok-list-content tbody tr.generating:hover {
+.wok-list &gt; ul &gt; li.generating &gt; label:hover {
   text-decoration: none;
   cursor: default;
 }

-.wok-list-content tbody tr.selected {
-  background: #ddd;
+.wok-list &gt; ul &gt; li &gt; input[type=checkbox] {
+  left: -15px;
 }

-span.wok-repository-status.disabled {
-  display: none;
+.wok-list &gt; ul &gt; li &gt; input[type=checkbox].wok-checkbox + label:before {
+  float: left;
+  height: 30px;
+  margin-top: 13px;
 }

-.wok-list-cell.disabled span {
-  color: #999;
+.wok-list-action-button-container {
+  background: #fff;
+  z-index: 1;
+  position: relative;
+  -webkit-box-shadow: 0 20px 20px -20px rgba(0, 0, 0, 0.4);
+  box-shadow: 0 20px 20px -20px rgba(0, 0, 0, 0.4);
 }

-.wok-single-button {
-  padding-bottom: 16px;
-  margin-top: -11px;
+.mobile-action {
+  width: 100%;
 }

-.generating .wok-list-description {
-  padding-left: 24px;
+.mobile-action .btn {
+  width: 100%;
+  height: 40px;
+  border-radius: 0;
 }

-.generating .wok-list-loading-icon-inline {
-  background: transparent url("/images/theme-default/spin5.svg") no-repeat 50% 50%;
-  -webkit-animation: spin 3s infinite linear;
-  -o-animation: spin 3s infinite linear;
-  animation: spin 3s infinite linear;
-  height: 16px;
-  width: 16px;
-  background-size: 100%;
-  display: block;
-  position: absolute;
+.mobile-action &gt; .btn {
+  border-radius: 3px;
+}
+
+.mobile-action.open &gt; .btn {
+  border-radius: 3px 3px 0 0;
+}
+
+.mobile-action .btn span.mobile-action-label {
+  font-weight: 600;
+}
+
+.mobile-action .btn span.mobile-action-count {
+  font-weight: 300;
+}
+
+.mobile-action .btn span.mobile-action-count strong {
+  font-weight: 600;
+  font-size: 11pt;
+}
+
+.mobile-action .dropdown-menu {
+  width: 100%;
+  border: 0;
+  box-shadow: none;
+  background: transparent;
+  padding: 0;
+  margin: 0;
+  border-radius: 0;
+}
+
+.mobile-action.open .dropdown-menu .btn {
+  border-radius: 0;
+}
+
+.mobile-action.open .dropdown-menu li:last-child .btn {
+  border-radius: 0 0 3px 3px;
+}
+
+.mobile-action .dropdown-menu li &gt; .btn.disabled,
+.mobile-action .dropdown-menu li &gt; .btn[disabled] {
+  opacity: 1;
+  background: #585758;
+  border-color: #585758;
+  color: #ddd;
+}
+
+@media (min-width: 992px) {
+  .wok-list-action-button-container {
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+  .wok-list-action-button-container .dropdown-toggle {
+    display: none;
+  }
+  .wok-list-action-button-container .mobile-action {
+    position: static;
+    height: 40px;
+  }
+  .wok-list-action-button-container .mobile-action .btn {
+    width: auto;
+  }
+  .wok-list-action-button-container .mobile-action li:first-child .btn {
+    border-top-left-radius: 4px;
+    border-bottom-left-radius: 4px;
+  }
+  .wok-list-action-button-container .mobile-action li:last-child .btn {
+    border-top-left-radius: 0;
+    border-bottom-left-radius: 0 !important;
+    border-top-right-radius: 3px !important;
+    border-bottom-right-radius: 3px;
+  }
+  .wok-list-action-button-container &gt; .dropdown.mobile-action &gt; .dropdown-menu {
+    display: block;
+    vertical-align: middle;
+    position: absolute;
+    top: 0;
+  }
+  .wok-list-action-button-container &gt; .dropdown.mobile-action &gt; .dropdown-menu &gt; li {
+    display: inline-block;
+  }
+  .wok-list &gt; ul &gt; li &gt; input[type=checkbox].wok-checkbox:focus + label {
+    outline: auto 5px #66afe9;
+    outline: auto 5px -webkit-focus-ring-color;
+  }
 }

 .grid-control {
@@ -948,6 +1123,7 @@ input[type=checkbox].wok-checkbox + label:before {
 input[type=checkbox].wok-checkbox:checked + label:before {
   content: "\f14a";
   letter-spacing: 8px;
+  margin-right: 0.9px;
 }

 input[type=radio].wok-radio + label:before {
@@ -1105,7 +1281,7 @@ input[type=radio].wok-radio + label {
 /*
 * Project Wok
 *
-* Copyright IBM Corp, 2015-2016
+* Copyright IBM Corp, 2016
 *
 * Code derived from Project Kimchi
 *
diff --git a/ui/js/src/wok.list.js b/ui/js/src/wok.list.js
index 7d8e27c..f40b2e2 100644
--- a/ui/js/src/wok.list.js
+++ b/ui/js/src/wok.list.js
@@ -24,6 +24,7 @@ wok.widget.List = function(opts) {

 wok.widget.List.prototype = (function() {
     "use strict";
+
     var htmlStr = [
         '&lt;div id="{id}-section" class="panel panel-default"&gt;',
             '&lt;div class="panel-heading"&gt;',
@@ -39,13 +40,19 @@ wok.widget.List.prototype = (function() {
                             '&lt;/button&gt;&lt;/p&gt;',
                         '&lt;/div&gt;',
                     '&lt;/div&gt;',
-                    '&lt;div id="{id}-btn-group" class="btn-group wok-single-button hidden"&gt;',
-
+                    '&lt;div id="{id}-action-group" class="wok-list-action-button-container"&gt;',
+                        '&lt;div class="dropdown mobile-action"&gt;',
+                            '&lt;button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false"&gt;',
+                                '&lt;span class="mobile-action-label"&gt;Actions&lt;/span&gt;', // TODO: Replace with i18n string
+                            '&lt;/button&gt;',
+                            '&lt;ul class="dropdown-menu" role="menu"&gt;',
+                            '&lt;/ul&gt;',
+                        '&lt;/div&gt;',
                     '&lt;/div&gt;',
                     '&lt;div id="{id}" class="row clearfix"&gt;',
                         '&lt;div class="wok-list-content"&gt;',
-                            '&lt;table class="wok-list-table table table-striped" id="list"&gt;',
-                            '&lt;/table&gt;',
+                            '&lt;div class="wok-list" id="list"&gt;',
+                            '&lt;/div&gt;',
                         '&lt;/div&gt;',
                     '&lt;/div&gt;',
                     '&lt;div class="wok-list-mask hidden"&gt;',
@@ -80,112 +87,95 @@ wok.widget.List.prototype = (function() {
         return (result);
     };

-
-    var fillButton = function(btnContainer){
-        var addOrGenerateBtn = this.opts.toolbarButtons[0];
-        var singleBtnHTML = [
-                '&lt;a class="btn btn-primary" href="#"', (addOrGenerateBtn.id ? (' id="' + addOrGenerateBtn.id + '"') : ''),' role="button"&gt;',
-                    addOrGenerateBtn.class ? ('&lt;i class="' + addOrGenerateBtn.class) + '"&gt;&lt;/i&gt; ' : '',
-                    addOrGenerateBtn.label,
-                '&lt;/a&gt;'
-            ].join('');
-            var singleBtn = $(singleBtnHTML).appendTo(btnContainer);
-            $(singleBtn).click(function(e) {
-              e.preventDefault();
-            });
-            addOrGenerateBtn.onClick &amp;&amp; singleBtn.on('click', addOrGenerateBtn.onClick);
+    var fillButtons = function(btnContainer){
+        var toolbarButtons = this.opts.toolbarButtons;
+        $.each(toolbarButtons, function(i, button) {
+                var btnHTML = [
+                    '&lt;li class="',
+                    (button.critical === true ? 'critical' : ''),
+                    ,'"&gt;',
+                        '&lt;btn data-dismiss="modal"',
+                        (button.id ? (' id="' + button.id + '"') : ''),
+                        ' class="btn btn-primary"',
+                        (button.disabled === true ? ' disabled="disabled"' : ''),
+                        '"&gt;',
+                            button.class ? ('&lt;i class="' + button.class) + '"&gt;&lt;/i&gt; ' : ' ',
+                            button.label,
+                        '&lt;/btn&gt;',
+                    '&lt;/li&gt;'
+                ].join('');
+                var btnNode = $(btnHTML).appendTo(btnContainer);
+                button.onClick &amp;&amp; btnNode.on('click', button.onClick);
+        });
     };

     var fillBody = function(container, fields) {
-
-        var toolbarButtons = this.opts.toolbarButtons;
-        var actionDropdownHtml;
         var data = this.data;
-        var tbody = ($('tbody', container).length &amp;&amp; $('tbody', container)) || $('&lt;tbody&gt;&lt;/tbody&gt;').appendTo(container);
+        var tbody = ($('ul', container).length &amp;&amp; $('ul', container)) || $('&lt;ul&gt;&lt;/ul&gt;').appendTo(container);
         tbody.empty();
         if (typeof data !== 'undefined' &amp;&amp; data.length &gt; 0) {
             $.each(data, function(i, row) {
-                var rowNode = $('&lt;tr&gt;&lt;/tr&gt;').appendTo(tbody);
+                var rowNode = $('&lt;li&gt;&lt;/li&gt;').appendTo(tbody);
                 var columnNodeHTML;
                 var columnData = '';
                 var state = '';
                 var styleClass = '';
-                if (toolbarButtons) {
-                    actionDropdownHtml = [
-                        '&lt;td&gt;',
-                            '&lt;div class="dropdown menu-flat"&gt;',
-                                '&lt;button id="wok-dropdown-button-', i, '" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"&gt;',
-                                    '&lt;span class="edit-alt"&gt;&lt;/span&gt;Actions&lt;span class="caret"&gt;&lt;/span&gt;',
-                                '&lt;/button&gt;',
-                                '&lt;ul class="dropdown-menu" role="menu" aria-labelledby="action-dropdown-menu-', i, '"&gt;',
-                                '&lt;/ul&gt;',
-                            '&lt;/div&gt;',
-                        '&lt;/td&gt;'
-                    ].join('');
-                }
+                var checkboxName = $('ul', container).parent().parent().parent().attr('id') + '-check' || $(container).parent().parent().parent().attr('id') + '-check';
                 $.each(fields, function(fi, field) {
                     var value = getValue(field.name, row);
                     if (field.type === 'status' &amp;&amp; field.name === 'enabled') {
                         styleClass = (value === true ? '' : ' disabled');
                         state = [
-                            '&lt;span class="wok-repository-status ',
+                            '&lt;span class="wok-list-item-status ',
                             value === true ? 'enabled' : 'disabled',
-                            '"&gt;&lt;i class="fa fa-power-off"&gt;&lt;/i&gt;&lt;/span&gt;'
+                            '"&gt;&lt;i class="fa fa-power-off"&gt;&lt;/i&gt;&lt;span class="sr-only"&gt;',
+                            value === true ? 'Enabled' : 'Disabled',
+                            '&lt;/span&gt;&lt;/span&gt;'
                         ].join('');
                     }
-                    columnData += (field.type === 'name') ? ('&lt;span class="wok-list-name"&gt;' + value.toString() + '&lt;/span&gt;') : (field.type !== 'status' ? '&lt;span class="wok-list-loading-icon-inline"&gt;&lt;/span&gt;&lt;span class="wok-list-description"&gt;' + value.toString() + '&lt;/span&gt;' : '');
-
-                });
-                columnNodeHTML = [
-                    '&lt;td&gt;',
-                        '&lt;div class="wok-list-cell', styleClass, '"&gt;', state,
-                            columnData,
-                        '&lt;/div&gt;',
-                    '&lt;/td&gt;'
-                ].join('');
-                $(columnNodeHTML).appendTo(rowNode);
-
-                var actionMenuNode = $(actionDropdownHtml).appendTo(rowNode);
-
-                $.each(toolbarButtons, function(i, button) {
-                    var btnHTML = [
-                        '&lt;li role="presentation"', button.critical === true ? ' class="critical"' : '', '&gt;',
-                        '&lt;a role="menuitem" tabindex="-1" data-dismiss="modal"', (button.id ? (' id="' + button.id + '"') : ''), (button.disabled === true ? ' class="disabled"' : ''),
-                        '&gt;',
-                        button.class ? ('&lt;i class="' + button.class) + '"&gt;&lt;/i&gt;' : '',
-                        button.label,
-                        '&lt;/a&gt;&lt;/li&gt;'
+                    columnData += (field.type === 'name') ? ('&lt;span role="status" class="wok-list-loading-icon-inline"&gt;&lt;/span&gt;&lt;span class="wok-list-name '+field.cssClass+'" title="'+field.label+'"&gt;'+value.toString()+'&lt;/span&gt;') : (field.type !== 'status' ? '&lt;span class="wok-list-description '+field.cssClass+'" title="'+field.label+'"&gt;' + value.toString() + '&lt;/span&gt;' : '');
+                    columnNodeHTML = [
+                        '&lt;input class="wok-checkbox" type="checkbox" name="'+checkboxName+'" id="wok-list-',i+1,'-check" /&gt;',
+                            '&lt;label for="wok-list-',i+1,'-check" class="wok-list-cell', styleClass, '"&gt;',
+                                state,
+                                columnData,
+                            '&lt;/div&gt;',
+                        '&lt;/label&gt;'
                     ].join('');
-                    var btnNode = $(btnHTML).appendTo($('.dropdown-menu', rowNode));
-                    button.onClick &amp;&amp; btnNode.on('click', button.onClick);
                 });
+                $(columnNodeHTML).appendTo(rowNode);
             });
         }
     };

-    var stylingRow = function(row, className, add) {
-        var index = $(row).index() + 1;
-        $('tr', this.bodyContainer)
-            .removeClass(className);
-        if (add === false) {
-            return;
-        }
-        $('tr:nth-child(' + index + ')', this.bodyContainer)
-            .addClass(className);
+    var stylingRow = function(grid, className) {
+        $('li',grid.bodyContainer).removeClass(className);
+        $.each(grid.selectedIndex, function(){
+            var nth = this + 1;
+            $('li:nth-child('+nth+')',grid.bodyContainer).addClass(className);
+        });
     };

     var setBodyListeners = function() {
-        if (this['opts']['rowSelection'] != 'disabled') {
-
-            $('tr', this.bodyContainer).on('click', {
+        if (this['opts']['rowSelection'] !== 'disabled') {
+            $('li:not(.generating) input[type="checkbox"]', this.bodyContainer).on('change', {
                 grid: this
-            }, function(event) {
+            },function(event) {
                 var grid = event.data.grid;
-                if (!$(this).hasClass('generating')) {
-                    grid.selectedIndex = $(this).index();
-                    stylingRow.call(grid, this, 'selected');
-                    grid['opts']['onRowSelected'] &amp;&amp; grid['opts']['onRowSelected']();
+                grid.selectedIndex = [];
+                $("li :checkbox:checked", this.bodyContainer).map(function() {
+                    return $(this).parent().index();
+                }).each(function() {
+                    grid.selectedIndex.push(this);
+                });
+                if ($('.mobile-action-count',grid.buttonActionContainer).length) {
+                    $('.mobile-action-count',grid.buttonActionContainer).remove();
                 }
+                if(grid.selectedIndex.length){
+                    $(grid.buttonActionContainer).append('&lt;span class="mobile-action-count"&gt; ( &lt;strong&gt;'+grid.selectedIndex.length+' item(s)&lt;/strong&gt; selected )&lt;/span&gt;');
+                }
+                stylingRow.call(grid, grid, 'selected');
+                grid['opts']['onRowSelected'] &amp;&amp; grid['opts']['onRowSelected']();
             });
         }
     };
@@ -197,7 +187,13 @@ wok.widget.List.prototype = (function() {
     };

     var getSelected = function() {
-        return this.selectedIndex &gt;= 0 ? this.data[this.selectedIndex] : null;
+        var selectedItems = [];
+        for (var i = 0; i &lt; this.selectedIndex.length; i++ ){
+            var value = this.selectedIndex[i];
+            selectedItems.push(this.data[value]);
+        }
+        // return this.selectedIndex &gt;= 0 ? this.data[this.selectedIndex] : null;
+        return selectedItems;
     };

     var showMessage = function(msg) {
@@ -255,11 +251,17 @@ wok.widget.List.prototype = (function() {
             titleNode = $('&lt;h3 class="panel-title"&gt;' + title + '&lt;/h3&gt;').appendTo(titleContainer);
         }

-        var bodyContainer = $('.wok-list-table.table.table-striped', domNode);
+        var bodyContainer = $('.wok-list', domNode);
         this.bodyContainer = bodyContainer;

-        var singleButtonContainer = $('.wok-single-button', domNode);
-        this.singleButtonContainer = singleButtonContainer;
+        var selectButtonContainer = $('.wok-list-action-button-container', domNode);
+        this.selectButtonContainer = selectButtonContainer;
+
+        var buttonActionGroupContainer = $('.wok-list-action-button-container .dropdown-menu', domNode);
+        this.buttonActionGroupContainer = buttonActionGroupContainer;
+
+        var buttonActionContainer = $('.mobile-action .dropdown-toggle.btn', domNode);
+        this.buttonActionContainer = buttonActionContainer;

         var gridBody = $('.wok-list-content', domNode);
         this.gridBody = gridBody;
@@ -270,8 +272,7 @@ wok.widget.List.prototype = (function() {
         var messageNode = $('.wok-list-message', domNode);
         this.messageNode = messageNode;

-
-        fillButton.call(this,this.singleButtonContainer);
+        fillButtons.call(this,this.buttonActionGroupContainer);

         $('.retry-button', domNode).on('click', {
             grid: this
@@ -279,7 +280,6 @@ wok.widget.List.prototype = (function() {
             event.data.grid.reload();
         });

-
     };

     return {
@@ -299,4 +299,4 @@ wok.widget.List.prototype = (function() {
         reload: reload,
         showMessage: showMessage
     };
-})();
+})();
\ No newline at end of file
</pre>
    </blockquote>
    <br>
  </body>
</html>