rabin 6 years ago
parent
commit
689e8d90af

+ 1 - 1
assets/moltran/html/inc/head.html

@@ -22,7 +22,7 @@
 <link rel="stylesheet" type="text/css" href="../css/responsive.css" />
 <link rel="stylesheet" type="text/css" href="../public/pjax/nprogress.css" />
 <!-- Responsive-table -->
-<link rel="stylesheet" type="text/css" href="../public/table/dist/css/rwd-table.min.css">
+<!--link rel="stylesheet" type="text/css" href="../public/table/rwd-table.min.css" -->
 
 <link rel="stylesheet" type="text/css" href="../public/simditor/styles/simditor.css">
 <link rel="stylesheet" type="text/css" href="../public/simditor/plugins/html/simditor-html.css">

+ 1 - 1
assets/moltran/html/inc/script.html

@@ -59,7 +59,7 @@
 <script type="text/javascript" src="../js/waves.js"></script> 
 <script type="text/javascript" src="../js/wow.min.js"></script> 
 <script type="text/javascript" src="../js/jquery.app.js"></script> 
-<script type="text/javascript" src="../public/table/dist/js/rwd-table.min.js"></script> 
+<!--script type="text/javascript" src="../public/table/rwd-table.min.js"></script--> 
 
 <script type="text/javascript" src="../public/jquery/ui.min.js"></script>
 

+ 1 - 0
assets/moltran/html/list.html

@@ -49,6 +49,7 @@
 .container_list .table-responsive[data-pattern="priority-columns"]
 {
     position:inherit;
+    margin-top:20px;
 }
 </style>
 <style id="addstyle">

+ 26 - 26
assets/public/main.js

@@ -1,6 +1,7 @@
 //这里的代码是最早写的,很乱,以后整合优化
 
 var editors = [];
+var tables = [];
 
 $(document).ready(function()
 {
@@ -72,11 +73,10 @@ function initMenu()
 
 function table()
 {
-	$('[data-pattern]').each(function ()
+	$('.table-responsive[data-pattern]').each(function()
 	{
-        var $tableScrollWrapper = $(this);
-        $tableScrollWrapper.responsiveTable($tableScrollWrapper.data());
-    });
+		//$(this).responsiveTable('update');
+	});
 }
 
 function pjax(param)
@@ -194,7 +194,7 @@ function loadEditor(e)
 			{
 				imagePath: config.lib + 'simditor/plugins/emoji/images/emoji/'
 			}
-        });
+		});
 	}
 }
 
@@ -396,15 +396,15 @@ function update(e, id, project, table, notice)
 function notify(msg)
 {
 	var notice = new PNotify({
-	    title: '提示信息',
-	    text: msg,
-	    buttons: {
-	        closer: false,
-	        sticker: false
-	    }
+		title: '提示信息',
+		text: msg,
+		buttons: {
+			closer: false,
+			sticker: false
+		}
 	});
 	notice.get().click(function() {
-	    notice.remove();
+		notice.remove();
 	});
 }
 
@@ -612,11 +612,11 @@ function autocomplete()
 				},
 				select: function( event, ui )
 				{
-			        //log( "Selected: " + ui.item.value + " aka " + ui.item.id );
-			        var value = self.attr('complete_callback');
-			        var id = self.attr('id').replace('_temp', '');
-			        $("#" + id).val(ui.item[value]);
-			    }
+					//log( "Selected: " + ui.item.value + " aka " + ui.item.id );
+					var value = self.attr('complete_callback');
+					var id = self.attr('id').replace('_temp', '');
+					$("#" + id).val(ui.item[value]);
+				}
 			});
 		})
 	}
@@ -1057,8 +1057,8 @@ function image()
 			var key = $(this).attr('key');
 			$(this).inlineattachment(
 			{
-	            uploadUrl: config.upload + '.drag?key='+ key
-	        });
+				uploadUrl: config.upload + '.drag?key='+ key
+			});
 		});
 	}
 
@@ -1400,7 +1400,7 @@ var dever_update =
 		}
 		
 		if($('.dever-note').length)
