addFood.jsp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <%@page contentType="text/html" pageEncoding="UTF-8"%>
  2. <%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
  3. <t:template>
  4. <jsp:attribute name="title">Add 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', ['ndbDatabase', 'basicFoodEditor', 'ui.bootstrap']);
  10. app.controller('SearchController', ['$scope', '$timeout', '$uibModal', 'NDBSearch', 'NDBReport',
  11. function($scope, $timeout, $uibModal, NDBSearch, NDBReport) {
  12. $scope.searchTerm = "";
  13. $scope.searchOffset = 1;
  14. $scope.searchSize = "10";
  15. $scope.searchResults = [];
  16. var searchTimeout = false;
  17. $scope.$watchGroup(['searchTerm', 'searchOffset'], function(newValues, oldValues, scope) {
  18. if (searchTimeout)
  19. {
  20. $timeout.cancel(searchTimeout);
  21. }
  22. if ($scope.searchTerm.length >= 3)
  23. {
  24. searchTimeout = $timeout(function() {//{ndb.api.key}
  25. // TODO: Replace with properties file key.
  26. NDBSearch.get({key: "CfiHcUnSf0RX0jBuqiWjDK2d2ziOmoZG15CTdhQn",
  27. "query": $scope.searchTerm
  28. }, function(data) {
  29. console.debug(data);
  30. $scope.searchResults = data;
  31. }, function (err) {
  32. console.error(err);
  33. });
  34. }, 100);
  35. }
  36. });
  37. var ndbToIeat = function(foodData) {
  38. return {
  39. ndbno: parseInt(foodData.ndbno),
  40. name: foodData.name,
  41. food_group: foodData.fg,
  42. default_unit: foodData.ru,
  43. calories_p_hundred: foodData.nutrients.find(function (nutrient) {
  44. // TODO: Replace 208 with soft-loaded value from database
  45. // 208 is the id for kCalories
  46. return nutrient.nutrient_id == 208;
  47. }).value
  48. }
  49. };
  50. $scope.promptWindow = function(ndbno) {// {ndb.api.key}
  51. var foodRequest = NDBReport.get(
  52. {// TODO: Replace with properties file key.
  53. "key": "CfiHcUnSf0RX0jBuqiWjDK2d2ziOmoZG15CTdhQn",
  54. "ndbno": ndbno,
  55. "type": "f"
  56. }).$promise.then(function(data) {
  57. return ndbToIeat(data)
  58. }, function (err) {
  59. // TODO: Proper error handling
  60. console.error(err);
  61. });
  62. $uibModal.open({
  63. // TODO: Figure out what these are and how they work
  64. //ariaLabelledBy: 'modal-title',
  65. //ariaDescribedBy: 'modal-body',
  66. templateUrl: 'static/templates/editBasicFood.html',
  67. controller: 'BasicFoodEditorController',
  68. size: "md",
  69. resolve: {
  70. foodData: function() {return foodRequest;}
  71. }
  72. });
  73. };
  74. }]);
  75. </script>
  76. </jsp:attribute>
  77. <jsp:body>
  78. <div class="section container" data-ng-app="ingredients" data-ng-controller="SearchController">
  79. <h2>Ingredient Querier</h2>
  80. <div class="form-group">
  81. <label for="search">Search: </label>
  82. <input type="text" class="form-control input-sm" id="search" data-ng-model="searchTerm" />
  83. </div>
  84. <table class="table table-striped table-hover table-responsive">
  85. <tr>
  86. <th class="col-md-1"> </th>
  87. <th class="col-md-1">NDB #</th>
  88. <th class="col-md-6">Name</th>
  89. <th class="col-md-3">Group</th>
  90. <th class="col-md-3">Manufacturer</th>
  91. </tr>
  92. <tr data-ng-repeat="item in searchResults | limitTo:searchSize:searchSize*(searchOffset-1)"
  93. data-ng-click="item.checked = !item.checked">
  94. <th><input type="button"
  95. value="Add"
  96. class="checkbox-inline"
  97. data-ng-click="promptWindow(item.ndbno)"></th>
  98. <td>{{ ::item.ndbno }}</td>
  99. <td>{{ ::item.name }}</td>
  100. <td>{{ ::item.group }}</td>
  101. <td>{{ ::item.manu }}</td>
  102. </tr>
  103. </table>
  104. <div class="form-group col-xs-5">
  105. <ul class="pagination-sm"
  106. style="margin: 0;"
  107. data-uib-pagination=""
  108. data-boundary-links="true"
  109. force-ellipses="true"
  110. data-total-items="searchResults.length"
  111. data-ng-model="searchOffset"
  112. data-items-per-page="searchSize"></ul>
  113. </div>
  114. <div class="form-group form-group-sm col-xs-2 pull-right">
  115. <select id="sizeSelector" class="form-control input-sm" data-ng-model="searchSize">
  116. <option>10</option>
  117. <option>20</option>
  118. <option>30</option>
  119. <option>40</option>
  120. </select>
  121. </div>
  122. </div>
  123. </jsp:body>
  124. </t:template>