diff --git a/api/index.php b/api/index.php index 7475b8e..26a54b8 100644 --- a/api/index.php +++ b/api/index.php @@ -15,6 +15,7 @@ require './routes/rules.php'; require './routes/food.php'; require './routes/decision.php'; +require './routes/nutrient.php'; // Run App $app->run(); \ No newline at end of file diff --git a/api/routes/category.php b/api/routes/category.php index 1122017..84a24cb 100644 --- a/api/routes/category.php +++ b/api/routes/category.php @@ -8,10 +8,6 @@ $q = new CategoryQuery; $cats = $q::create()->find(); - - - - $response_json = [ "status" => [ "code" => $response->getStatusCode(), @@ -19,18 +15,21 @@ ], "data" => [] ]; +//[strtolower($rule->getRank()->getName())][$rule->getNutrient()->getName()] foreach( $cats as $cat ) { - + $rules = []; $q = new CategoryRankNutrientQuery; - $requestedCatRules = $q->filterByCategoryId($cat->getId())->find(); + $requestedCatRules = $q->filterByCategoryId($cat->getId())->orderByNutrientId()->find(); foreach($requestedCatRules as $rule) { - $rules[] = [ - "nutrientName" => $rule->getNutrient()->getName(), - "nutrientId" => $rule->getNutrient()->getId(), - "operator" => $rule->getOperator(), - "threshold" => $rule->getThreshold(), - "units" => $rule->getUnits(), - "rank" => $rule->getRankId() + $rules[] = [ + "ruleId" => $rule->getId(), + "nutrientName" => $rule->getNutrient()->getName(), + "nutrientId" => $rule->getNutrient()->getId(), + "operator" => $rule->getOperator(), + "threshold" => $rule->getThreshold(), + "units" => $rule->getUnits(), + "rank" => $rule->getRankId(), + "categoryId" => $rule->getCategoryId() ]; } @@ -38,11 +37,14 @@ $response_json["data"][] = [ "id" => $cat->getId(), "name" => $cat->getName(), - "rules" => $rules + "rules" => [$rules] ]; + } + $response = $response->withJSON($response_json); return $response; + }); /** diff --git a/api/routes/decision.php b/api/routes/decision.php index 90d0ca0..14005aa 100644 --- a/api/routes/decision.php +++ b/api/routes/decision.php @@ -124,86 +124,135 @@ function getProductInfo($upc) { $app->get('/getDecision/{upc}/{category}', function($request, $response) { +/** Checking to see if the food is already in the DB, in which case we save lots of time **/ -// get the nutrients by UPC -$prodInfo = getProductInfo($request->getAttribute('upc')); -$nutrients = $prodInfo['response']['body']['product_list']['products'][0]['product_nutrient_list']['product_nutrients']; + $q = new FoodQuery(); + $barcode = $request->getAttribute('upc'); + $food = $q::create() + ->useRankQuery() + ->endUse() + ->useCategoryQuery() + ->endUse() + ->filterByBarcode($barcode) + ->findOne(); -// get the whittled down nutrtient info shittily -$theNuts = array(); +if($food){ + + $rank = $food->getRank(); + $category = $food->getCategory(); + + $res['rankId'] = $food->getRankId(); + $res['rankName'] = $rank->getName(); + + + $res['request']['message'] = "Did not hit Fooducate. Food already exists in DB."; -foreach ($nutrients as $nutrient) { - $theNuts[$nutrient['nutrient']['@attributes']['name']] = $nutrient['@attributes']['value']; } -// echo "

The Product has...

"; -// echo "
";
-// print_r($theNuts);
-// echo "
"; +if(!$food) { + // get the nutrients by UPC + $prodInfo = getProductInfo($request->getAttribute('upc')); + $nutrients = $prodInfo['response']['body']['product_list']['products'][0]['product_nutrient_list']['product_nutrients']; -// get the rules by category - $q = new CategoryRankNutrientQuery; -$c = new CategoryQuery(); + // get the whittled down nutrtient info shittily + $theNuts = array(); + foreach ($nutrients as $nutrient) { + $theNuts[$nutrient['nutrient']['@attributes']['name']] = $nutrient['@attributes']['value']; + } - $allRules = $q->filterByCategoryId($request->getAttribute('category'))->find(); - //$res["food"] = $prodInfo; - $res["food"]['brand'] = $prodInfo['response']['body']['product_list']['products'][0]["@attributes"]['brand']; - $res["food"]['name'] = $prodInfo['response']['body']['product_list']['products'][0]["@attributes"]['name']; + // echo "

