jqh пре 5 година
родитељ
комит
99507a4094

+ 5 - 0
resources/assets/dcat/js/dcat-app.js

@@ -52,6 +52,11 @@ function extend (Dcat) {
     Dcat.DialogForm = function (options) {
         return new DialogForm(Dcat, options);
     };
+
+    // 滑动窗
+    Dcat.Slider = function (options) {
+
+    };
 }
 
 // 初始化

+ 7 - 0
resources/assets/dcat/js/extensions/Slider.js

@@ -0,0 +1,7 @@
+
+export default class Slider {
+    constructor(options) {
+
+    }
+
+}

+ 1 - 1
resources/assets/dcat/sass/_variables.scss

@@ -60,7 +60,7 @@ $shadow-200: 0 3px 1px -2px rgba(0,0,0,.1), 0 2px 2px 0 rgba(0,0,0,.1), 0 1px 5p
 $btn-shadow: $shadow-100;
 $btn-shadow-hover: $shadow-200;
 
-$btn-group-btn-shadow: 0 2px 1px 0 rgba(0,0,0,.08);
+$btn-group-btn-shadow: 0 2px 0 0 rgba(0,0,0,.08);
 
 
 // body背景颜色

+ 6 - 0
resources/assets/dcat/sass/components/_button.scss

@@ -52,6 +52,12 @@
   color: $custom;
 }
 
+.btn.btn-white {
+  color: $font-color;
+}
+.btn.btn-white.btn-primary, .btn.btn-white.btn-primary:hover, .btn.btn-white.btn-primary:focus {
+  color: $white !important;
+}
 .btn-white:hover {
   box-shadow: $btn-shadow-hover !important;
 }

+ 3 - 0
resources/assets/dcat/sass/components/_dropdown.scss

@@ -16,4 +16,7 @@
 .dropdown .dropdown-menu .dropdown-item:hover {
   background-color: $dark30;
   color: #333;
+}
+.dropdown i {
+  margin-right: 0;
 }

+ 12 - 1
resources/assets/dcat/sass/components/_table.scss

@@ -56,4 +56,15 @@ table.data-list-view.dataTable tbody tr:hover, table.data-thumb-view.dataTable t
   margin-left:-1.45rem;
   position: relative;
   color: $white;
-}
+}
+
+// 解决 rwd-table 下拉选框显示bug
+.table-responsive {
+  border: 0!important;
+  margin-bottom: 0!important;
+}
+.data-list-view-header .table-responsive {
+  overflow: visible!important;
+  padding-bottom: 0!important;
+}
+// 解决 rwd-table 下拉选框显示bug

+ 21 - 0
resources/assets/plugins/RWD-Table-Patterns/.jshintrc

@@ -0,0 +1,21 @@
+{
+    "nonbsp": true,
+    "trailing": true,
+    "indent": 4,
+    "quotmark": "single",
+    "eqeqeq": true,
+    "curly": true,
+    "forin": true,
+    "latedef": true,
+    "immed": true,
+    "newcap": true,
+    "noempty": true,
+    "nonew": true,
+    "undef": true,
+    "unused": true,
+    "strict": true,
+    "browser": true,
+    "globals": {
+        "jQuery": false
+    }
+}

+ 344 - 0
resources/assets/plugins/RWD-Table-Patterns/dist/css/rwd-table.css

@@ -0,0 +1,344 @@
+/*!
+ * Responsive Tables v5.3.2 (http://gergeo.se/RWD-Table-Patterns)
+ * This is an awesome solution for responsive tables with complex data.
+ * Authors: Nadan Gergeo <nadan@blimp.se> (www.blimp.se), Lucas Wiener <lucas@blimp.se> & "Maggie Wachs (www.filamentgroup.com)"
+ * Licensed under MIT (https://github.com/nadangergeo/RWD-Table-Patterns/blob/master/LICENSE-MIT)
+ */
+.dropdown-menu > li.checkbox-row {
+  padding: 5px 20px;
+}
+.dropdown-menu li.checkbox-row {
+  display: block;
+  clear: both;
+  font-weight: normal;
+  line-height: 20px;
+  color: #333333;
+  white-space: nowrap;
+}
+.dropdown-menu li.checkbox-row label {
+  font-weight: normal;
+}
+.dropdown-menu li.checkbox-row:hover,
+.dropdown-menu li.checkbox-row input:hover,
+.dropdown-menu li.checkbox-row label:hover {
+  cursor: pointer;
+}
+.no-touch .dropdown-menu > .checkbox-row:hover,
+.no-touch .dropdown-menu > .checkbox-row:active {
+  text-decoration: none;
+  color: #262626;
+  background-color: #f5f5f5;
+}
+.lt-ie8 .btn-toolbar {
+  display: none;
+}
+.table-responsive {
+  border-radius: 3px;
+  border: 1px solid #dddddd;
+  margin-bottom: 20px;
+}
+.table-responsive > .table {
+  margin-bottom: 0;
+}
+.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-left: 0;
+}
+.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-right: 0;
+}
+.table-responsive > .table-bordered > tbody > tr:last-child > th,
+.table-responsive > .table-bordered > tfoot > tr:last-child > th,
+.table-responsive > .table-bordered > tbody > tr:last-child > td,
+.table-responsive > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}
+.table-responsive[data-pattern="priority-columns"] {
+  width: 100%;
+  margin-bottom: 20px;
+  overflow-y: hidden;
+  overflow-x: auto;
+  -ms-overflow-style: -ms-autohiding-scrollbar;
+  border-radius: 3px;
+  border: 1px solid #dddddd;
+  -webkit-overflow-scrolling: touch;
+}
+.table-responsive[data-pattern="priority-columns"] > .table {
+  margin-bottom: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table > thead > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > tbody > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > tfoot > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > thead > tr > td,
+.table-responsive[data-pattern="priority-columns"] > .table > tbody > tr > td,
+.table-responsive[data-pattern="priority-columns"] > .table > tfoot > tr > td {
+  white-space: nowrap;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered {
+  border: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > td:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > td:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > td:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > td:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr:last-child > th,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr:last-child > th,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr:last-child > td,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}
+.table-responsive.absolute-solution {
+  position: relative;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="-1"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="-1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="-1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="-1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="0"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="0"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="0"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="0"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="2"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="3"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="4"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="5"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+  display: none;
+}
+.lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="1"],
+.lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="1"],
+.lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"] {
+  display: inline;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"] {
+  display: table-cell;
+}
+@media screen and (min-width: 480px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="2"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="2"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 640px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="3"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="3"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 800px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="4"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="4"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 960px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="5"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="5"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 1120px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+    display: table-cell;
+  }
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th.cell-hide,
+.mq.js.lt-ie10 .sticky-table-header th.cell-hide,
+.mq.js .table-responsive[data-pattern="priority-columns"] td.cell-hide,
+.mq.js.lt-ie10 .sticky-table-header td.cell-hide {
+  display: none;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th.cell-show,
+.mq.js.lt-ie10 .sticky-table-header th.cell-show,
+.mq.js .table-responsive[data-pattern="priority-columns"] td.cell-show,
+.mq.js.lt-ie10 .sticky-table-header td.cell-show {
+  display: table-cell;
+}
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"] th.cell-show,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header th.cell-show,
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"] td.cell-show,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header td.cell-show {
+  display: inline;
+}
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"].display-all th,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header.display-all th,
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"].display-all td,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header.display-all td {
+  display: inline !important;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] table.display-all th,
+.mq.js.lt-ie10 .sticky-table-header table.display-all th,
+.mq.js .table-responsive[data-pattern="priority-columns"] table.display-all td,
+.mq.js.lt-ie10 .sticky-table-header table.display-all td {
+  display: table-cell !important;
+}
+table.table-small-font {
+  font-size: 12px;
+  -webkit-text-size-adjust: none;
+  line-height: 1.5em;
+}
+table.focus-on tbody tr:hover,
+table.focus-on tfoot tr:hover {
+  cursor: pointer;
+}
+table.focus-on tbody tr.unfocused th,
+table.focus-on tfoot tr.unfocused th,
+table.focus-on tbody tr.unfocused td,
+table.focus-on tfoot tr.unfocused td {
+  color: #777777;
+  color: rgba(0, 0, 0, 0.4);
+}
+table.focus-on tbody tr.focused th,
+table.focus-on tfoot tr.focused th,
+table.focus-on tbody tr.focused td,
+table.focus-on tfoot tr.focused td {
+  background-color: rgba(91,192,222,0.26);
+  color: #000;
+}
+.sticky-table-header {
+  background-color: #fff;
+  border: none;
+  border-radius: 0;
+  border-top: 1px solid #dddddd;
+  border-bottom: 1px solid #dddddd;
+  visibility: hidden;
+  z-index: 990;
+  overflow: hidden;
+}
+.fixed-solution .sticky-table-header {
+  position: fixed;
+  min-width: 0;
+}
+.absolute-solution .sticky-table-header {
+  position: absolute;
+  min-width: 100%;
+  top: 0;
+}
+.sticky-table-header.border-radius-fix {
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.sticky-table-header > .table {
+  margin-bottom: 0;
+}
+.sticky-table-header > .table > thead > tr > th,
+.sticky-table-header > .table > tbody > tr > th,
+.sticky-table-header > .table > tfoot > tr > th,
+.sticky-table-header > .table > thead > tr > td,
+.sticky-table-header > .table > tbody > tr > td,
+.sticky-table-header > .table > tfoot > tr > td {
+  white-space: nowrap;
+}
+.sticky-table-header > .table-bordered {
+  border: 0;
+}
+.sticky-table-header > .table-bordered > thead > tr > th:first-child,
+.sticky-table-header > .table-bordered > tbody > tr > th:first-child,
+.sticky-table-header > .table-bordered > tfoot > tr > th:first-child,
+.sticky-table-header > .table-bordered > thead > tr > td:first-child,
+.sticky-table-header > .table-bordered > tbody > tr > td:first-child,
+.sticky-table-header > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.sticky-table-header > .table-bordered > thead > tr > th:last-child,
+.sticky-table-header > .table-bordered > tbody > tr > th:last-child,
+.sticky-table-header > .table-bordered > tfoot > tr > th:last-child,
+.sticky-table-header > .table-bordered > thead > tr > td:last-child,
+.sticky-table-header > .table-bordered > tbody > tr > td:last-child,
+.sticky-table-header > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.sticky-table-header > .table-bordered > tbody > tr:last-child > th,
+.sticky-table-header > .table-bordered > tfoot > tr:last-child > th,
+.sticky-table-header > .table-bordered > tbody > tr:last-child > td,
+.sticky-table-header > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}

