addFood.jsp 4.5 KB

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