Sample Kendo

HTML

<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2016.1.226/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2016.1.226/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2016.1.226/styles/kendo.material.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2016.1.226/styles/kendo.mobile.all.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2016.1.226/styles/kendo.mobile.material.min.css">
<script src="https://kendo.cdn.telerik.com/2016.1.226/js/jquery.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2016.1.226/js/kendo.all.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-kendo/0.9.7/knockout-kendo.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.2.0/require.min.js"></script>
<div data-role="view" id="list" data-title="Product List" data-layout="main-layout">
  <ul data-role="listview" data-style="inset" data-bind="kendoListView: { data: items, template: listTemplate }"></ul>

</div>

<div data-role="view" id="detail" data-title="Product Details" data-layout="detail-layout" data-show="app.showDetails">

</div>

<div data-role="view" id="cart" data-title="Cart" data-layout="main-layout">
  <div data-bind="if: items().length == 0">No items currently in cart</div>
  <ul data-role="listview" data-style="inset" data-bind="kendoListView: { data: items, template: cartTemplate }"></ul>
</div>

<div data-role="layout" data-id="main-layout">
  <header data-role="header">
    <div data-role="navbar">
      <span data-role="view-title"></span>
    </div>
  </header>

  <div data-role="footer">
    <div data-role="tabstrip">
      <a id="listTab" href="#list" data-icon="list-icon">List</a>
      <a id="cartTab" href="#cart" data-icon="cart">Cart</a>
    </div>
  </div>
</div>

<div...

CSS

* {
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}

body {
  -webkit-touch-callout: none;
  -webkit-text-size-adjust: none;
  -webkit-user-select: none;
  background-color: #E4E4E4;
  background-image: linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
  background-image: -webkit-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
  background-image: -ms-linear-gradient(top, #A7A7A7 0%, #E4E4E4 51%);
  background-image: -webkit-gradient( linear, left top, left bottom, color-stop(0, #A7A7A7), color-stop(0.51, #E4E4E4));
  background-attachment: fixed;
  font-family: 'HelveticaNeue-Light', 'HelveticaNeue', Helvetica, Arial, sans-serif;
  font-size: 12px;
  height: 100%;
  margin: 0px;
  padding: 0px;
  text-transform: uppercase;
  width: 100%;
}

.km-list-icon:after,
.km-list-icon:before {
  content: "\e077";
}

.km-back-icon:after,
.km-back-icon:before {
  content: "\e013";
}

.product-container {
  border-bottom: solid 1px #3f51b5;
}

.product-description {
  display: inline-block;
  vertical-align: top;
  margin-top: 20px;
}

.product-description p {
  margin: 5px;
}

img {
  display: block;
  margin: 0 auto;
  max-width: 100%;
}

.product-image {
  display: inline-block;
  height: 100px;
  width: 20%;
  position: relative;
  margin-right: 20px;
}

.product-image img {
  max-height: 100%;
  max-width: 100%;
  width: auto;
  height: auto;
  position: absolute;
  top: 0;
  bottom: 0;
  margin: auto;
}

.km-material .km-justified {
  display: block;
  width: 100% padding: .85em;
  font-size: 1.07em 1.25em;
  background-color: #3f51b5;
  border-color: #3f51b5;
  color: #fafafa
}

span.km-icon.km-big {
  position: absolute;
  top: 50%;
  right: 30px;
  margin-top: -10px;
  font-size: 20px;
}

JavaScript

var kApp;
var globalKo = {};
var currentProductId = 0;
app = {
  onDeviceReady: function() {
    app.initList();
    app.initCart();
    kApp = new kendo.mobile.Application($(document.body), {
      skin: 'material',
      statusBarStyle: 'black-translucent',
      useNativeScrolling: true
    });
  },
  initList: function() {
    $.getJSON('https://cartservices.herokuapp.com/api/product', function(data) {
      ko.applyBindings(new app.models.ListViewModel(data), $('#list')[0]);
    });
  },
  initCart: function() {
    ko.applyBindings(new app.models.CartViewModel(), $('#cart')[0]);
  },
  showDetails: function(e) {
    var view = e.view,
      item;
    var template = kendo.template($('#detailTemplate').html());
    var item = globalKo.listItems().filter(function(element) {
      return element.Id == currentProductId;
    })[0];
    view.content.html(template(item));
    kendo.mobile.init(view.content);
    $('#buyButton').click(function() {
      app.addToCart(item.Id);
    })
  },
  saveCart: function() {
    localStorage.setItem('cart', ko.toJSON(globalKo.cartItems));
  },
  addToCart: function(productId) {
    var cartItem = globalKo.cartItems().filter(function(element) {
      return element.Id == productId;
    });
    if (cartItem && cartItem.length > 0) {
      cartItem[0].quantity++;
    } else {
      var product = globalKo.listItems().filter(function(element) {
        return element.Id == productId;
      })[0];
      product.quantity = 1;
      globalKo.cartItems.push(product);
    }
    app.saveCart();
    globalKo.cartItems.valueHasMutated();
  },
  models: {
    CartViewModel: function() {
      var self = this;
      globalKo.cartItems = self.items = ko.observableArray(JSON.parse(localStorage.getItem('cart')) || []);
      self.cartTemplate = kendo.template($('#cartListTemplate').html());
      self.removeItem = function(vm, event) {
        var element = $(event.target).parents('div.cart-item-container');
        productId =...