browseFood.jsp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  2. <%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
  3. <t:template>
  4. <jsp:attribute name="title">Manage Food</jsp:attribute>
  5. <jsp:attribute name="head">
  6. <script type="text/javascript" src="static/ndbDatabase.js"></script>
  7. <script type="text/javascript" src="static/basicFoodEditor.js"></script>
  8. <script type="text/javascript">
  9. var app = angular.module('ingredients', ['basicFoodEditor', 'ui.bootstrap']);
  10. app.controller('SearchController', ['$scope', '$timeout', '$uibModal', 'BasicFood',
  11. function($scope, $timeout, $uibModal, BasicFood) {
  12. $scope.searchTerm = "";
  13. $scope.searchOffset = 1;
  14. $scope.searchSize = "10";
  15. $scope.searchResults = BasicFood.query();
  16. var searchTimeout = false;
  17. var searchFn = function() {
  18. BasicFood.query({
  19. "query": $scope.searchTerm
  20. }, function(data) {
  21. console.debug(data);
  22. $scope.searchResults = data;
  23. }, function (err) {
  24. console.error(err);
  25. });
  26. };
  27. $scope.$watchGroup(['searchTerm', 'searchOffset'], function(newValues, oldValues, scope) {
  28. if (searchTimeout)
  29. {
  30. $timeout.cancel(searchTimeout);
  31. }
  32. if ($scope.searchTerm.length >= 3)
  33. {
  34. searchTimeout = $timeout(searchFn, 100);
  35. }
  36. });
  37. $scope.promptWindow = function(id) {
  38. var item = $scope.searchResults.find(function (canidate) {
  39. return canidate.id == id;
  40. });
  41. $uibModal.open({
  42. // TODO: Figure out what these are and how they work
  43. //ariaLabelledBy: 'modal-title',
  44. //ariaDescribedBy: 'modal-body',
  45. templateUrl: 'static/templates/editBasicFood.html',
  46. controller: 'BasicFoodEditorController',
  47. size: "md",
  48. resolve: {
  49. foodData: function() {return item;}
  50. }
  51. }).result.then(searchFn);
  52. };
  53. }]);
  54. </script>
  55. </jsp:attribute>
  56. <jsp:body>
  57. <div class="section container" data-ng-app="ingredients" data-ng-controller="SearchController">
  58. <h2>Ingredients</h2>
  59. <div class="form-group">
  60. <label for="search">Search: </label>
  61. <input type="text" class="form-control input-sm" id="search" data-ng-model="searchTerm" />
  62. </div>
  63. <table class="table table-striped table-hover table-responsive">
  64. <tr>
  65. <th class="col-md-1"> </th>
  66. <th class="col-md-6">Name</th>
  67. <th class="col-md-3">Group</th>
  68. <th class="col-md-3">Calories</th>
  69. </tr>
  70. <tr data-ng-repeat="item in searchResults | limitTo:searchSize:searchSize*(searchOffset-1)"
  71. data-ng-click="item.checked = !item.checked">
  72. <th><input type="button"
  73. value="Edit"
  74. class="checkbox-inline"
  75. data-ng-click="promptWindow(item.id)"></th>
  76. <td>{{ ::item.name }}</td>
  77. <td>{{ ::item.food_group }}</td>
  78. <td>{{ ::item.calories_p_100 }}</td>
  79. </tr>
  80. </table>
  81. <div class="form-group col-xs-5">
  82. <ul class="pagination-sm"
  83. style="margin: 0;"
  84. data-uib-pagination=""
  85. data-boundary-links="true"
  86. force-ellipses="true"
  87. data-total-items="searchResults.length"
  88. data-ng-model="searchOffset"
  89. data-items-per-page="searchSize"></ul>
  90. </div>
  91. <div class="form-group form-group-sm col-xs-2 pull-right">
  92. <select id="sizeSelector" class="form-control input-sm" data-ng-model="searchSize">
  93. <option>10</option>
  94. <option>20</option>
  95. <option>30</option>
  96. <option>40</option>
  97. </select>
  98. </div>
  99. </div>
  100. </jsp:body>
  101. </t:template>