-        {
+		{
 			$('.dever-note').each(function()
 			{
 				var mditor = new Mditor($(this),{
@@ -1409,7 +1409,7 @@ var dever_update =
 				
 				mditor.openPreview();
 			})
-        }
+		}
 	},
 	
 	save : function()
@@ -1634,11 +1634,11 @@ var dever_update =
 
 
 String.prototype.replaceAll = function(reallyDo, replaceWith, ignoreCase) {  
-    if (!RegExp.prototype.isPrototypeOf(reallyDo)) {  
-        return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith);  
-    } else {  
-        return this.replace(reallyDo, replaceWith);  
-    }  
+	if (!RegExp.prototype.isPrototypeOf(reallyDo)) {  
+		return this.replace(new RegExp(reallyDo, (ignoreCase ? "gi": "g")), replaceWith);  
+	} else {  
+		return this.replace(reallyDo, replaceWith);  
+	}  
 }
 
 Array.prototype.remove = function(val) {

+ 0 - 347
assets/public/table/dist/css/rwd-table.css

@@ -1,347 +0,0 @@
-/*!
- * Responsive Tables v5.2.6 (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;
-}
-.btn-toolbar {
-  margin-bottom: 20px;
-}
-.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: #5bc0de;
-  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;
-}

+ 0 - 797
assets/public/table/dist/js/rwd-table.js

@@ -1,797 +0,0 @@
-/*!
- * Responsive Tables v5.2.6 (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');
-
-        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');
-        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 = $('<div class="btn-toolbar" />');
-
-        this.$dropdownGroup = $('<div class="btn-group dropdown-btn-group pull-right" />');
-        this.$dropdownBtn = $('<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">' + this.options.i18n.display + ' <span class="caret"></span></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 class="btn btn-default">' + 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 class="btn btn-default">' + 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(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 () {
-        $('[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
assets/public/table/dist/css/rwd-table.min.css → assets/public/table/rwd-table.min.css


+ 0 - 0
assets/public/table/dist/js/rwd-table.min.js → assets/public/table/rwd-table.min.js


+ 0 - 791
assets/public/table/src/js/rwd-table.js

@@ -1,791 +0,0 @@
-(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');
-
-        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');
-        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 = $('<div class="btn-toolbar" />');
-
-        this.$dropdownGroup = $('<div class="btn-group dropdown-btn-group pull-right" />');
-        this.$dropdownBtn = $('<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">' + this.options.i18n.display + ' <span class="caret"></span></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 class="btn btn-default">' + 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 class="btn btn-default">' + 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(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 () {
-        $('[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 - 415
assets/public/table/src/less/rwd-table.less

@@ -1,415 +0,0 @@
-@import "../../bower_components/bootstrap/less/variables.less";
-
-// Z-index master list
-// -------------------------
-// Used for a bird's eye view of components dependent on the z-axis
-// Try to avoid customizing these :)
-
-@zindex-stickyHeader:      990;
-
-
-// The dropdown menu (ul)
-// ----------------------
-.dropdown-menu {
-    // Checkbox-rows within the dropdown menu
-    > li.checkbox-row {
-      padding: 5px 20px;
-    }
-
-    // links and checkbox-rows within the dropdown menu
-    li.checkbox-row {
-      display: block;
-      clear: both;
-      font-weight: normal;
-      line-height: @line-height-computed;
-      color: @dropdown-link-color;
-      white-space: nowrap;
-
-      label {
-        font-weight: normal;
-      }
-        
-      &, input, label {
-          &:hover {
-            cursor: pointer;
-          }
-      }
-    }
-
-    // Hover/Focus state for checkbox-rows
-    .no-touch & > .checkbox-row {
-      &:hover,
-      &:active {
-        text-decoration: none;
-        color: @dropdown-link-hover-color;
-        background-color: @dropdown-link-hover-bg;
-      }
-    }
-}
-
-//
-// Tables
-// --------------------------------------------------
-
-
-.btn-toolbar {
-    margin-bottom: @line-height-computed;
-}
-
-.lt-ie8 {
-   .btn-toolbar {
-       display: none;
-   } 
-}
-
-
-// Customize Bootstrap's .table-responsive to give it a border-radius and bigger bottom margin.
-.table-responsive {
-  border-radius: @border-radius-small;
-  border: 1px solid @table-border-color;
-  margin-bottom: @line-height-computed;
-
-  // Tighten up spacing
-  > .table {
-    margin-bottom: 0;
-  }
-
-  // Special overrides for the bordered tables
-  > .table-bordered {
-    border: 0;
-
-    // Nuke the appropriate borders so that the parent can handle them
-    > thead,
-    > tbody,
-    > tfoot {
-      > tr {
-        > th:first-child,
-        > td:first-child {
-          border-left: 0;
-        }
-        > th:last-child,
-        > td:last-child {
-          border-right: 0;
-        }
-      }
-    }
-
-    // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
-    // chances are there will be only one `tr` in a `thead` and that would
-    // remove the border altogether.
-    > tbody,
-    > tfoot {
-      > tr:last-child {
-        > th,
-        > td {
-          border-bottom: 0;
-        }
-      }
-    }
-  }
-}
-
-
-// Unlike Bootstrap's original .table-responsive, this is applied for all widths. (i.e. NOT only applied <768px)
-// Other diffs:
-// - Small border radius
-// - Bigger bottom margin
-.table-responsive[data-pattern="priority-columns"] {
-    width: 100%;
-    margin-bottom: @line-height-computed;
-    overflow-y: hidden;
-    overflow-x: auto;
-    -ms-overflow-style: -ms-autohiding-scrollbar;
-    border-radius: @border-radius-small;
-    border: 1px solid @table-border-color;
-    -webkit-overflow-scrolling: touch;
-
-    // Tighten up spacing
-    > .table {
-      margin-bottom: 0;
-
-      // Ensure the content doesn't wrap
-      > thead,
-      > tbody,
-      > tfoot {
-        > tr {
-          > th,
-          > td {
-            white-space: nowrap;
-          }
-        }
-      }
-    }
-
-    // Special overrides for the bordered tables
-    > .table-bordered {
-      border: 0;
-
-      // Nuke the appropriate borders so that the parent can handle them
-      > thead,
-      > tbody,
-      > tfoot {
-        > tr {
-          > th:first-child,
-          > td:first-child {
-            border-left: 0;
-          }
-          > th:last-child,
-          > td:last-child {
-            border-right: 0;
-          }
-        }
-      }
-
-      // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
-      // chances are there will be only one `tr` in a `thead` and that would
-      // remove the border altogether.
-      > tbody,
-      > tfoot {
-        > tr:last-child {
-          > th,
-          > td {
-            border-bottom: 0;
-          }
-        }
-      }
-
-    }
-}
-
-// for when the sticky table header is using the postition:absolute solution.
-.table-responsive.absolute-solution {
-  position: relative;
-}
-    
-// Column priority
-.mq.js .table-responsive[data-pattern="priority-columns"],
-.mq.js.lt-ie10 .sticky-table-header {
-    
-    th[data-priority="-1"],
-    td[data-priority="-1"],
-    th[data-priority="0"],
-    td[data-priority="0"],
-    td[data-priority="1"],
-    td[data-priority="1"],
-    th[data-priority="2"],
-    td[data-priority="2"],
-    th[data-priority="3"],
-    td[data-priority="3"],
-    th[data-priority="4"],
-    td[data-priority="4"],
-    th[data-priority="5"],
-    td[data-priority="5"],
-    th[data-priority="6"],
-    td[data-priority="6"] {
-       display: none;
-    }
-
-    .lt-ie9& th[data-priority="1"], 
-    .lt-ie9& td[data-priority="1"] {
-        display: inline;
-    }
-    th[data-priority="1"], 
-    td[data-priority="1"] {
-        display: table-cell;
-    }
-
-    @media screen and (min-width: 480px) {
-        .lt-ie9& th[data-priority="2"], 
-        .lt-ie9& td[data-priority="2"] {
-            display: inline;
-        }
-        th[data-priority="2"], 
-        td[data-priority="2"] {
-            display: table-cell;
-        }
-    }
-
-    @media screen and (min-width: 640px) {
-        .lt-ie9& th[data-priority="3"], 
-        .lt-ie9& td[data-priority="3"] {
-            display: inline;
-        }
-        th[data-priority="3"], 
-        td[data-priority="3"] {
-            display: table-cell;
-        }
-    }
-
-    @media screen and (min-width: 800px) {
-        .lt-ie9& th[data-priority="4"], 
-        .lt-ie9& td[data-priority="4"] {
-            display: inline;
-        }
-        th[data-priority="4"], 
-        td[data-priority="4"] {
-            display: table-cell;
-        }
-    }
-
-    @media screen and (min-width: 960px) {
-        .lt-ie9& th[data-priority="5"], 
-        .lt-ie9& td[data-priority="5"] {
-            display: inline;
-        }
-        th[data-priority="5"], 
-        td[data-priority="5"] {
-            display: table-cell;
-        }
-    }
-
-    @media screen and (min-width: 1120px) {
-        .lt-ie9& th[data-priority="6"], 
-        .lt-ie9& td[data-priority="6"] {
-            display: inline;
-        }
-        th[data-priority="6"], 
-        td[data-priority="6"] {
-            display: table-cell;
-        }
-    }
-
-    //hide cell
-    th.cell-hide,
-    td.cell-hide {
-       display: none;
-    }
-
-    //show cell
-    th.cell-show,
-    td.cell-show {
-       display: table-cell;
-    }
-
-    //show cell (ie9)
-    .lt-ie9 & th.cell-show,
-    .lt-ie9 & td.cell-show {
-       display: inline;
-    }
-
-    // display all
-    .lt-ie9 &.display-all {
-        th, td {
-            display: inline !important;
-        }
-    }
-
-    table.display-all {
-        th, td {
-            display: table-cell !important;
-        }
-    }
-}
-
-//table utility classes
-table {
-
-    &.table-small-font {
-        font-size: @font-size-small;
-        -webkit-text-size-adjust:none;
-        line-height: 1.5em;
-    }
-
-    // focus
-    &.focus-on tbody,
-    &.focus-on tfoot {
-        tr:hover {
-            cursor: pointer;
-        }
-
-        tr {
-            &.unfocused {
-                th, td { 
-                    color: @gray-light;
-                    color: rgba(0,0,0,0.4);
-                }
-            }
-            &.focused {
-                th, td { 
-                    background-color: @brand-info; 
-                    color: #000;
-                }
-            }
-        }
-    }
-}
-
-//Sticky table header
-.sticky-table-header {
-  background-color: #fff;
-  border: none;
-  border-radius: 0;
-  border-top: 1px solid @table-border-color;
-  border-bottom: 1px solid @table-border-color;
-  visibility: hidden;
-  z-index: @zindex-stickyHeader;
-  overflow: hidden;
-
-  .fixed-solution & {
-      position: fixed;
-      min-width: 0;
-  }
-
-  .absolute-solution & {
-    position: absolute;
-    min-width: 100%;
-    top: 0;
-  }
-    
-  &.border-radius-fix {
-      border-bottom-left-radius: 3px;
-      border-bottom-right-radius: 3px;
-  }
-    
-  // Tighten up spacing
-  > .table {
-    margin-bottom: 0;
-
-    // Ensure the content doesn't wrap
-    > thead,
-    > tbody,
-    > tfoot {
-      > tr {
-        > th,
-        > td {
-          white-space: nowrap;
-        }
-      }
-    }
-  }
-
-  // Special overrides for the bordered tables
-  > .table-bordered {
-    border: 0;
-
-    // Nuke the appropriate borders so that the parent can handle them
-    > thead,
-    > tbody,
-    > tfoot {
-      > tr {
-        > th:first-child,
-        > td:first-child {
-          border-left: 0;
-        }
-        > th:last-child,
-        > td:last-child {
-          border-right: 0;
-        }
-      }
-    }
-
-    // Only nuke the last row's bottom-border in `tbody` and `tfoot` since
-    // chances are there will be only one `tr` in a `thead` and that would
-    // remove the border altogether.
-    > tbody,
-    > tfoot {
-      > tr:last-child {
-        > th,
-        > td {
-          border-bottom: 0;
-        }
-      }
-    }
-
-  }
-}

+ 2 - 1
database/auth.php

@@ -141,7 +141,8 @@ return array
 				'state' => 1,
 			),
 			'type' => 'all',
-			'group' => 'project',
+			'group' => 'project,project_name',
+			'col' => 'project,project_name',
 		),
 
 		# main 取所有主栏目

+ 4 - 4
src/Database.php

@@ -1504,8 +1504,8 @@ class Database
                             }
                             }
                              */
-                            elseif ($config['state'] == 1 && (isset($vi['edit']) && $vi['edit']) || $ki == 'status')
-                            //elseif((isset($vi['edit']) && $vi['edit']))
+                            //elseif ($config['state'] == 1 && (isset($vi['edit']) && $vi['edit']) || $ki == 'status')
+                            elseif ($config['state'] == 1 && (isset($vi['edit']) && $vi['edit']))
                             {
                                 $vi['name'] = 'up_col_' . $ki;
                                 $vi['value'] = $v[$ki];
@@ -2076,7 +2076,7 @@ class Database
             $i = 0;
             $c = array();
             foreach ($input as $k => $v) {
-                if (!$v) {
+                if ($v === '') {
                     $v = 'null';
                 }
                 if ($v && is_string($v) && strpos($v, 'copy.') !== false) {
@@ -2174,7 +2174,7 @@ class Database
             if ($this->id && !$info) {
                 $update[0]['add_id'] = $this->id;
             }
-
+            //print_r($update);die;
             foreach ($update as $k => $v) {
                 $method = 'insert';
                 $old = array();

+ 7 - 2
src/Node.php

@@ -5,11 +5,16 @@ use Dever;
 
 class Node
 {
+	# 测试plugin
+	public function get_api($call, $id)
+	{
+		return $call . '_' . $id;
+	}
+
 	public function update()
 	{
 		$data = $this->load();
-		foreach($data as $k => $v)
-		{
+		foreach ($data as $k => $v) {
 			$this->push($v);
 		}
 		

+ 3 - 0
template/default/home.php

@@ -1,4 +1,5 @@
 <?php
+
 /*
 |--------------------------------------------------------------------------
 | home
@@ -6,6 +7,8 @@
  */
 $view
 
+//->jq('.fixed-left')->attr('d', '公告') 后续支持
+
 ->fetch('.fixed-left@test', '公告')
 
 ->fetch('body@class', 'theme-<{Dever::load("manage/auth.config#template")}>')