The Product has...

"; + // echo "
";
+      // print_r($theNuts);
+      // echo "
"; - $res["request"]["categoryRuleRun"] = $c->findPk($request->getAttribute("category"))->getName(); + // get the rules by category + $q = new CategoryRankNutrientQuery; + $c = new CategoryQuery(); -//default - $res["rankId"] = 0; - $res["rankName"] = "Red"; + $allRules = $q->filterByCategoryId($request->getAttribute('category'))->find(); + //$res["food"] = $prodInfo; + $res["food"]['brand'] = $prodInfo['response']['body']['product_list']['products'][0]["@attributes"]['brand']; + $res["food"]['name'] = $prodInfo['response']['body']['product_list']['products'][0]["@attributes"]['name']; -// for each rule, evaluate ingredients - foreach($allRules as $rule) { - $nut = $rule->getNutrient()->getName(); - $operator = $rule->getOperator(); - $threshold = $rule->getThreshold(); - $presentVal = $theNuts[$nut]; + $res["request"]["categoryRuleRun"] = $c->findPk($request->getAttribute("category"))->getName(); - $pass = 0; - switch($operator) { - case "lte": - $pass = ($presentVal <= $threshold); - break; + //default + $res["rankId"] = 3; + $res["rankName"] = "Red"; - case "lt": - $pass = ($presentVal < $threshold); - break; + // for each rule, evaluate ingredients + foreach($allRules as $rule) { + $nut = $rule->getNutrient()->getName(); + $operator = $rule->getOperator(); + $threshold = $rule->getThreshold(); + $presentVal = $theNuts[$nut]; - case "gt": - $pass = ($presentVal > $threshold); - break; - case "gte": - $pass = ($presentVal >= $threshold); - break; + $pass = 0; + switch($operator) { + case "lte": + $pass = ($presentVal <= $threshold); + break; - case "is": - $pass = ($presentVal == $threshold); - break; - } + case "lt": + $pass = ($presentVal < $threshold); + break; + case "gt": + $pass = ($presentVal > $threshold); + break; - $rules[$rule->getRank()->getName()][$rule->getNutrient()->getName()] = [ - "operator" => $operator, - "threshold" => $threshold, - "passed" => $pass?"true" : "false" - ]; + case "gte": + $pass = ($presentVal >= $threshold); + break; - $rules[$rule->getRank()->getName()]['passedRank'] = $pass?"true" : "false"; + case "is": + $pass = ($presentVal == $threshold); + break; + } - if($pass) { - $res["rankId"] = $rule->getRank()->getId(); - $res["rankName"] = $rule->getRank()->getName(); - } - } + $rules[$rule->getRank()->getName()][$rule->getNutrient()->getName()] = [ + "operator" => $operator, + "threshold" => $threshold, + "passed" => $pass?"true" : "false" + ]; + + $rules[$rule->getRank()->getName()]['passedRank'] = $pass?"true" : "false"; + + if($pass) { + $res["rankId"] = $rule->getRank()->getId(); + $res["rankName"] = $rule->getRank()->getName(); + } + } + + + /** Now create this Food with the associated rank and category **/ + + $newFood = new Food; + + $newFoodCat = $request->getAttribute('category'); + + $newFoodRank = $res['rankId']; + + $newFood->setRankId($newFoodRank); + $newFood->setCategoryId($newFoodCat); + $newFood->setBarcode($barcode); + $newFood->setName($res["food"]['brand']." " .$res["food"]['name']); + + + if($newFood->save()){ + $msg = "New Food also added to DB."; + } else { + $msg = "There was an error saving this new Food to the DB"; + } + + $res['request']['message'] = $msg; + +} // echo "

The rules expected...

