addFood.jsp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  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/units.js"></script>
  8. <script type="text/javascript" src="static/basicFoodEditor.js"></script>
  9. <script type="text/javascript" src="static/searchBar.js"></script>
  10. <script type="text/javascript" src="static/paginatedTable.js"></script>
  11. <script type="text/javascript" src="static/Food.js"></script>
  12. <script type="text/javascript">
  13. var app = angular.module('ingredients', [
  14. 'ndbDatabase', 'ui.bootstrap', 'Food', 'ieat.ui', 'ieat.ui.editors']);
  15. // TODO: Disable debug info in prod version
  16. app.controller('SearchController', [
  17. '$scope', '$uibModal', 'NDBSearch', 'NDBFood', 'BasicFood',
  18. function($scope, $uibModal, NDBSearch, NDBFood, BasicFood) {
  19. $scope.searchResults = [];
  20. $scope.searchFn = function(searchTerm) {
  21. NDBSearch.get({
  22. "key": "${ndbKey}",
  23. "query": searchTerm
  24. }, function(data) {
  25. $scope.searchResults = data;
  26. }, function (err) {
  27. // TODO: Actual error handling
  28. console.error(err);
  29. });
  30. };
  31. var modalCtrl = [
  32. '$scope', '$uibModalInstance', 'food',
  33. function($scope, $uibModalInstance, food) {
  34. $scope.food = food;
  35. $scope.submit = $uibModalInstance.close;
  36. $scope.dismiss = $uibModalInstance.dismiss;
  37. }];
  38. var promptWindow = function(item) {
  39. var foodRequest = NDBFood.get({
  40. "key": "${ndbKey}",
  41. "ndbno": item.ndbno,
  42. "type": "f"
  43. }).$promise.then(function(data) {
  44. return BasicFood.fromNdb(data);
  45. }, function (err) {
  46. // TODO: Proper error handling
  47. console.error(err);
  48. });
  49. $uibModal.open({
  50. // TODO: Figure out what these are and how they work
  51. //ariaLabelledBy: 'modal-title',
  52. //ariaDescribedBy: 'modal-body',
  53. templateUrl: "modal",
  54. resolve: {
  55. food: function() {return foodRequest;}
  56. },
  57. controller: modalCtrl,
  58. size: "md"
  59. }).result.then(function(food) {
  60. food.$save(null, function(err) {
  61. // TODO: Error handling
  62. console.error(err);
  63. });
  64. }, function(reason) {
  65. console.debug(reason);
  66. });
  67. };
  68. $scope.table = [{
  69. defaultValue: "Add",
  70. onClick: promptWindow,
  71. size: 1
  72. }, {
  73. name: "NDB #",
  74. col: "ndbno",
  75. size: 1
  76. }, {
  77. name: "Name",
  78. col: "name",
  79. size: 6
  80. }, {
  81. name: "Group",
  82. col: "group"
  83. }, {
  84. name: "Manufacturer",
  85. col: "manu"
  86. }];
  87. }]);
  88. </script>
  89. </jsp:attribute>
  90. <jsp:body>
  91. <div class="section container"
  92. data-ng-app="ingredients"
  93. data-ng-controller="SearchController">
  94. <h2>Ingredient Querier</h2>
  95. <div class="form-group">
  96. <label for="search">Search: </label>
  97. <search-bar id="search"
  98. data-on-change="searchFn(searchTerm);"
  99. data-delay="100">
  100. </search-bar>
  101. </div>
  102. <paginated-table data-table-data="searchResults" data-structure="table">
  103. </paginated-table>
  104. <script type="text/ng-template" id="modal">
  105. <basic-food-editor data-ndb-key="${ndbKey}" data-food="food">
  106. </basic-food-editor>
  107. <div style="width: 100%; text-align: right; padding: 0 1em 1em 0;">
  108. <button type="button"
  109. class="btn btn-success"
  110. data-ng-click="submit(food);">Submit</button>
  111. <button type="button" class="btn" data-ng-click="dismiss();">
  112. Cancel
  113. </button>
  114. </div>
  115. </script>
  116. </div>
  117. </jsp:body>
  118. </t:template>