<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script data-require="angularjs@1.5.0" data-semver="1.5.0" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.2/angular.js"></script>
<script data-require="jquery@1.9.1" data-semver="1.9.1" src="https://code.jquery.com/jquery-1.9.1.js"></script>
<script src="angular-responsive-tables.min.js"></script>
<link rel="stylesheet" href="angular-responsive-table.css" />
<script src="script.js"></script>
<!-- TastyTable -->
<link rel="stylesheet" href="http://zizzamia.com/ng-tasty/bower_components/bootstrap/dist/css/bootstrap.css">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<script src="http://zizzamia.com/ng-tasty/bower_components/ng-tasty/ng-tasty-tpls.js"></script>
<script src="angular-responsive-tables.min.js"></script>
<link rel="stylesheet" href="angular-responsive-table.css" />
</head>
<body ng-controller="MainCtrl">
<!--<div tasty-table bind-resource="resource">-->
<div tasty-table bind-resource-callback="getResource" bind-init="init">
<table wt-responsive-table class="table table-striped table-condensed">
<thead>
<tr>
<th ng-repeat="h in header.columns">{{h.name | uppercase }}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="row in rows">
<!-- <td>{{ row.ID }}</td> -->
<td>
<span action-button color="btn-success" itemid="row.ID" type="'recipe'"></span>
</td>
<td>{{ row.Name }}</td>
<td>{{ row.Basename }}</td>
<td>{{ row.Menge}}</td>
<td>
<uib-progressbar type="{{row._TYPE}}" value="(row.Restmenge / row.Menge) * 100">{{ row.Restmenge }}</uib-progressbar>
</td>
<td>{{ row.Nikotin }}mg</td>
<td>{{ row.Reifezeit }} {{ 'DAYS'}}</td>
<td>{{ row.Preis | currency }}</td>
<td>{{ row.Herstellungsdatum }}</td>
<td>{{ row.Benutzer }}</td>
<!-- <td>{{ row.Bewertung }}</td> -->
<!-- <td>{{ row.Eigenschaften }}</td> -->
</tr>
</tbody>
</table>
<div tasty-pagination bind-list-items-per-page="listItemsPerPage"></div>
</div>
</body>
</html>
// Code goes here
var app = angular.module('myApp',['wt.responsive', 'ngTasty']) ;
app.factory("Data", ['$http',
function ($http) { // This service connects to our REST API
var serviceBase = '';
var obj = {};
obj.get = function (q, object) {
return $http.get(serviceBase + q).then(function (results) {
return results.data;
});
};
return obj;
}]);
function MainCtrl ($scope, Data){
$scope.init = {
'count': 10,
'page': 1,
'sortBy': 'name',
'sortOrder': 'dsc'
};
$scope.getResource = function(params, paramsObj) {
return Data.get('recipes.json').then(function(results) {
return {
'rows': results.rows,
'header': results.header,
'pagination': results.pagination[0]
}
});
}
}
angular
.module('myApp')
.controller('MainCtrl',MainCtrl);
/* original: http://css-tricks.com/responsive-data-tables/ */
.responsive {
width: 100%;
border-collapse: collapse;
}
@media only screen and (max-width: 800px) {
/* Force table to not be like tables anymore */
/* table.responsive,*/
.responsive thead,
.responsive tbody,
.responsive tr,
.responsive th {
display: block;
}
/* Hide table headers (but not display: none;, for accessibility) */
.responsive thead tr, .responsive th {
position: absolute;
top: -9999px;
left: -9999px;
}
.responsive tr {
border: 1px solid #ccc;
}
.responsive td:nth-child(odd), .responsive td:nth-child(even) {
/* Behave like a "row" */
border: none;
border-bottom: 1px solid #eee;
position: relative;
padding-left: 50%;
white-space: normal;
text-align: left;
display: block;
-webkit-box-sizing: content-box;
-moz-box-sizing: content-box;
box-sizing: content-box;
min-height: 1em;
}
.responsive td:nth-child(odd)::before, .responsive td:nth-child(even)::before {
/* Now like a table header */
position: absolute;
/* Top/left values mimic padding */
left: 6px;
width: 45%;
padding-right: 10px;
-ms-word-wrap: break-word;
word-wrap: break-word;
text-align: left;
font-weight: bold;
/*
Label the data
*/
content: attr(data-title);
}
.responsive td.responsive-omit-title:nth-child(odd), .responsive td.responsive-omit-title:nth-child(even) {
padding-left: 6px;
}
.responsive td.responsive-omit-title::before {
display: none;
}
.responsive td.responsive-omit-if-empty:empty {
display: none;
}
}
// https://github.com/awerlang/angular-responsive-tables
!function(){"use strict";function getHeaders(element){return element.querySelectorAll("tr > th")}function updateTitle(td,th){var title=th&&th.textContent;!title||!td.getAttributeNode("data-title-override")&&td.getAttributeNode("data-title")||(td.setAttribute("data-title",title),td.setAttribute("data-title-override",title))}function colspan(td){var colspan=td.getAttributeNode("colspan");return colspan?parseInt(colspan.value):1}function wtResponsiveTable(){return{restrict:"A",controller:function($element){return{getHeader:function(td){var firstHeader=td.parentElement.querySelector("th");if(firstHeader)return firstHeader;var headers=getHeaders($element[0]);if(headers.length){var row=td.parentElement,headerIndex=0,found=Array.prototype.some.call(row.querySelectorAll("td"),function(value,index){return value===td?!0:void(headerIndex+=colspan(value))});return found?headers.item(headerIndex):null}}}},compile:function(element,attrs){attrs.$addClass("responsive");var headers=getHeaders(element[0]);if(headers.length){var rows=element[0].querySelectorAll("tbody > tr");Array.prototype.forEach.call(rows,function(row){var headerIndex=0;Array.prototype.forEach.call(row.querySelectorAll("td"),function(value,index){var th=value.parentElement.querySelector("th")||headers.item(headerIndex);updateTitle(value,th),headerIndex+=colspan(value)})})}}}}function wtResponsiveDynamic(){return{restrict:"E",require:"^^wtResponsiveTable",link:function(scope,element,attrs,tableCtrl){setTimeout(function(){Array.prototype.forEach.call(element[0].parentElement.querySelectorAll("td"),function(td){var th=tableCtrl.getHeader(td);updateTitle(td,th)})},0)}}}angular.module("wt.responsive",[]).directive("wtResponsiveTable",[wtResponsiveTable]).directive("td",[wtResponsiveDynamic])}();
{
"header": [
{
"key": "action",
"name": ""
},
{
"key": "Name",
"name": "Name"
},
{
"key": "Basename",
"name": "Basename"
},
{
"key": "Menge",
"name": "Menge"
},
{
"key": "Restmenge",
"name": "Restmenge"
},
{
"key": "Nikotin",
"name": "Nikotin"
},
{
"key": "Reifezeit",
"name": "Reifezeit"
},
{
"key": "Preis",
"name": "Preis"
},
{
"key": "Herstellungsdatum",
"name": "Herstellungsdatum"
},
{
"key": "Benutzer",
"name": "Benutzer"
}
],
"rows": [
{
"ID": "87",
"Name": "Harmonic Pistachio",
"Basename": "100ml - 12mg VPG 55-35",
"Menge": "50.00",
"Restmenge": "44.00",
"Nikotin": "12",
"Reifezeit": "5",
"Preis": "4.48",
"Herstellungsdatum": "2016-08-07 10:46:54",
"Benutzer": "Dampfer-Tools",
"_TYPE": "succes"
},
{
"ID": "96",
"Name": "testffff",
"Basename": "100ml - 12mg VPG 50-50",
"Menge": "50.00",
"Restmenge": "50.00",
"Nikotin": "12",
"Reifezeit": "10",
"Preis": "2.16",
"Herstellungsdatum": "2016-08-29 21:45:21",
"Benutzer": "Disane",
"_TYPE": "succes"
}
],
"pagination": [
{
"size": "4",
"count": 10,
"pages": 0,
"page": 1
}
]
}