Разлика између датотеке није приказан због своје велике величине
+ 6 - 0
resources/assets/plugins/RWD-Table-Patterns/dist/css/rwd-table.min.css


+ 801 - 0
resources/assets/plugins/RWD-Table-Patterns/dist/js/rwd-table.js

@@ -0,0 +1,801 @@
+/*!
+ * Responsive Tables v5.3.2 (http://gergeo.se/RWD-Table-Patterns)
+ * This is an awesome solution for responsive tables with complex data.
+ * Authors: Nadan Gergeo <nadan@blimp.se> (www.blimp.se), Lucas Wiener <lucas@blimp.se> & "Maggie Wachs (www.filamentgroup.com)"
+ * Licensed under MIT (https://github.com/nadangergeo/RWD-Table-Patterns/blob/master/LICENSE-MIT)
+ */
+(function ($) {
+    'use strict';
+
+    // RESPONSIVE TABLE CLASS DEFINITION
+    // ==========================
+
+    var ResponsiveTable = function(element, options) {
+        // console.time('init');
+
+        var that = this;
+
+        this.options = options;
+        this.$tableWrapper = null; //defined later in wrapTable
+        this.$tableScrollWrapper = $(element); //defined later in wrapTable
+        this.$table = $(element).find('table').first();
+
+        if(this.$table.length !== 1) {
+            throw new Error('Exactly one table is expected in a .table-responsive div.');
+        }
+
+        //apply pattern option as data-attribute, in case it was set via js
+        this.$tableScrollWrapper.attr('data-pattern', this.options.pattern);
+
+        //if the table doesn't have a unique id, give it one.
+        //The id will be a random hexadecimal value, prefixed with id.
+        //Used for triggers with displayAll button.
+        this.id = this.$table.prop('id') || this.$tableScrollWrapper.prop('id') || 'id' + Math.random().toString(16).slice(2);
+
+        this.$tableClone = null; //defined farther down
+        this.$stickyTableHeader = null; //defined farther down
+
+        //good to have - for easy access
+        this.$thead = this.$table.find('thead').first();
+        this.$hdrCells = this.$thead.find("tr").first().find('th');
+        this.$bodyRows = this.$table.find('tbody, tfoot').find('tr');
+
+        //toolbar and buttons
+        this.$btnToolbar = null; //defined farther down
+        this.$dropdownGroup = null; //defined farther down
+        this.$dropdownBtn = null; //defined farther down
+        this.$dropdownContainer = null; //defined farther down
+
+        this.$displayAllBtn = null; //defined farther down
+
+        this.$focusGroup = null; //defined farther down
+        this.$focusBtn = null; //defined farther down
+
+        //misc
+        this.displayAllTrigger = 'display-all-' + this.id + '.responsive-table';
+        this.idPrefix = this.id + '-col-';
+
+        this.headerColIndices = {};
+        this.headerRowIndices = {};
+
+        // Setup table
+        // -------------------------
+
+        //wrap table
+        this.wrapTable();
+
+        //create toolbar with buttons
+        this.createButtonToolbar();
+
+        //Build header indices mapping (for colspans in header)
+        this.buildHeaderCellIndices();
+
+        // Setup cells
+        // -------------------------
+
+        //setup header
+        this.setupTableHeader();
+
+        //setup standard cells
+        this.setupBodyRows();
+
+        //create sticky table head
+        if(this.options.stickyTableHeader){
+            this.createStickyTableHeader();
+        }
+
+        // hide toggle button if the list is empty
+        if(this.$dropdownContainer.is(':empty')){
+            this.$dropdownGroup.hide();
+        }
+
+        // Event binding
+        // -------------------------
+
+        // on orientchange, resize and displayAllBtn-click
+        $(window).bind('orientationchange resize ' + this.displayAllTrigger, function(){
+
+            //update the inputs' checked status
+            that.$dropdownContainer.find('input').trigger('updateCheck');
+
+            //update colspan and visibility of spanning cells
+            $.proxy(that.updateSpanningCells(), that);
+
+        }).trigger('resize');
+
+        // console.timeEnd('init');
+    };
+
+    ResponsiveTable.DEFAULTS = {
+        pattern: 'priority-columns',
+        stickyTableHeader: true,
+        fixedNavbar: '.navbar-fixed-top',  // Is there a fixed navbar? The stickyTableHeader needs to know about it!
+        addDisplayAllBtn: true, // should it have a display-all button?
+        addFocusBtn: true,  // should it have a focus button?
+        focusBtnIcon: 'glyphicon glyphicon-screenshot',
+        mainContainer: window,
+        i18n: {
+            focus     : 'Focus',
+            display   : 'Display',
+            displayAll: 'Display all'
+        }
+    };
+
+    // Wrap table
+    ResponsiveTable.prototype.wrapTable = function() {
+        this.$tableScrollWrapper.wrap('<div class="table-wrapper"/>');
+        this.$tableWrapper = this.$tableScrollWrapper.parent();
+    };
+
+    // Create toolbar with buttons
+    ResponsiveTable.prototype.createButtonToolbar = function() {
+        var that = this;
+
+        this.$btnToolbar = $('[data-responsive-table-toolbar="' + this.id + '"]');
+        if(this.$btnToolbar.length === 0) {
+            this.$btnToolbar = $('<div class="btn-toolbar" />');
+        }
+
+        this.$dropdownGroup = $('<div class="btn-group dropdown-btn-group dropdown" />');
+        this.$dropdownBtn = $('<button type="button" class="btn btn-white " data-toggle="dropdown">' + this.options.i18n.display + '</button>');
+        this.$dropdownContainer = $('<ul class="dropdown-menu"/>');
+
+        // Focus btn
+        if(this.options.addFocusBtn) {
+            // Create focus btn group
+            this.$focusGroup = $('<div class="btn-group focus-btn-group" />');
+
+            // Create focus btn
+            this.$focusBtn = $('<button type="button" class="btn  btn-white">' + this.options.i18n.focus + '</button>');
+
+            if(this.options.focusBtnIcon) {
+                this.$focusBtn.prepend('<span class="' + this.options.focusBtnIcon + '"></span> ');
+            }
+
+            // Add btn to group
+            this.$focusGroup.append(this.$focusBtn);
+            // Add focus btn to toolbar
+            this.$btnToolbar.append(this.$focusGroup);
+
+            // bind click on focus btn
+            this.$focusBtn.click(function(){
+                $.proxy(that.activateFocus(), that);
+            });
+
+            // bind click on rows
+            this.$bodyRows.click(function(){
+                $.proxy(that.focusOnRow($(this)), that);
+            });
+        }
+
+        // Display-all btn
+        if(this.options.addDisplayAllBtn) {
+            // Create display-all btn
+            this.$displayAllBtn = $('<button type="button" class="btn  btn-white">' + this.options.i18n.displayAll + '</button>');
+            // Add display-all btn to dropdown-btn-group
+            this.$dropdownGroup.append(this.$displayAllBtn);
+
+            if (this.$table.hasClass('display-all')) {
+                // add 'btn-primary' class to btn to indicate that display all is activated
+                this.$displayAllBtn.addClass('btn-primary');
+            }
+
+            // bind click on display-all btn
+            this.$displayAllBtn.click(function(){
+                $.proxy(that.displayAll(null, true), that);
+            });
+        }
+
+        //add dropdown btn and menu to dropdown-btn-group
+        this.$dropdownGroup.append('<span></span>');
+        this.$dropdownGroup.find('span').append(this.$dropdownBtn).append(this.$dropdownContainer);
+
+        //add dropdown group to toolbar
+        this.$btnToolbar.append(this.$dropdownGroup);
+
+        // add toolbar above table
+        // this.$tableScrollWrapper.before(this.$btnToolbar);
+    };
+
+    ResponsiveTable.prototype.clearAllFocus = function() {
+        this.$bodyRows.removeClass('unfocused');
+        this.$bodyRows.removeClass('focused');
+    };
+
+    ResponsiveTable.prototype.activateFocus = function() {
+        // clear all
+        this.clearAllFocus();
+
+        if(this.$focusBtn){
+            this.$focusBtn.toggleClass('btn-primary');
+        }
+
+        this.$table.toggleClass('focus-on');
+    };
+
+    ResponsiveTable.prototype.focusOnRow = function(row) {
+        // only if activated (.i.e the table has the class focus-on)
+        if(this.$table.hasClass('focus-on')) {
+            var alreadyFocused = $(row).hasClass('focused');
+
+            // clear all
+            this.clearAllFocus();
+
+            if(!alreadyFocused) {
+                this.$bodyRows.addClass('unfocused');
+                $(row).addClass('focused');
+            }
+        }
+    };
+
+    /**
+     * @param activate Forces the displayAll to be active or not. If anything else than bool, it will not force the state so it will toggle as normal.
+     * @param trigger Bool to indicate if the displayAllTrigger should be triggered.
+     */
+    ResponsiveTable.prototype.displayAll = function(activate, trigger) {
+        if(this.$displayAllBtn){
+            // add 'btn-primary' class to btn to indicate that display all is activated
+            this.$displayAllBtn.toggleClass('btn-primary', activate);
+        }
+
+        this.$table.toggleClass('display-all', activate);
+        if(this.$tableClone){
+            this.$tableClone.toggleClass('display-all', activate);
+        }
+
+        if(trigger) {
+            $(window).trigger(this.displayAllTrigger);
+        }
+    };
+
+    ResponsiveTable.prototype.preserveDisplayAll = function() {
+        var displayProp = 'table-cell';
+        if($('html').hasClass('lt-ie9')){
+            displayProp = 'inline';
+        }
+
+        $(this.$table).find('th, td').css('display', displayProp);
+        if(this.$tableClone){
+            $(this.$tableClone).find('th, td').css('display', displayProp);
+        }
+    };
+
+    ResponsiveTable.prototype.createStickyTableHeader = function() {
+        var that = this;
+
+        //clone table head
+        that.$tableClone = that.$table.clone();
+
+        //replace ids
+        that.$tableClone.prop('id', this.id + '-clone');
+        that.$tableClone.find('[id]').each(function() {
+            $(this).prop('id', $(this).prop('id') + '-clone');
+        });
+
+        // wrap table clone (this is our "sticky table header" now)
+        that.$tableClone.wrap('<div class="sticky-table-header"/>');
+        that.$stickyTableHeader = that.$tableClone.parent();
+
+        // give the sticky table header same height as original
+        that.$stickyTableHeader.css('height', that.$thead.height() + 2);
+
+        //insert sticky table header
+        that.$table.before(that.$stickyTableHeader);
+
+        // bind scroll on mainContainer with updateStickyTableHeader
+        $(this.options.mainContainer).bind('scroll', function(){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        // bind resize on window with updateStickyTableHeader
+        $(window).bind('resize', function(e){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        $(that.$tableScrollWrapper).bind('scroll', function(){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        // determine what solution to use for rendereing  sticky table head (aboslute/fixed).
+        that.useFixedSolution  = !isIOS() || (getIOSVersion() >= 8);
+        //add class for rendering solution
+        if(that.useFixedSolution) {
+            that.$tableScrollWrapper.addClass('fixed-solution');
+        } else {
+            that.$tableScrollWrapper.addClass('absolute-solution');
+        }
+    };
+
+    // Help function for sticky table header
+    ResponsiveTable.prototype.updateStickyTableHeader = function() {
+        var that              = this,
+            top               = 0,
+            offsetTop         = that.$table.offset().top,
+            scrollTop         = $(this.options.mainContainer).scrollTop() -1, //-1 to accomodate for top border
+            maxTop            = that.$table.height() - that.$stickyTableHeader.height(),
+            rubberBandOffset  = (scrollTop + $(this.options.mainContainer).height()) - $(document).height(),
+            navbarHeight      = 0;
+
+        //Is there a fixed navbar?
+        if($(that.options.fixedNavbar).length) {
+            var $navbar = $(that.options.fixedNavbar).first();
+            navbarHeight = $navbar.height();
+            scrollTop = scrollTop + navbarHeight;
+        }
+
+        var shouldBeVisible;
+
+        if(this.options.mainContainer === window) {
+            shouldBeVisible   = (scrollTop > offsetTop) && (scrollTop < offsetTop + that.$table.height());
+        } else {
+            shouldBeVisible   = (offsetTop <= 0) && (-offsetTop < that.$table.height());
+        }
+
+        // console.log('offsetTop:' + offsetTop);
+        // console.log('scrollTop:' + scrollTop);
+        // console.log('tableHeight:' + that.$table.height());
+        // console.log('shouldBeVisible:' + shouldBeVisible);
+
+        if(that.useFixedSolution) { //fixed solution
+            that.$stickyTableHeader.scrollLeft(that.$tableScrollWrapper.scrollLeft());
+
+            // Calculate top property value (-1 to accomodate for top border)
+            top = navbarHeight - 1;
+
+            // When the user is about to scroll past the table, move sticky table head up
+            if(this.options.mainContainer === window && ((scrollTop - offsetTop) > maxTop)){
+
+                top -= ((scrollTop - offsetTop) - maxTop);
+                that.$stickyTableHeader.addClass('border-radius-fix');
+
+            } else if(this.options.mainContainer !== window && ((- offsetTop) > maxTop)){
+
+                top -= ((- offsetTop) - maxTop);
+                that.$stickyTableHeader.addClass('border-radius-fix');
+
+            } else {
+
+                that.$stickyTableHeader.removeClass('border-radius-fix');
+
+            }
+
+            if (shouldBeVisible) {
+                //show sticky table header and update top and width.
+                that.$stickyTableHeader.css({ 'visibility': 'visible', 'top': top + 'px', 'width': that.$tableScrollWrapper.innerWidth() + 'px'});
+
+                //no more stuff to do - return!
+                return;
+            } else {
+                //hide sticky table header and reset width
+                that.$stickyTableHeader.css({'visibility': 'hidden', 'width': 'auto' });
+            }
+
+        } else { // alternate method
+            //animation duration
+            var animationDuration = 400;
+
+            // Calculate top property value (-1 to accomodate for top border)
+            if(this.options.mainContainer === window) {
+                top = scrollTop - offsetTop - 1;
+            } else {
+                top = -offsetTop - 1;
+                // console.log('top:' + top);
+            }
+
+            // Make sure the sticky table header doesn't slide up/down too far.
+            if(top < 0) {
+                top = 0;
+            } else if (top > maxTop) {
+                top = maxTop;
+            }
+
+            // Accomandate for rubber band effect
+            if(this.options.mainContainer === window) {
+                if(rubberBandOffset > 0) {
+                    top = top - rubberBandOffset;
+                }
+            }
+
+            if (shouldBeVisible) {
+                //show sticky table header (animate repositioning)
+                that.$stickyTableHeader.css({ 'visibility': 'visible' });
+                that.$stickyTableHeader.animate({ 'top': top + 'px' }, animationDuration);
+
+                // hide original table head
+                that.$thead.css({ 'visibility': 'hidden' });
+
+            } else {
+
+                that.$stickyTableHeader.animate({ 'top': '0' }, animationDuration, function(){
+                    // show original table head
+                    that.$thead.css({ 'visibility': 'visible' });
+
+                    // hide sticky table head
+                    that.$stickyTableHeader.css({ 'visibility': 'hidden' });
+                });
+            }
+        }
+    };
+
+    // Setup header cells
+    ResponsiveTable.prototype.setupTableHeader = function() {
+        var that = this;
+
+        // for each header column
+        that.$hdrCells.each(function(i){
+            var $th = $(this),
+                id = $th.prop('id'),
+                thText = $th.text();
+
+            // assign an id to each header, if none is in the markup
+            if (!id) {
+                id = that.idPrefix + i;
+                $th.prop('id', id);
+            }
+
+            if(thText === ''){
+                thText = $th.attr('data-col-name');
+            }
+
+            // create the hide/show toggle for the current column
+            if ( $th.is('[data-priority]') && $th.data('priority') !== -1 ) {
+                var $toggle = $('<li class="checkbox-row"><input type="checkbox" name="toggle-'+id+'" id="toggle-'+id+'" value="'+id+'" /> <label for="toggle-'+id+'">'+ thText +'</label></li>');
+                var $checkbox = $toggle.find('input');
+
+                that.$dropdownContainer.append($toggle);
+
+                $toggle.click(function(){
+                    // console.log("cliiiick!");
+                    $checkbox.prop('checked', !$checkbox.prop('checked'));
+                    $checkbox.trigger('change');
+                });
+
+                //Freakin' IE fix
+                if ($('html').hasClass('lt-ie9')) {
+                    $checkbox.click(function() {
+                        $(this).trigger('change');
+                    });
+                }
+
+                $toggle.find('label').click(function(event){
+                    event.stopPropagation();
+                });
+
+                $toggle.find('input')
+                    .click(function(event){
+                        event.stopPropagation();
+                    })
+                    .change(function(){ // bind change event on checkbox
+                        var $checkbox = $(this),
+                            val = $checkbox.val(),
+                            //all cells under the column, including the header and its clone
+                            $cells = that.$tableWrapper.find('#' + val + ', #' + val + '-clone, [data-columns~='+ val +']');
+
+                        //if display-all is on - save state and carry on
+                        if(that.$table.hasClass('display-all')){
+                            //save state
+                            $.proxy(that.preserveDisplayAll(), that);
+                            //remove display all class
+                            that.$table.removeClass('display-all');
+                            if(that.$tableClone){
+                                that.$tableClone.removeClass('display-all');
+                            }
+                            //switch off button
+                            that.$displayAllBtn.removeClass('btn-primary');
+                        }
+
+                        // loop through the cells
+                        $cells.each(function(){
+                            var $cell = $(this);
+
+                            // is the checkbox checked now?
+                            if ($checkbox.is(':checked')) {
+
+                                // if the cell was already visible, it means its original colspan was >1
+                                // so let's increment the colspan
+                                // This should not be done for th's in thead.
+                                if(!$cell.closest("thead").length && $cell.css('display') !== 'none'){
+                                    // make sure new colspan value does not exceed original colspan value
+                                    var newColSpan = Math.min(parseInt($cell.prop('colSpan')) + 1, $cell.attr('data-org-colspan'));
+                                    // update colspan
+                                    $cell.prop('colSpan', newColSpan);
+                                }
+
+                                // show cell
+                                $cell.show();
+
+                            }
+                            // checkbox has been unchecked
+                            else {
+                                // decrement colSpan if it's not 1 (because colSpan should not be 0)
+                                // This should not be done for th's in thead.
+                                if(!$cell.closest("thead").length && parseInt($cell.prop('colSpan'))>1){
+                                    $cell.prop('colSpan', parseInt($cell.prop('colSpan')) - 1);
+                                }
+                                // otherwise, hide the cell
+                                else {
+                                    $cell.hide();
+                                }
+                            }
+                        });
+                    })
+                    .bind('updateCheck', function(){
+                        if ( $th.css('display') !== 'none') {
+                            $(this).prop('checked', true);
+                        }
+                        else {
+                            $(this).prop('checked', false);
+                        }
+                    });
+            } // end if
+        }); // end hdrCells loop
+
+        if(!$.isEmptyObject(this.headerRowIndices)) {
+            that.setupRow(this.$thead.find("tr:eq(1)"), this.headerRowIndices);
+        }
+    };
+
+    // Setup body rows
+    // assign matching "data-columns" attributes to the associated cells "(cells with colspan>1 has multiple columns).
+    ResponsiveTable.prototype.setupBodyRows = function() {
+        var that = this;
+
+        // for each body rows
+        that.$bodyRows.each(function(){
+            that.setupRow($(this), that.headerColIndices);
+        });
+    };
+
+    ResponsiveTable.prototype.setupRow = function($row, indices) {
+        var that = this;
+
+        //check if it's already set up
+        if($row.data('setup')){
+            // don't do anything
+            return;
+        } else {
+            $row.data('setup', true);
+        }
+
+        var idStart = 0;
+
+        // for each cell
+        $row.find('th, td').each(function(){
+            var $cell = $(this);
+            var columnsAttr = '';
+
+            var colSpan = $cell.prop('colSpan');
+            $cell.attr('data-org-colspan', colSpan);
+
+            // if colSpan is more than 1
+            if(colSpan > 1) {
+                //give it the class 'spn-cell';
+                $cell.addClass('spn-cell');
+            }
+
+            // loop through columns that the cell spans over
+            for (var k = idStart; k < (idStart + colSpan); k++) {
+                // add column id
+                columnsAttr = columnsAttr + ' ' + that.idPrefix + indices[k];
+
+                // get column header
+                var $colHdr = that.$table.find('#' + that.idPrefix + indices[k]);
+
+                // copy data-priority attribute from column header
+                var dataPriority = $colHdr.attr('data-priority');
+                if (dataPriority) { $cell.attr('data-priority', dataPriority); }
+            }
+
+            //remove whitespace in begining of string.
+            columnsAttr = columnsAttr.substring(1);
+
+            //set attribute to cell
+            $cell.attr('data-columns', columnsAttr);
+
+            //increment idStart with the current cells colSpan.
+            idStart = idStart + colSpan;
+        });
+    };
+
+    ResponsiveTable.prototype.buildHeaderCellIndices = function() {
+        var that = this;
+
+        var rowspansBeforeIndex = {};
+
+        this.headerColIndices = {};
+        this.headerRowIndices = {};
+        var colPadding = 0;
+        var rowPadding = 0;
+
+        this.$thead.find("tr").first().find('th').each(function(i){
+            var $th = $(this);
+            var colSpan = $th.prop('colSpan');
+            var rowSpan = $th.prop("rowSpan");
+
+            for(var index = 0; index < colSpan; index++) {
+                that.headerColIndices[colPadding + i + index] = i;
+
+                if(colPadding + i + index >= 0) {
+                    rowspansBeforeIndex[colPadding + i + index - rowPadding] = rowPadding;
+                }
+            }
+
+            if(rowSpan > 1) {
+                rowPadding++;
+            }
+
+            colPadding += colSpan - 1;
+        });
+
+        if(this.$thead.find("tr").length > 2) {
+            throw new Error("This plugin doesnt support more than two rows in thead.");
+        }
+
+        if(this.$thead.find("tr").length === 2) {
+            var $row = $(this.$thead.find("tr")[1]);
+            $row.find("th").each(function(cellIndex) {
+                that.headerRowIndices[cellIndex] = that.headerColIndices[rowspansBeforeIndex[cellIndex] + cellIndex];
+            });
+        }
+    };
+
+    // Run this after the content in tbody has changed
+    ResponsiveTable.prototype.update = function() {
+        this.$bodyRows = this.$table.find('tbody, tfoot').find('tr');
+        this.setupBodyRows();
+
+        // Remove old tbody clone from Tableclone
+        this.$tableClone.find('tbody, tfoot').remove();
+
+        // Make new clone of tbody
+        var $tbodyClone = this.$table.find('tbody, tfoot').clone();
+
+        //replace ids
+        $tbodyClone.find('[id]').each(function() {
+            $(this).prop('id', $(this).prop('id') + '-clone');
+        });
+
+        // Append new clone to tableClone
+        $tbodyClone.appendTo(this.$tableClone);
+
+        // Make sure columns visibility is in sync,
+        // by triggering a (non-changing) change event on all checkboxes
+        this.$dropdownContainer.find('input').trigger('change');
+
+        // ¯\(°_o)/¯ I dunno if this is needed
+        // this.updateSpanningCells();
+    };
+
+    // Update colspan and visibility of spanning cells
+    ResponsiveTable.prototype.updateSpanningCells = function() {
+        var that = this;
+
+        // iterate through cells with class 'spn-cell'
+        that.$table.find('.spn-cell').each( function(){
+            var $cell = $(this);
+            var columnsAttr = $cell.attr('data-columns').split(' ');
+
+            var colSpan = columnsAttr.length;
+            var numOfHidden = 0;
+            for (var i = 0; i < colSpan; i++) {
+                if($('#' + columnsAttr[i]).css('display')==='none'){
+                    numOfHidden++;
+                }
+            }
+
+            // if one of the columns that the cell belongs to is visible then show the cell
+            if(numOfHidden !== colSpan){
+                $cell.show();
+            } else {
+                $cell.hide(); //just in case
+            }
+
+            // console.log('numOfHidden: ' + numOfHidden);
+            // console.log("new colSpan:" +Math.max((colSpan - numOfHidden),1));
+
+            //update colSpan to match number of visible columns that i belongs to
+            $cell.prop('colSpan',Math.max((colSpan - numOfHidden),1));
+        });
+    };
+
+    // RESPONSIVE TABLE PLUGIN DEFINITION
+    // ===========================
+
+    var old = $.fn.responsiveTable;
+
+    $.fn.responsiveTable = function (option) {
+        return this.each(function () {
+            var $this   = $(this);
+            var data    = $this.data('responsiveTable');
+            var options = $.extend({}, ResponsiveTable.DEFAULTS, $this.data(), typeof option === 'object' && option);
+
+            if(options.pattern === '') {
+                return;
+            }
+
+            if (!data) {
+                $this.data('responsiveTable', (data = new ResponsiveTable(this, options)));
+            }
+            if (typeof option === 'string') {
+                data[option]();
+            }
+        });
+    };
+
+    $.fn.responsiveTable.Constructor = ResponsiveTable;
+
+
+    // RESPONSIVE TABLE NO CONFLICT
+    // =====================
+
+    $.fn.responsiveTable.noConflict = function () {
+        $.fn.responsiveTable = old;
+        return this;
+    };
+
+    // RESPONSIVE TABLE DATA-API
+    // ==================
+
+    $(document).on('ready.responsive-table.data-api', function () {
+        $('.table-responsive[data-pattern]').each(function () {
+            var $tableScrollWrapper = $(this);
+            $tableScrollWrapper.responsiveTable($tableScrollWrapper.data());
+        });
+    });
+
+
+    // DROPDOWN
+    // ==========================
+
+    // Prevent dropdown from closing when toggling checkbox
+    $(document).on('click.dropdown.data-api', '.dropdown-menu .checkbox-row', function (e) {
+        e.stopPropagation();
+    });
+
+    // FEATURE DETECTION (instead of Modernizr)
+    // ==========================
+
+    // media queries
+    function mediaQueriesSupported() {
+        return (typeof window.matchMedia !== 'undefined' || typeof window.msMatchMedia !== 'undefined' || typeof window.styleMedia !== 'undefined');
+    }
+
+    // touch
+    function hasTouch() {
+        return 'ontouchstart' in window;
+    }
+
+    // Checks if current browser is on IOS.
+    function isIOS() {
+        return !!(navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i));
+    }
+
+    // Gets iOS version number. If the user is not on iOS, the function returns 0.
+    function getIOSVersion() {
+        if(isIOS()){
+            var iphone_version = parseFloat(('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]).replace('undefined', '3_2').replace('_', '.').replace('_', ''));
+            return iphone_version;
+        } else {
+            return 0;
+        }
+    }
+
+    $(document).ready(function() {
+        // Change `no-js` to `js`
+        $('html').removeClass('no-js').addClass('js');
+
+        // Add mq/no-mq class to html
+        if(mediaQueriesSupported()) {
+            $('html').addClass('mq');
+        } else {
+            $('html').addClass('no-mq');
+        }
+
+        // Add touch/no-touch class to html
+        if(hasTouch()) {
+            $('html').addClass('touch');
+        } else {
+            $('html').addClass('no-touch');
+        }
+    });
+})(jQuery);

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
resources/assets/plugins/RWD-Table-Patterns/dist/js/rwd-table.min.js


+ 25 - 1
resources/dist/dcat/css/app.css

@@ -1760,7 +1760,7 @@ html body .content .content-wrapper {
 }
 
 .btn-group .btn.btn-white {
-  box-shadow: 0 2px 1px 0 rgba(0, 0, 0, 0.08);
+  box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.08);
 }
 
 .btn-sm,
@@ -1794,6 +1794,16 @@ html body .content .content-wrapper {
   color: #59a9f8;
 }
 
+.btn.btn-white {
+  color: #414750;
+}
+
+.btn.btn-white.btn-primary,
+.btn.btn-white.btn-primary:hover,
+.btn.btn-white.btn-primary:focus {
+  color: #fff !important;
+}
+
 .btn-white:hover {
   box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.1), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 1px 5px 1px rgba(0, 0, 0, 0.1) !important;
 }
@@ -1899,6 +1909,16 @@ table.data-thumb-view.dataTable tbody tr:hover {
   color: #fff;
 }
 
+.table-responsive {
+  border: 0 !important;
+  margin-bottom: 0 !important;
+}
+
+.data-list-view-header .table-responsive {
+  overflow: visible !important;
+  padding-bottom: 0 !important;
+}
+
 .grid-column-header a {
   color: #b3b9bf;
 }
@@ -1958,6 +1978,10 @@ table.data-thumb-view.dataTable tbody tr:hover {
   color: #333;
 }
 
+.dropdown i {
+  margin-right: 0;
+}
+
 .vs-checkbox-con {
   margin: 0;
 }

+ 4 - 1
resources/dist/dcat/js/app.js

@@ -460,7 +460,10 @@ function extend(Dcat) {
 
   Dcat.DialogForm = function (options) {
     return new _extensions_DialogForm__WEBPACK_IMPORTED_MODULE_9__["default"](Dcat, options);
-  };
+  }; // 滑动窗
+
+
+  Dcat.Slider = function (options) {};
 } // 初始化
 
 

+ 21 - 0
resources/dist/plugins/RWD-Table-Patterns/.jshintrc

@@ -0,0 +1,21 @@
+{
+    "nonbsp": true,
+    "trailing": true,
+    "indent": 4,
+    "quotmark": "single",
+    "eqeqeq": true,
+    "curly": true,
+    "forin": true,
+    "latedef": true,
+    "immed": true,
+    "newcap": true,
+    "noempty": true,
+    "nonew": true,
+    "undef": true,
+    "unused": true,
+    "strict": true,
+    "browser": true,
+    "globals": {
+        "jQuery": false
+    }
+}

+ 344 - 0
resources/dist/plugins/RWD-Table-Patterns/dist/css/rwd-table.css

@@ -0,0 +1,344 @@
+/*!
+ * Responsive Tables v5.3.2 (http://gergeo.se/RWD-Table-Patterns)
+ * This is an awesome solution for responsive tables with complex data.
+ * Authors: Nadan Gergeo <nadan@blimp.se> (www.blimp.se), Lucas Wiener <lucas@blimp.se> & "Maggie Wachs (www.filamentgroup.com)"
+ * Licensed under MIT (https://github.com/nadangergeo/RWD-Table-Patterns/blob/master/LICENSE-MIT)
+ */
+.dropdown-menu > li.checkbox-row {
+  padding: 5px 20px;
+}
+.dropdown-menu li.checkbox-row {
+  display: block;
+  clear: both;
+  font-weight: normal;
+  line-height: 20px;
+  color: #333333;
+  white-space: nowrap;
+}
+.dropdown-menu li.checkbox-row label {
+  font-weight: normal;
+}
+.dropdown-menu li.checkbox-row:hover,
+.dropdown-menu li.checkbox-row input:hover,
+.dropdown-menu li.checkbox-row label:hover {
+  cursor: pointer;
+}
+.no-touch .dropdown-menu > .checkbox-row:hover,
+.no-touch .dropdown-menu > .checkbox-row:active {
+  text-decoration: none;
+  color: #262626;
+  background-color: #f5f5f5;
+}
+.lt-ie8 .btn-toolbar {
+  display: none;
+}
+.table-responsive {
+  border-radius: 3px;
+  border: 1px solid #dddddd;
+  margin-bottom: 20px;
+}
+.table-responsive > .table {
+  margin-bottom: 0;
+}
+.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-left: 0;
+}
+.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-right: 0;
+}
+.table-responsive > .table-bordered > tbody > tr:last-child > th,
+.table-responsive > .table-bordered > tfoot > tr:last-child > th,
+.table-responsive > .table-bordered > tbody > tr:last-child > td,
+.table-responsive > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}
+.table-responsive[data-pattern="priority-columns"] {
+  width: 100%;
+  margin-bottom: 20px;
+  overflow-y: hidden;
+  overflow-x: auto;
+  -ms-overflow-style: -ms-autohiding-scrollbar;
+  border-radius: 3px;
+  border: 1px solid #dddddd;
+  -webkit-overflow-scrolling: touch;
+}
+.table-responsive[data-pattern="priority-columns"] > .table {
+  margin-bottom: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table > thead > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > tbody > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > tfoot > tr > th,
+.table-responsive[data-pattern="priority-columns"] > .table > thead > tr > td,
+.table-responsive[data-pattern="priority-columns"] > .table > tbody > tr > td,
+.table-responsive[data-pattern="priority-columns"] > .table > tfoot > tr > td {
+  white-space: nowrap;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered {
+  border: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > th:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > td:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > td:first-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > th:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > thead > tr > td:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr > td:last-child,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr:last-child > th,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr:last-child > th,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tbody > tr:last-child > td,
+.table-responsive[data-pattern="priority-columns"] > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}
+.table-responsive.absolute-solution {
+  position: relative;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="-1"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="-1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="-1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="-1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="0"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="0"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="0"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="0"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="2"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="3"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="4"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="5"],
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+  display: none;
+}
+.lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="1"],
+.lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="1"],
+.lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"] {
+  display: inline;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header th[data-priority="1"],
+.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="1"],
+.mq.js.lt-ie10 .sticky-table-header td[data-priority="1"] {
+  display: table-cell;
+}
+@media screen and (min-width: 480px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="2"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="2"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="2"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="2"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="2"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 640px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="3"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="3"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="3"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="3"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="3"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 800px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="4"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="4"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="4"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="4"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="4"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 960px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="5"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="5"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="5"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="5"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="5"] {
+    display: table-cell;
+  }
+}
+@media screen and (min-width: 1120px) {
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+  .lt-ie9.mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+  .lt-ie9.mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+    display: inline;
+  }
+  .mq.js .table-responsive[data-pattern="priority-columns"] th[data-priority="6"],
+  .mq.js.lt-ie10 .sticky-table-header th[data-priority="6"],
+  .mq.js .table-responsive[data-pattern="priority-columns"] td[data-priority="6"],
+  .mq.js.lt-ie10 .sticky-table-header td[data-priority="6"] {
+    display: table-cell;
+  }
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th.cell-hide,
+.mq.js.lt-ie10 .sticky-table-header th.cell-hide,
+.mq.js .table-responsive[data-pattern="priority-columns"] td.cell-hide,
+.mq.js.lt-ie10 .sticky-table-header td.cell-hide {
+  display: none;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] th.cell-show,
+.mq.js.lt-ie10 .sticky-table-header th.cell-show,
+.mq.js .table-responsive[data-pattern="priority-columns"] td.cell-show,
+.mq.js.lt-ie10 .sticky-table-header td.cell-show {
+  display: table-cell;
+}
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"] th.cell-show,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header th.cell-show,
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"] td.cell-show,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header td.cell-show {
+  display: inline;
+}
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"].display-all th,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header.display-all th,
+.lt-ie9 .mq.js .table-responsive[data-pattern="priority-columns"].display-all td,
+.lt-ie9 .mq.js.lt-ie10 .sticky-table-header.display-all td {
+  display: inline !important;
+}
+.mq.js .table-responsive[data-pattern="priority-columns"] table.display-all th,
+.mq.js.lt-ie10 .sticky-table-header table.display-all th,
+.mq.js .table-responsive[data-pattern="priority-columns"] table.display-all td,
+.mq.js.lt-ie10 .sticky-table-header table.display-all td {
+  display: table-cell !important;
+}
+table.table-small-font {
+  font-size: 12px;
+  -webkit-text-size-adjust: none;
+  line-height: 1.5em;
+}
+table.focus-on tbody tr:hover,
+table.focus-on tfoot tr:hover {
+  cursor: pointer;
+}
+table.focus-on tbody tr.unfocused th,
+table.focus-on tfoot tr.unfocused th,
+table.focus-on tbody tr.unfocused td,
+table.focus-on tfoot tr.unfocused td {
+  color: #777777;
+  color: rgba(0, 0, 0, 0.4);
+}
+table.focus-on tbody tr.focused th,
+table.focus-on tfoot tr.focused th,
+table.focus-on tbody tr.focused td,
+table.focus-on tfoot tr.focused td {
+  background-color: rgba(91,192,222,0.26);
+  color: #000;
+}
+.sticky-table-header {
+  background-color: #fff;
+  border: none;
+  border-radius: 0;
+  border-top: 1px solid #dddddd;
+  border-bottom: 1px solid #dddddd;
+  visibility: hidden;
+  z-index: 990;
+  overflow: hidden;
+}
+.fixed-solution .sticky-table-header {
+  position: fixed;
+  min-width: 0;
+}
+.absolute-solution .sticky-table-header {
+  position: absolute;
+  min-width: 100%;
+  top: 0;
+}
+.sticky-table-header.border-radius-fix {
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.sticky-table-header > .table {
+  margin-bottom: 0;
+}
+.sticky-table-header > .table > thead > tr > th,
+.sticky-table-header > .table > tbody > tr > th,
+.sticky-table-header > .table > tfoot > tr > th,
+.sticky-table-header > .table > thead > tr > td,
+.sticky-table-header > .table > tbody > tr > td,
+.sticky-table-header > .table > tfoot > tr > td {
+  white-space: nowrap;
+}
+.sticky-table-header > .table-bordered {
+  border: 0;
+}
+.sticky-table-header > .table-bordered > thead > tr > th:first-child,
+.sticky-table-header > .table-bordered > tbody > tr > th:first-child,
+.sticky-table-header > .table-bordered > tfoot > tr > th:first-child,
+.sticky-table-header > .table-bordered > thead > tr > td:first-child,
+.sticky-table-header > .table-bordered > tbody > tr > td:first-child,
+.sticky-table-header > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.sticky-table-header > .table-bordered > thead > tr > th:last-child,
+.sticky-table-header > .table-bordered > tbody > tr > th:last-child,
+.sticky-table-header > .table-bordered > tfoot > tr > th:last-child,
+.sticky-table-header > .table-bordered > thead > tr > td:last-child,
+.sticky-table-header > .table-bordered > tbody > tr > td:last-child,
+.sticky-table-header > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.sticky-table-header > .table-bordered > tbody > tr:last-child > th,
+.sticky-table-header > .table-bordered > tfoot > tr:last-child > th,
+.sticky-table-header > .table-bordered > tbody > tr:last-child > td,
+.sticky-table-header > .table-bordered > tfoot > tr:last-child > td {
+  border-bottom: 0;
+}

Разлика између датотеке није приказан због своје велике величине
+ 6 - 0
resources/dist/plugins/RWD-Table-Patterns/dist/css/rwd-table.min.css


+ 801 - 0
resources/dist/plugins/RWD-Table-Patterns/dist/js/rwd-table.js

@@ -0,0 +1,801 @@
+/*!
+ * Responsive Tables v5.3.2 (http://gergeo.se/RWD-Table-Patterns)
+ * This is an awesome solution for responsive tables with complex data.
+ * Authors: Nadan Gergeo <nadan@blimp.se> (www.blimp.se), Lucas Wiener <lucas@blimp.se> & "Maggie Wachs (www.filamentgroup.com)"
+ * Licensed under MIT (https://github.com/nadangergeo/RWD-Table-Patterns/blob/master/LICENSE-MIT)
+ */
+(function ($) {
+    'use strict';
+
+    // RESPONSIVE TABLE CLASS DEFINITION
+    // ==========================
+
+    var ResponsiveTable = function(element, options) {
+        // console.time('init');
+
+        var that = this;
+
+        this.options = options;
+        this.$tableWrapper = null; //defined later in wrapTable
+        this.$tableScrollWrapper = $(element); //defined later in wrapTable
+        this.$table = $(element).find('table').first();
+
+        if(this.$table.length !== 1) {
+            throw new Error('Exactly one table is expected in a .table-responsive div.');
+        }
+
+        //apply pattern option as data-attribute, in case it was set via js
+        this.$tableScrollWrapper.attr('data-pattern', this.options.pattern);
+
+        //if the table doesn't have a unique id, give it one.
+        //The id will be a random hexadecimal value, prefixed with id.
+        //Used for triggers with displayAll button.
+        this.id = this.$table.prop('id') || this.$tableScrollWrapper.prop('id') || 'id' + Math.random().toString(16).slice(2);
+
+        this.$tableClone = null; //defined farther down
+        this.$stickyTableHeader = null; //defined farther down
+
+        //good to have - for easy access
+        this.$thead = this.$table.find('thead').first();
+        this.$hdrCells = this.$thead.find("tr").first().find('th');
+        this.$bodyRows = this.$table.find('tbody, tfoot').find('tr');
+
+        //toolbar and buttons
+        this.$btnToolbar = null; //defined farther down
+        this.$dropdownGroup = null; //defined farther down
+        this.$dropdownBtn = null; //defined farther down
+        this.$dropdownContainer = null; //defined farther down
+
+        this.$displayAllBtn = null; //defined farther down
+
+        this.$focusGroup = null; //defined farther down
+        this.$focusBtn = null; //defined farther down
+
+        //misc
+        this.displayAllTrigger = 'display-all-' + this.id + '.responsive-table';
+        this.idPrefix = this.id + '-col-';
+
+        this.headerColIndices = {};
+        this.headerRowIndices = {};
+
+        // Setup table
+        // -------------------------
+
+        //wrap table
+        this.wrapTable();
+
+        //create toolbar with buttons
+        this.createButtonToolbar();
+
+        //Build header indices mapping (for colspans in header)
+        this.buildHeaderCellIndices();
+
+        // Setup cells
+        // -------------------------
+
+        //setup header
+        this.setupTableHeader();
+
+        //setup standard cells
+        this.setupBodyRows();
+
+        //create sticky table head
+        if(this.options.stickyTableHeader){
+            this.createStickyTableHeader();
+        }
+
+        // hide toggle button if the list is empty
+        if(this.$dropdownContainer.is(':empty')){
+            this.$dropdownGroup.hide();
+        }
+
+        // Event binding
+        // -------------------------
+
+        // on orientchange, resize and displayAllBtn-click
+        $(window).bind('orientationchange resize ' + this.displayAllTrigger, function(){
+
+            //update the inputs' checked status
+            that.$dropdownContainer.find('input').trigger('updateCheck');
+
+            //update colspan and visibility of spanning cells
+            $.proxy(that.updateSpanningCells(), that);
+
+        }).trigger('resize');
+
+        // console.timeEnd('init');
+    };
+
+    ResponsiveTable.DEFAULTS = {
+        pattern: 'priority-columns',
+        stickyTableHeader: true,
+        fixedNavbar: '.navbar-fixed-top',  // Is there a fixed navbar? The stickyTableHeader needs to know about it!
+        addDisplayAllBtn: true, // should it have a display-all button?
+        addFocusBtn: true,  // should it have a focus button?
+        focusBtnIcon: 'glyphicon glyphicon-screenshot',
+        mainContainer: window,
+        i18n: {
+            focus     : 'Focus',
+            display   : 'Display',
+            displayAll: 'Display all'
+        }
+    };
+
+    // Wrap table
+    ResponsiveTable.prototype.wrapTable = function() {
+        this.$tableScrollWrapper.wrap('<div class="table-wrapper"/>');
+        this.$tableWrapper = this.$tableScrollWrapper.parent();
+    };
+
+    // Create toolbar with buttons
+    ResponsiveTable.prototype.createButtonToolbar = function() {
+        var that = this;
+
+        this.$btnToolbar = $('[data-responsive-table-toolbar="' + this.id + '"]');
+        if(this.$btnToolbar.length === 0) {
+            this.$btnToolbar = $('<div class="btn-toolbar" />');
+        }
+
+        this.$dropdownGroup = $('<div class="btn-group dropdown-btn-group dropdown" />');
+        this.$dropdownBtn = $('<button type="button" class="btn btn-white " data-toggle="dropdown">' + this.options.i18n.display + '</button>');
+        this.$dropdownContainer = $('<ul class="dropdown-menu"/>');
+
+        // Focus btn
+        if(this.options.addFocusBtn) {
+            // Create focus btn group
+            this.$focusGroup = $('<div class="btn-group focus-btn-group" />');
+
+            // Create focus btn
+            this.$focusBtn = $('<button type="button" class="btn  btn-white">' + this.options.i18n.focus + '</button>');
+
+            if(this.options.focusBtnIcon) {
+                this.$focusBtn.prepend('<span class="' + this.options.focusBtnIcon + '"></span> ');
+            }
+
+            // Add btn to group
+            this.$focusGroup.append(this.$focusBtn);
+            // Add focus btn to toolbar
+            this.$btnToolbar.append(this.$focusGroup);
+
+            // bind click on focus btn
+            this.$focusBtn.click(function(){
+                $.proxy(that.activateFocus(), that);
+            });
+
+            // bind click on rows
+            this.$bodyRows.click(function(){
+                $.proxy(that.focusOnRow($(this)), that);
+            });
+        }
+
+        // Display-all btn
+        if(this.options.addDisplayAllBtn) {
+            // Create display-all btn
+            this.$displayAllBtn = $('<button type="button" class="btn  btn-white">' + this.options.i18n.displayAll + '</button>');
+            // Add display-all btn to dropdown-btn-group
+            this.$dropdownGroup.append(this.$displayAllBtn);
+
+            if (this.$table.hasClass('display-all')) {
+                // add 'btn-primary' class to btn to indicate that display all is activated
+                this.$displayAllBtn.addClass('btn-primary');
+            }
+
+            // bind click on display-all btn
+            this.$displayAllBtn.click(function(){
+                $.proxy(that.displayAll(null, true), that);
+            });
+        }
+
+        //add dropdown btn and menu to dropdown-btn-group
+        this.$dropdownGroup.append('<span></span>');
+        this.$dropdownGroup.find('span').append(this.$dropdownBtn).append(this.$dropdownContainer);
+
+        //add dropdown group to toolbar
+        this.$btnToolbar.append(this.$dropdownGroup);
+
+        // add toolbar above table
+        // this.$tableScrollWrapper.before(this.$btnToolbar);
+    };
+
+    ResponsiveTable.prototype.clearAllFocus = function() {
+        this.$bodyRows.removeClass('unfocused');
+        this.$bodyRows.removeClass('focused');
+    };
+
+    ResponsiveTable.prototype.activateFocus = function() {
+        // clear all
+        this.clearAllFocus();
+
+        if(this.$focusBtn){
+            this.$focusBtn.toggleClass('btn-primary');
+        }
+
+        this.$table.toggleClass('focus-on');
+    };
+
+    ResponsiveTable.prototype.focusOnRow = function(row) {
+        // only if activated (.i.e the table has the class focus-on)
+        if(this.$table.hasClass('focus-on')) {
+            var alreadyFocused = $(row).hasClass('focused');
+
+            // clear all
+            this.clearAllFocus();
+
+            if(!alreadyFocused) {
+                this.$bodyRows.addClass('unfocused');
+                $(row).addClass('focused');
+            }
+        }
+    };
+
+    /**
+     * @param activate Forces the displayAll to be active or not. If anything else than bool, it will not force the state so it will toggle as normal.
+     * @param trigger Bool to indicate if the displayAllTrigger should be triggered.
+     */
+    ResponsiveTable.prototype.displayAll = function(activate, trigger) {
+        if(this.$displayAllBtn){
+            // add 'btn-primary' class to btn to indicate that display all is activated
+            this.$displayAllBtn.toggleClass('btn-primary', activate);
+        }
+
+        this.$table.toggleClass('display-all', activate);
+        if(this.$tableClone){
+            this.$tableClone.toggleClass('display-all', activate);
+        }
+
+        if(trigger) {
+            $(window).trigger(this.displayAllTrigger);
+        }
+    };
+
+    ResponsiveTable.prototype.preserveDisplayAll = function() {
+        var displayProp = 'table-cell';
+        if($('html').hasClass('lt-ie9')){
+            displayProp = 'inline';
+        }
+
+        $(this.$table).find('th, td').css('display', displayProp);
+        if(this.$tableClone){
+            $(this.$tableClone).find('th, td').css('display', displayProp);
+        }
+    };
+
+    ResponsiveTable.prototype.createStickyTableHeader = function() {
+        var that = this;
+
+        //clone table head
+        that.$tableClone = that.$table.clone();
+
+        //replace ids
+        that.$tableClone.prop('id', this.id + '-clone');
+        that.$tableClone.find('[id]').each(function() {
+            $(this).prop('id', $(this).prop('id') + '-clone');
+        });
+
+        // wrap table clone (this is our "sticky table header" now)
+        that.$tableClone.wrap('<div class="sticky-table-header"/>');
+        that.$stickyTableHeader = that.$tableClone.parent();
+
+        // give the sticky table header same height as original
+        that.$stickyTableHeader.css('height', that.$thead.height() + 2);
+
+        //insert sticky table header
+        that.$table.before(that.$stickyTableHeader);
+
+        // bind scroll on mainContainer with updateStickyTableHeader
+        $(this.options.mainContainer).bind('scroll', function(){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        // bind resize on window with updateStickyTableHeader
+        $(window).bind('resize', function(e){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        $(that.$tableScrollWrapper).bind('scroll', function(){
+            $.proxy(that.updateStickyTableHeader(), that);
+        });
+
+        // determine what solution to use for rendereing  sticky table head (aboslute/fixed).
+        that.useFixedSolution  = !isIOS() || (getIOSVersion() >= 8);
+        //add class for rendering solution
+        if(that.useFixedSolution) {
+            that.$tableScrollWrapper.addClass('fixed-solution');
+        } else {
+            that.$tableScrollWrapper.addClass('absolute-solution');
+        }
+    };
+
+    // Help function for sticky table header
+    ResponsiveTable.prototype.updateStickyTableHeader = function() {
+        var that              = this,
+            top               = 0,
+            offsetTop         = that.$table.offset().top,
+            scrollTop         = $(this.options.mainContainer).scrollTop() -1, //-1 to accomodate for top border
+            maxTop            = that.$table.height() - that.$stickyTableHeader.height(),
+            rubberBandOffset  = (scrollTop + $(this.options.mainContainer).height()) - $(document).height(),
+            navbarHeight      = 0;
+
+        //Is there a fixed navbar?
+        if($(that.options.fixedNavbar).length) {
+            var $navbar = $(that.options.fixedNavbar).first();
+            navbarHeight = $navbar.height();
+            scrollTop = scrollTop + navbarHeight;
+        }
+
+        var shouldBeVisible;
+
+        if(this.options.mainContainer === window) {
+            shouldBeVisible   = (scrollTop > offsetTop) && (scrollTop < offsetTop + that.$table.height());
+        } else {
+            shouldBeVisible   = (offsetTop <= 0) && (-offsetTop < that.$table.height());
+        }
+
+        // console.log('offsetTop:' + offsetTop);
+        // console.log('scrollTop:' + scrollTop);
+        // console.log('tableHeight:' + that.$table.height());
+        // console.log('shouldBeVisible:' + shouldBeVisible);
+
+        if(that.useFixedSolution) { //fixed solution
+            that.$stickyTableHeader.scrollLeft(that.$tableScrollWrapper.scrollLeft());
+
+            // Calculate top property value (-1 to accomodate for top border)
+            top = navbarHeight - 1;
+
+            // When the user is about to scroll past the table, move sticky table head up
+            if(this.options.mainContainer === window && ((scrollTop - offsetTop) > maxTop)){
+
+                top -= ((scrollTop - offsetTop) - maxTop);
+                that.$stickyTableHeader.addClass('border-radius-fix');
+
+            } else if(this.options.mainContainer !== window && ((- offsetTop) > maxTop)){
+
+                top -= ((- offsetTop) - maxTop);
+                that.$stickyTableHeader.addClass('border-radius-fix');
+
+            } else {
+
+                that.$stickyTableHeader.removeClass('border-radius-fix');
+
+            }
+
+            if (shouldBeVisible) {
+                //show sticky table header and update top and width.
+                that.$stickyTableHeader.css({ 'visibility': 'visible', 'top': top + 'px', 'width': that.$tableScrollWrapper.innerWidth() + 'px'});
+
+                //no more stuff to do - return!
+                return;
+            } else {
+                //hide sticky table header and reset width
+                that.$stickyTableHeader.css({'visibility': 'hidden', 'width': 'auto' });
+            }
+
+        } else { // alternate method
+            //animation duration
+            var animationDuration = 400;
+
+            // Calculate top property value (-1 to accomodate for top border)
+            if(this.options.mainContainer === window) {
+                top = scrollTop - offsetTop - 1;
+            } else {
+                top = -offsetTop - 1;
+                // console.log('top:' + top);
+            }
+
+            // Make sure the sticky table header doesn't slide up/down too far.
+            if(top < 0) {
+                top = 0;
+            } else if (top > maxTop) {
+                top = maxTop;
+            }
+
+            // Accomandate for rubber band effect
+            if(this.options.mainContainer === window) {
+                if(rubberBandOffset > 0) {
+                    top = top - rubberBandOffset;
+                }
+            }
+
+            if (shouldBeVisible) {
+                //show sticky table header (animate repositioning)
+                that.$stickyTableHeader.css({ 'visibility': 'visible' });
+                that.$stickyTableHeader.animate({ 'top': top + 'px' }, animationDuration);
+
+                // hide original table head
+                that.$thead.css({ 'visibility': 'hidden' });
+
+            } else {
+
+                that.$stickyTableHeader.animate({ 'top': '0' }, animationDuration, function(){
+                    // show original table head
+                    that.$thead.css({ 'visibility': 'visible' });
+
+                    // hide sticky table head
+                    that.$stickyTableHeader.css({ 'visibility': 'hidden' });
+                });
+            }
+        }
+    };
+
+    // Setup header cells
+    ResponsiveTable.prototype.setupTableHeader = function() {
+        var that = this;
+
+        // for each header column
+        that.$hdrCells.each(function(i){
+            var $th = $(this),
+                id = $th.prop('id'),
+                thText = $th.text();
+
+            // assign an id to each header, if none is in the markup
+            if (!id) {
+                id = that.idPrefix + i;
+                $th.prop('id', id);
+            }
+
+            if(thText === ''){
+                thText = $th.attr('data-col-name');
+            }
+
+            // create the hide/show toggle for the current column
+            if ( $th.is('[data-priority]') && $th.data('priority') !== -1 ) {
+                var $toggle = $('<li class="checkbox-row"><input type="checkbox" name="toggle-'+id+'" id="toggle-'+id+'" value="'+id+'" /> <label for="toggle-'+id+'">'+ thText +'</label></li>');
+                var $checkbox = $toggle.find('input');
+
+                that.$dropdownContainer.append($toggle);
+
+                $toggle.click(function(){
+                    // console.log("cliiiick!");
+                    $checkbox.prop('checked', !$checkbox.prop('checked'));
+                    $checkbox.trigger('change');
+                });
+
+                //Freakin' IE fix
+                if ($('html').hasClass('lt-ie9')) {
+                    $checkbox.click(function() {
+                        $(this).trigger('change');
+                    });
+                }
+
+                $toggle.find('label').click(function(event){
+                    event.stopPropagation();
+                });
+
+                $toggle.find('input')
+                    .click(function(event){
+                        event.stopPropagation();
+                    })
+                    .change(function(){ // bind change event on checkbox
+                        var $checkbox = $(this),
+                            val = $checkbox.val(),
+                            //all cells under the column, including the header and its clone
+                            $cells = that.$tableWrapper.find('#' + val + ', #' + val + '-clone, [data-columns~='+ val +']');
+
+                        //if display-all is on - save state and carry on
+                        if(that.$table.hasClass('display-all')){
+                            //save state
+                            $.proxy(that.preserveDisplayAll(), that);
+                            //remove display all class
+                            that.$table.removeClass('display-all');
+                            if(that.$tableClone){
+                                that.$tableClone.removeClass('display-all');
+                            }
+                            //switch off button
+                            that.$displayAllBtn.removeClass('btn-primary');
+                        }
+
+                        // loop through the cells
+                        $cells.each(function(){
+                            var $cell = $(this);
+
+                            // is the checkbox checked now?
+                            if ($checkbox.is(':checked')) {
+
+                                // if the cell was already visible, it means its original colspan was >1
+                                // so let's increment the colspan
+                                // This should not be done for th's in thead.
+                                if(!$cell.closest("thead").length && $cell.css('display') !== 'none'){
+                                    // make sure new colspan value does not exceed original colspan value
+                                    var newColSpan = Math.min(parseInt($cell.prop('colSpan')) + 1, $cell.attr('data-org-colspan'));
+                                    // update colspan
+                                    $cell.prop('colSpan', newColSpan);
+                                }
+
+                                // show cell
+                                $cell.show();
+
+                            }
+                            // checkbox has been unchecked
+                            else {
+                                // decrement colSpan if it's not 1 (because colSpan should not be 0)
+                                // This should not be done for th's in thead.
+                                if(!$cell.closest("thead").length && parseInt($cell.prop('colSpan'))>1){
+                                    $cell.prop('colSpan', parseInt($cell.prop('colSpan')) - 1);
+                                }
+                                // otherwise, hide the cell
+                                else {
+                                    $cell.hide();
+                                }
+                            }
+                        });
+                    })
+                    .bind('updateCheck', function(){
+                        if ( $th.css('display') !== 'none') {
+                            $(this).prop('checked', true);
+                        }
+                        else {
+                            $(this).prop('checked', false);
+                        }
+                    });
+            } // end if
+        }); // end hdrCells loop
+
+        if(!$.isEmptyObject(this.headerRowIndices)) {
+            that.setupRow(this.$thead.find("tr:eq(1)"), this.headerRowIndices);
+        }
+    };
+
+    // Setup body rows
+    // assign matching "data-columns" attributes to the associated cells "(cells with colspan>1 has multiple columns).
+    ResponsiveTable.prototype.setupBodyRows = function() {
+        var that = this;
+
+        // for each body rows
+        that.$bodyRows.each(function(){
+            that.setupRow($(this), that.headerColIndices);
+        });
+    };
+
+    ResponsiveTable.prototype.setupRow = function($row, indices) {
+        var that = this;
+
+        //check if it's already set up
+        if($row.data('setup')){
+            // don't do anything
+            return;
+        } else {
+            $row.data('setup', true);
+        }
+
+        var idStart = 0;
+
+        // for each cell
+        $row.find('th, td').each(function(){
+            var $cell = $(this);
+            var columnsAttr = '';
+
+            var colSpan = $cell.prop('colSpan');
+            $cell.attr('data-org-colspan', colSpan);
+
+            // if colSpan is more than 1
+            if(colSpan > 1) {
+                //give it the class 'spn-cell';
+                $cell.addClass('spn-cell');
+            }
+
+            // loop through columns that the cell spans over
+            for (var k = idStart; k < (idStart + colSpan); k++) {
+                // add column id
+                columnsAttr = columnsAttr + ' ' + that.idPrefix + indices[k];
+
+                // get column header
+                var $colHdr = that.$table.find('#' + that.idPrefix + indices[k]);
+
+                // copy data-priority attribute from column header
+                var dataPriority = $colHdr.attr('data-priority');
+                if (dataPriority) { $cell.attr('data-priority', dataPriority); }
+            }
+
+            //remove whitespace in begining of string.
+            columnsAttr = columnsAttr.substring(1);
+
+            //set attribute to cell
+            $cell.attr('data-columns', columnsAttr);
+
+            //increment idStart with the current cells colSpan.
+            idStart = idStart + colSpan;
+        });
+    };
+
+    ResponsiveTable.prototype.buildHeaderCellIndices = function() {
+        var that = this;
+
+        var rowspansBeforeIndex = {};
+
+        this.headerColIndices = {};
+        this.headerRowIndices = {};
+        var colPadding = 0;
+        var rowPadding = 0;
+
+        this.$thead.find("tr").first().find('th').each(function(i){
+            var $th = $(this);
+            var colSpan = $th.prop('colSpan');
+            var rowSpan = $th.prop("rowSpan");
+
+            for(var index = 0; index < colSpan; index++) {
+                that.headerColIndices[colPadding + i + index] = i;
+
+                if(colPadding + i + index >= 0) {
+                    rowspansBeforeIndex[colPadding + i + index - rowPadding] = rowPadding;
+                }
+            }
+
+            if(rowSpan > 1) {
+                rowPadding++;
+            }
+
+            colPadding += colSpan - 1;
+        });
+
+        if(this.$thead.find("tr").length > 2) {
+            throw new Error("This plugin doesnt support more than two rows in thead.");
+        }
+
+        if(this.$thead.find("tr").length === 2) {
+            var $row = $(this.$thead.find("tr")[1]);
+            $row.find("th").each(function(cellIndex) {
+                that.headerRowIndices[cellIndex] = that.headerColIndices[rowspansBeforeIndex[cellIndex] + cellIndex];
+            });
+        }
+    };
+
+    // Run this after the content in tbody has changed
+    ResponsiveTable.prototype.update = function() {
+        this.$bodyRows = this.$table.find('tbody, tfoot').find('tr');
+        this.setupBodyRows();
+
+        // Remove old tbody clone from Tableclone
+        this.$tableClone.find('tbody, tfoot').remove();
+
+        // Make new clone of tbody
+        var $tbodyClone = this.$table.find('tbody, tfoot').clone();
+
+        //replace ids
+        $tbodyClone.find('[id]').each(function() {
+            $(this).prop('id', $(this).prop('id') + '-clone');
+        });
+
+        // Append new clone to tableClone
+        $tbodyClone.appendTo(this.$tableClone);
+
+        // Make sure columns visibility is in sync,
+        // by triggering a (non-changing) change event on all checkboxes
+        this.$dropdownContainer.find('input').trigger('change');
+
+        // ¯\(°_o)/¯ I dunno if this is needed
+        // this.updateSpanningCells();
+    };
+
+    // Update colspan and visibility of spanning cells
+    ResponsiveTable.prototype.updateSpanningCells = function() {
+        var that = this;
+
+        // iterate through cells with class 'spn-cell'
+        that.$table.find('.spn-cell').each( function(){
+            var $cell = $(this);
+            var columnsAttr = $cell.attr('data-columns').split(' ');
+
+            var colSpan = columnsAttr.length;
+            var numOfHidden = 0;
+            for (var i = 0; i < colSpan; i++) {
+                if($('#' + columnsAttr[i]).css('display')==='none'){
+                    numOfHidden++;
+                }
+            }
+
+            // if one of the columns that the cell belongs to is visible then show the cell
+            if(numOfHidden !== colSpan){
+                $cell.show();
+            } else {
+                $cell.hide(); //just in case
+            }
+
+            // console.log('numOfHidden: ' + numOfHidden);
+            // console.log("new colSpan:" +Math.max((colSpan - numOfHidden),1));
+
+            //update colSpan to match number of visible columns that i belongs to
+            $cell.prop('colSpan',Math.max((colSpan - numOfHidden),1));
+        });
+    };
+
+    // RESPONSIVE TABLE PLUGIN DEFINITION
+    // ===========================
+
+    var old = $.fn.responsiveTable;
+
+    $.fn.responsiveTable = function (option) {
+        return this.each(function () {
+            var $this   = $(this);
+            var data    = $this.data('responsiveTable');
+            var options = $.extend({}, ResponsiveTable.DEFAULTS, $this.data(), typeof option === 'object' && option);
+
+            if(options.pattern === '') {
+                return;
+            }
+
+            if (!data) {
+                $this.data('responsiveTable', (data = new ResponsiveTable(this, options)));
+            }
+            if (typeof option === 'string') {
+                data[option]();
+            }
+        });
+    };
+
+    $.fn.responsiveTable.Constructor = ResponsiveTable;
+
+
+    // RESPONSIVE TABLE NO CONFLICT
+    // =====================
+
+    $.fn.responsiveTable.noConflict = function () {
+        $.fn.responsiveTable = old;
+        return this;
+    };
+
+    // RESPONSIVE TABLE DATA-API
+    // ==================
+
+    $(document).on('ready.responsive-table.data-api', function () {
+        $('.table-responsive[data-pattern]').each(function () {
+            var $tableScrollWrapper = $(this);
+            $tableScrollWrapper.responsiveTable($tableScrollWrapper.data());
+        });
+    });
+
+
+    // DROPDOWN
+    // ==========================
+
+    // Prevent dropdown from closing when toggling checkbox
+    $(document).on('click.dropdown.data-api', '.dropdown-menu .checkbox-row', function (e) {
+        e.stopPropagation();
+    });
+
+    // FEATURE DETECTION (instead of Modernizr)
+    // ==========================
+
+    // media queries
+    function mediaQueriesSupported() {
+        return (typeof window.matchMedia !== 'undefined' || typeof window.msMatchMedia !== 'undefined' || typeof window.styleMedia !== 'undefined');
+    }
+
+    // touch
+    function hasTouch() {
+        return 'ontouchstart' in window;
+    }
+
+    // Checks if current browser is on IOS.
+    function isIOS() {
+        return !!(navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPad/i) || navigator.userAgent.match(/iPod/i));
+    }
+
+    // Gets iOS version number. If the user is not on iOS, the function returns 0.
+    function getIOSVersion() {
+        if(isIOS()){
+            var iphone_version = parseFloat(('' + (/CPU.*OS ([0-9_]{1,5})|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent) || [0,''])[1]).replace('undefined', '3_2').replace('_', '.').replace('_', ''));
+            return iphone_version;
+        } else {
+            return 0;
+        }
+    }
+
+    $(document).ready(function() {
+        // Change `no-js` to `js`
+        $('html').removeClass('no-js').addClass('js');
+
+        // Add mq/no-mq class to html
+        if(mediaQueriesSupported()) {
+            $('html').addClass('mq');
+        } else {
+            $('html').addClass('no-mq');
+        }
+
+        // Add touch/no-touch class to html
+        if(hasTouch()) {
+            $('html').addClass('touch');
+        } else {
+            $('html').addClass('no-touch');
+        }
+    });
+})(jQuery);

Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
resources/dist/plugins/RWD-Table-Patterns/dist/js/rwd-table.min.js


+ 2 - 2
resources/lang/en/admin.php

@@ -156,8 +156,8 @@ return [
         'filter_placeholder' => 'Filter',
     ],
     'responsive' => [
-        'display'     => '<i class="fa fa-th-list"></i>',
-        'display_all' => '<i class="fa fa-th"></i>',
+        'display_all' => 'All',
+        'display'     => '<svg t="1584263245273" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1126" width="15" height="15"><path d="M374.8 155c17.4 0 31.5 14.1 31.5 31.5v189c0 17.4-14.1 31.5-31.5 31.5h-189c-17.4 0-31.5-14.1-31.5-31.5v-189c0-17.4 14.1-31.5 31.5-31.5h189m0-42h-189c-40.5 0-73.5 33-73.5 73.5v189c0 40.5 33 73.5 73.5 73.5h189c40.5 0 73.5-33 73.5-73.5v-189c0-40.5-32.9-73.5-73.5-73.5zM374.8 617c17.4 0 31.5 14.1 31.5 31.5v189c0 17.4-14.1 31.5-31.5 31.5h-189c-17.4 0-31.5-14.1-31.5-31.5v-189c0-17.4 14.1-31.5 31.5-31.5h189m0-42h-189c-40.5 0-73.5 33-73.5 73.5v189c0 40.5 33 73.5 73.5 73.5h189c40.5 0 73.5-33 73.5-73.5v-189c0-40.5-32.9-73.5-73.5-73.5zM911.7 214.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 361.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 655.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 802.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21z" p-id="1127"></path></svg>',
         'focus'       => 'Focus',
     ],
     'uploader' => [

+ 2 - 2
resources/lang/zh-CN/admin.php

@@ -157,8 +157,8 @@ return [
         'filter_placeholder' => '过滤',
     ],
     'responsive'      => [
-        'display'     => '<i class="fa fa-th-list"></i>',
-        'display_all' => '<i class="fa fa-th"></i>',
+        'display_all' => '全部',
+        'display'     => '<svg t="1584263245273" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1126" width="15" height="15"><path d="M374.8 155c17.4 0 31.5 14.1 31.5 31.5v189c0 17.4-14.1 31.5-31.5 31.5h-189c-17.4 0-31.5-14.1-31.5-31.5v-189c0-17.4 14.1-31.5 31.5-31.5h189m0-42h-189c-40.5 0-73.5 33-73.5 73.5v189c0 40.5 33 73.5 73.5 73.5h189c40.5 0 73.5-33 73.5-73.5v-189c0-40.5-32.9-73.5-73.5-73.5zM374.8 617c17.4 0 31.5 14.1 31.5 31.5v189c0 17.4-14.1 31.5-31.5 31.5h-189c-17.4 0-31.5-14.1-31.5-31.5v-189c0-17.4 14.1-31.5 31.5-31.5h189m0-42h-189c-40.5 0-73.5 33-73.5 73.5v189c0 40.5 33 73.5 73.5 73.5h189c40.5 0 73.5-33 73.5-73.5v-189c0-40.5-32.9-73.5-73.5-73.5zM911.7 214.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 361.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 655.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21zM911.7 802.1c0 11.6-9.4 21-21 21h-336c-11.6 0-21-9.4-21-21s9.4-21 21-21h336c11.6 0 21 9.4 21 21z" p-id="1127"></path></svg>',
         'focus'       => '聚焦',
     ],
     'uploader' => [

+ 4 - 4
src/Grid/Responsive.php

@@ -67,15 +67,15 @@ class Responsive
 
     public function build()
     {
-        Admin::css('vendor/dcat-admin/RWD-Table-Patterns/dist/css/rwd-table.min.css');
-        Admin::js('vendor/dcat-admin/RWD-Table-Patterns/dist/js/rwd-table.min.js');
+        Admin::css('dcat-admin/plugins/RWD-Table-Patterns/dist/css/rwd-table.min.css');
+        Admin::js('dcat-admin/plugins/RWD-Table-Patterns/dist/js/rwd-table.min.js');
 
         $opt = json_encode($this->options);
 
         if (request()->pjax()) {
-            Admin::script("$('.table-responsive').responsiveTable($opt);");
+            Admin::script("$('#{$this->grid->getTableId()}').parent().responsiveTable($opt);");
         } else {
-            Admin::script("setTimeout(function(){ $('.table-responsive').responsiveTable($opt); },5);");
+            Admin::script("setTimeout(function(){ $('#{$this->grid->getTableId()}').parent().responsiveTable($opt); },10);");
         }
     }
 }

Неке датотеке нису приказане због велике количине промена