"; // echo "
";
diff --git a/api/routes/nutrient.php b/api/routes/nutrient.php
new file mode 100644
index 0000000..2926551
--- /dev/null
+++ b/api/routes/nutrient.php
@@ -0,0 +1,25 @@
+get('/nutrient/all', function( $request, $response ) {
+  $q = new NutrientQuery;
+  $nuts = $q::create()->find();
+
+  $response_json = [
+    "status" => [
+      "code" => $response->getStatusCode(),
+      "message" => "OK"
+    ],
+    "data" => []
+  ];
+//[strtolower($rule->getRank()->getName())][$rule->getNutrient()->getName()]
+  foreach( $nuts as $nut ) {
+    $response_json["data"][] = [
+      "id" => $nut->getId(),
+      "name" => $nut->getName(),
+    ];
+
+  }
+
+  $response = $response->withJSON($response_json);
+  return $response;
+
+});
\ No newline at end of file
diff --git a/api/routes/rules.php b/api/routes/rules.php
index 0b81736..83b1d1e 100644
--- a/api/routes/rules.php
+++ b/api/routes/rules.php
@@ -14,12 +14,14 @@
 
   foreach($requestedCatRules as $rule) {
     $response_json["data"][] = [
+      "ruleId" => $rule->getId(),
       "nutrientName" => $rule->getNutrient()->getName(),
       "nutrientId" => $rule->getNutrient()->getId(),
       "operator" => $rule->getOperator(),
       "threshold" => $rule->getThreshold(),
       "units" => $rule->getUnits(),
-      "rank" => $rule->getRankId()
+      "rank" => $rule->getRankId(),
+      "categoryId" => $rule->getCategoryId()
     ];
   }
 
