browseFood.jsp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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/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">
  12. var app = angular.module('ingredients', ['ui.bootstrap', 'Food', 'ieat.ui', 'ieat.ui.editors']);
  13. app.controller('SearchController', ['$scope', '$timeout', '$uibModal', 'Food', 'BasicFood', 'Recipe',
  14. function($scope, $timeout, $uibModal, Food, BasicFood, Recipe) {
  15. $scope.searchFn = function(searchTerm) {
  16. if (searchTerm) {
  17. this.searchTerm = searchTerm;
  18. }
  19. Food.query({
  20. "query": this.searchTerm
  21. }, function(data) {
  22. $scope.searchResults = data;
  23. }, function (err) {
  24. // TODO: Actual error handling
  25. console.error(err);
  26. })
  27. };
  28. $scope.searchFn("");
  29. var modalCtrl = ['$scope', '$uibModalInstance', 'food', function($scope, $uibModalInstance, food) {
  30. $scope.food = food;
  31. $scope.submit = $uibModalInstance.close;
  32. $scope.dismiss = $uibModalInstance.dismiss;
  33. }];
  34. var promptWindow = function(item) {
  35. $uibModal.open({
  36. // TODO: Figure out what these are and how they work
  37. //ariaLabelledBy: 'modal-title',
  38. //ariaDescribedBy: 'modal-body',
  39. templateUrl: "modal",
  40. resolve: {
  41. food: function() {return item.cast();}
  42. },
  43. controller: modalCtrl,
  44. size: "md"
  45. }).result.then(function(food) {
  46. food.$save(function() {
  47. $scope.searchFn();
  48. }, function(err) {
  49. // TODO: Error handling
  50. console.error(err);
  51. });
  52. }, function(reason) {
  53. if (reason == "delete") {
  54. item.$delete(function() {
  55. $scope.searchFn();
  56. }, function(err) {
  57. // TODO: Error handling
  58. console.error(err);
  59. });
  60. }
  61. else {
  62. console.debug("Dismissed");
  63. }
  64. });
  65. };
  66. $scope.table = [{
  67. defaultValue: "Edit",
  68. onClick: function(item) {
  69. if (item.type == "BasicFood") {
  70. promptWindow(item);
  71. }
  72. else {
  73. window.location = "/ieat-2.0.0/addRecipe?id=" +
  74. item.id;
  75. }
  76. },
  77. size: 1
  78. }, {
  79. name: "Name",
  80. col: "name",
  81. size: 6
  82. }, {
  83. name: "Group",
  84. col: "food_group"
  85. }, {
  86. name: "Calories",
  87. col: "calories_p_100"
  88. }
  89. ];
  90. }]);
  91. </script>
  92. </jsp:attribute>
  93. <jsp:body>
  94. <div class="section container" data-ng-app="ingredients" data-ng-controller="SearchController">
  95. <h2>Ingredients</h2>
  96. <div class="form-group">
  97. <label for="search">Search: </label>
  98. <search-bar id="search" data-on-change="searchFn(searchTerm);" data-delay="100" />
  99. </div>
  100. <paginated-table data-table-data="searchResults" data-structure="table">
  101. </paginated-table>
  102. <script type="text/ng-template" id="modal">
  103. <basic-food-editor data-ndb-key="${ndbKey}" data-food="food"></basic-food-editor>
  104. <div style="width: 100%; text-align: right; padding-right: 1em; padding-bottom: 1em;">
  105. <button type="button"
  106. class="btn btn-success"
  107. data-ng-click="submit(food);">Submit</button>
  108. <button type="button" class="btn" data-ng-click="dismiss();">Cancel</button>
  109. <button type="button"
  110. class="btn btn-danger"
  111. data-ng-click="dismiss('delete');">Delete</button>
  112. </div>
  113. </script>
  114. </div>
  115. </jsp:body>
  116. </t:template>