diff --git a/app/app.js b/app/app.js
index bb19e5f..d877d41 100644
--- a/app/app.js
+++ b/app/app.js
@@ -6,7 +6,8 @@ var app = angular.module('app', ['ngRoute', 'ngResource', 'ngCookies']);
 // Factories
 
 app.factory('Foods', function($resource) {
-  return $resource('assets/json/foods.json');
+  return $resource('http://foodbank.develop.digitalmediauconn.org/api/food/all');
+  // return $resource('assets/json/foods.json');
 });
 
 app.factory('FoodDetail', function($resource) {
@@ -16,11 +17,11 @@ app.factory('FoodDetail', function($resource) {
 });
 
 app.factory('Categories', function($resource) {
-  return $resource('assets/json/categories.json');
+  return $resource('http://foodbank.develop.digitalmediauconn.org/api/index.php/category/all');
 });
 
 app.factory('Nutrients', function($resource) {
-  return $resource('assets/json/nutrients.json');
+  return $resource('http://foodbank.develop.digitalmediauconn.org/api/index.php/nutrient/all');
 });
 
 // Just does a PUT request when u call Food.update
diff --git a/app/pages/404/style.styl b/app/pages/404/style.styl
index e69de29..4182b61 100644
--- a/app/pages/404/style.styl
+++ b/app/pages/404/style.styl
@@ -0,0 +1,2 @@
+.f404
+  text-align center
diff --git a/app/pages/404/view.html b/app/pages/404/view.html
index 640e8c2..98440d6 100644
--- a/app/pages/404/view.html
+++ b/app/pages/404/view.html
@@ -1,2 +1,2 @@
 
-

You've reached pages/404/view.html by going to an invalid link.

+

404 Page not found

diff --git a/app/pages/categories/anotherCtrl.js b/app/pages/categories/anotherCtrl.js deleted file mode 100644 index e69de29..0000000 diff --git a/app/pages/categories/ctrl.js b/app/pages/categories/ctrl.js index 41a927d..c3b8dbe 100644 --- a/app/pages/categories/ctrl.js +++ b/app/pages/categories/ctrl.js @@ -1,6 +1,6 @@ function GetRanks() { - return ['green', 'yellow']; + return [{name: 'green', id: 1}, {name: 'yellow', id: 2}]; } function GetNutrients() { @@ -15,14 +15,9 @@ function GetOperations() { {name: 'e', symbol: 'Equal To'}]; } -function SaveData(categories) { - console.log('save'); -} - -app.controller('CategoryCtrl', ['$scope', 'Categories', function ($scope, Categories) { +app.controller('CategoryCtrl', ['$scope', '$http', 'Categories', 'Nutrients', function ($scope, $http, Categories, Nutrients) { $scope.page.title = 'Categories'; $scope.page.id = 'cat'; - $scope.page.yourVar = "globalStuff"; // GET list of categories @@ -31,9 +26,16 @@ app.controller('CategoryCtrl', ['$scope', 'Categories', function ($scope, Catego }); $scope.ranks = GetRanks(); - $scope.nutrients = GetNutrients(); + + $scope.units = ['mg', 'g']; + + Nutrients.get({}, function(data) { + $scope.nutrients = data.data; + }); + $scope.operations = GetOperations(); + $scope.getCategoryIndexFromName = function(categoryName) { for(var i = 0; i < $scope.categories.length; i++) { if($scope.categories[i].name == categoryName) { @@ -46,28 +48,30 @@ app.controller('CategoryCtrl', ['$scope', 'Categories', function ($scope, Catego $scope.addRule = function(categoryName) { var categoryIndex = $scope.getCategoryIndexFromName(categoryName); if(categoryIndex != -1) { - $scope.categories[categoryIndex].rules.push({ nutrient: 'sugar', - rule_id: '0', - ranks: [ { name: 'green', operation: 'lt', value: 5 }, - { name: 'yellow', operation: 'gt', value: 2 } ] }); + $scope.categories[categoryIndex].rules[0].push({ + ruleId: 0, + nutrientName: $scope.nutrients[0].name, + nutrientId: $scope.nutrients[0].id, + operator: "lte", + threshold: 10, + units: "mg", + rank: 1, + categoryId: categoryIndex + }); } }; $scope.removeRule = function(category, rule) { - for(var i = 0; i < category.rules.length; i++) { - if(category.rules[i] == rule) { - category.rules.splice(i, 1); + for(var i = 0; i < category.rules[0].length; i++) { + if(category.rules[0][i] == rule) { + category.rules[0].splice(i, 1); } } }; $scope.addCategory = function() { - $scope.categories.push({name: 'New Category', rules: []}) - }; - - $scope.renameCategory = function(category, name) { - console.log(name); + //$scope.categories.push({name: 'New Category', rules: []}) }; $scope.removeCategory = function(category) { @@ -78,7 +82,7 @@ app.controller('CategoryCtrl', ['$scope', 'Categories', function ($scope, Catego } }; - $scope.saveData = function() { - SaveData($scope.categories); + $scope.saveData = function(category) { + $http.post('http://foodbank.develop.digitalmediauconn.org/api/index.php/rules/saveBatch/' + category.id, category.rules[0]); }; }]); diff --git a/app/pages/categories/view.html b/app/pages/categories/view.html index 15c172b..a2bacdb 100644 --- a/app/pages/categories/view.html +++ b/app/pages/categories/view.html @@ -1,58 +1,66 @@
-
+
  • {{ category.name }}
    -
    + +
    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    - - - - - - - - - - - - - - - -
    Nutrient{{rank}} condition
    -
    - -
    -
    -
    - -
    -
    - -
    -
    + + + +
- - +
-
+
-
By Grade
+
Health Filter
-
Table
+
Card View
diff --git a/app/root/_footer.kit b/app/root/_footer.kit index 84777ec..0b2152c 100644 --- a/app/root/_footer.kit +++ b/app/root/_footer.kit @@ -1,6 +1,6 @@ -
+ diff --git a/app/root/_nav.kit b/app/root/_nav.kit index 08b2a75..faf7041 100644 --- a/app/root/_nav.kit +++ b/app/root/_nav.kit @@ -12,16 +12,16 @@
- diff --git a/app/root/root.styl b/app/root/root.styl index f7a8c6e..c7fa4dc 100644 --- a/app/root/root.styl +++ b/app/root/root.styl @@ -27,7 +27,7 @@ Table of Contents: padding-right: 2em * {display: inline} i - font-size: 6rem + font-size: 4rem h4 font-size: 2.6rem font-weight: 500 diff --git a/assets/css/main.css b/assets/css/main.css index 8219112..2c77d20 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -36,6 +36,9 @@ ul.tabs .tab a { ul.tabs .tab a:hover { color: inherit; } +.f404 { + text-align: center; +} .collapsible-body { padding: 1em; box-sizing: border-box; @@ -86,11 +89,11 @@ select { background-color: #f5f5f5; } .grade { - padding-right: 1em; + padding-right: 2em; } @media all and (min-width: 600px) { .grade { - padding: 0 1em; + padding: 0 2em 0 0; } } .grade nav { @@ -121,6 +124,12 @@ select { [type="checkbox"]+label { padding-left: 26px; } +.table-toggle .switch { + display: flex; +} +.table-toggle label { + margin: 0 auto; +} .foods { display: flex; padding: 3em; @@ -220,6 +229,7 @@ select { padding: 1em; border: 1px solid #f0f0f0; min-width: 300px; + max-width: 500px; box-shadow: 0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12); background: #fff; } @@ -273,6 +283,7 @@ select { font-size: 1.2em; align-items: center; margin-right: 1em; + max-width: 100%; padding-right: 1em; background: #f5f5f5; transition: all 0.2s; @@ -291,10 +302,17 @@ select { flex-basis: 100px; margin-right: 1em; } +.foodTableItem .foodCat { + text-align: right; +} .foodTableItem .name { - flex-basis: 140px; + flex-grow: 1; + white-space: nowrap; + text-overflow: ellipsis; + overflow-y: hidden; } .foodTableItem .barcode { + flex-basis: 117px; color: #888; font-size: 1rem; text-align: right; @@ -388,7 +406,7 @@ h1.nutrientsTitle { display: inline; } .nav-main .logo-area i { - font-size: 6rem; + font-size: 4rem; } .nav-main .logo-area h4 { font-size: 2.6rem; diff --git a/assets/js/bundle.js b/assets/js/bundle.js index 43cd678..ab81d6b 100644 --- a/assets/js/bundle.js +++ b/assets/js/bundle.js @@ -6,7 +6,8 @@ var app = angular.module('app', ['ngRoute', 'ngResource', 'ngCookies']); // Factories app.factory('Foods', function($resource) { - return $resource('assets/json/foods.json'); + return $resource('http://foodbank.develop.digitalmediauconn.org/api/food/all'); + // return $resource('assets/json/foods.json'); }); app.factory('FoodDetail', function($resource) { @@ -16,11 +17,11 @@ app.factory('FoodDetail', function($resource) { }); app.factory('Categories', function($resource) { - return $resource('assets/json/categories.json'); + return $resource('http://foodbank.develop.digitalmediauconn.org/api/index.php/category/all'); }); app.factory('Nutrients', function($resource) { - return $resource('assets/json/nutrients.json'); + return $resource('http://foodbank.develop.digitalmediauconn.org/api/index.php/nutrient/all'); }); // Just does a PUT request when u call Food.update @@ -153,100 +154,14 @@ app.controller('404Ctrl', ['$scope', function ($scope) { $scope.var2 = "localStuff"; }]); - - -function GetRanks() { - return ['green', 'yellow']; -} - -function GetNutrients() { - return ['sodium', 'sugar', 'satfat']; -} - -function GetOperations() { - return [{name: 'lt', symbol: 'Less Than'}, - {name: 'lte', symbol: 'Less Than or Equal'}, - {name: 'gt', symbol: 'Greater Than'}, - {name: 'gte', symbol: 'Greater Than or Equal'}, - {name: 'e', symbol: 'Equal To'}]; -} - -function SaveData(categories) { - console.log('save'); -} - -app.controller('CategoryCtrl', ['$scope', 'Categories', function ($scope, Categories) { - $scope.page.title = 'Categories'; - $scope.page.id = 'cat'; - $scope.page.yourVar = "globalStuff"; - - - // GET list of categories - Categories.get({}, function (data) { - $scope.categories = data.data; - }); - - $scope.ranks = GetRanks(); - $scope.nutrients = GetNutrients(); - $scope.operations = GetOperations(); - - $scope.getCategoryIndexFromName = function(categoryName) { - for(var i = 0; i < $scope.categories.length; i++) { - if($scope.categories[i].name == categoryName) { - return i; - } - } - return -1; - }; - - $scope.addRule = function(categoryName) { - var categoryIndex = $scope.getCategoryIndexFromName(categoryName); - if(categoryIndex != -1) { - $scope.categories[categoryIndex].rules.push({ nutrient: 'sugar', - rule_id: '0', - ranks: [ { name: 'green', operation: 'lt', value: 5 }, - { name: 'yellow', operation: 'gt', value: 2 } ] }); - } - - }; - - $scope.removeRule = function(category, rule) { - for(var i = 0; i < category.rules.length; i++) { - if(category.rules[i] == rule) { - category.rules.splice(i, 1); - } - } - }; - - $scope.addCategory = function() { - $scope.categories.push({name: 'New Category', rules: []}) - }; - - $scope.renameCategory = function(category, name) { - console.log(name); - }; - - $scope.removeCategory = function(category) { - for(var i = 0; i < $scope.categories.length; i++) { - if($scope.categories[i] == category) { - $scope.categories.splice(i, 1); - } - } - }; - - $scope.saveData = function() { - SaveData($scope.categories); - }; -}]); - app.controller('FoodCtrl', ['$scope', '$http', 'Foods', 'FoodDetail', 'Categories', '$cookies', function ($scope, $http, Foods, FoodDetail, Categories, $cookies) { $scope.page.title = 'Food'; $scope.page.id = 'food'; // Cookie for Table/Card view prefence - $scope.tableView = $cookies.get('showTable') === 'true'; - $scope.$watch('tableView', function () { - $cookies.put('showTable', $scope.tableView ? 'true' : 'false'); + $scope.cardView = $cookies.get('showTable') === 'true'; + $scope.$watch('cardView', function () { + $cookies.put('showTable', $scope.cardView ? 'true' : 'false'); }); // Initialize Filters @@ -357,6 +272,94 @@ app.controller('FoodCtrl', ['$scope', '$http', 'Foods', 'FoodDetail', 'Categorie }]); +function GetRanks() { + return [{name: 'green', id: 1}, {name: 'yellow', id: 2}]; +} + +function GetNutrients() { + return ['sodium', 'sugar', 'satfat']; +} + +function GetOperations() { + return [{name: 'lt', symbol: 'Less Than'}, + {name: 'lte', symbol: 'Less Than or Equal'}, + {name: 'gt', symbol: 'Greater Than'}, + {name: 'gte', symbol: 'Greater Than or Equal'}, + {name: 'e', symbol: 'Equal To'}]; +} + +app.controller('CategoryCtrl', ['$scope', '$http', 'Categories', 'Nutrients', function ($scope, $http, Categories, Nutrients) { + $scope.page.title = 'Categories'; + $scope.page.id = 'cat'; + + + // GET list of categories + Categories.get({}, function (data) { + $scope.categories = data.data; + }); + + $scope.ranks = GetRanks(); + + $scope.units = ['mg', 'g']; + + Nutrients.get({}, function(data) { + $scope.nutrients = data.data; + }); + + $scope.operations = GetOperations(); + + + $scope.getCategoryIndexFromName = function(categoryName) { + for(var i = 0; i < $scope.categories.length; i++) { + if($scope.categories[i].name == categoryName) { + return i; + } + } + return -1; + }; + + $scope.addRule = function(categoryName) { + var categoryIndex = $scope.getCategoryIndexFromName(categoryName); + if(categoryIndex != -1) { + $scope.categories[categoryIndex].rules[0].push({ + ruleId: 0, + nutrientName: $scope.nutrients[0].name, + nutrientId: $scope.nutrients[0].id, + operator: "lte", + threshold: 10, + units: "mg", + rank: 1, + categoryId: categoryIndex + }); + } + + }; + + $scope.removeRule = function(category, rule) { + for(var i = 0; i < category.rules[0].length; i++) { + if(category.rules[0][i] == rule) { + category.rules[0].splice(i, 1); + } + } + }; + + $scope.addCategory = function() { + //$scope.categories.push({name: 'New Category', rules: []}) + }; + + $scope.removeCategory = function(category) { + for(var i = 0; i < $scope.categories.length; i++) { + if($scope.categories[i] == category) { + $scope.categories.splice(i, 1); + } + } + }; + + $scope.saveData = function(category) { + $http.post('http://foodbank.develop.digitalmediauconn.org/api/index.php/rules/saveBatch/' + category.id, category.rules[0]); + }; +}]); + app.controller('LoginCtrl', ['$scope', 'loginService', function ($scope, loginService) { $scope.page.title = 'Login'; $scope.page.id = 'login'; diff --git a/index.html b/index.html index 80e6cfa..1420184 100644 --- a/index.html +++ b/index.html @@ -48,16 +48,16 @@
- @@ -110,11 +110,11 @@ -