From a4ebf90586fc6b439dd7a325d79eb8409247bedf Mon Sep 17 00:00:00 2001 From: Martin Donnelly Date: Sat, 21 Mar 2020 21:22:12 +0000 Subject: [PATCH] Added new note type Better authentication --- .../{app.65ce66e5.css => app.5fa0b293.css} | 2 +- dist/index.html | 2 +- dist/js/app.53dc46ec.js | 2 + dist/js/app.53dc46ec.js.map | 1 + dist/js/app.a4f9d1d7.js | 2 - dist/js/app.a4f9d1d7.js.map | 1 - live/css/login.css | 5 +- live/login.html | 2 + menu.db | Bin 98304 -> 0 bytes package-lock.json | 1119 ++++++++++++++++- package.json | 9 +- pug/email.jade | 10 + pug/email.pug | 10 + server.js | 34 +- server/lib/FoodObj.js | 39 + server/lib/dbmanager.js | 47 + server/lib/job.js | 61 + server/middle/checkAuth.js | 15 + server/static/login.html | 15 +- tests/db.js | 35 + 20 files changed, 1355 insertions(+), 56 deletions(-) rename dist/css/{app.65ce66e5.css => app.5fa0b293.css} (85%) create mode 100644 dist/js/app.53dc46ec.js create mode 100644 dist/js/app.53dc46ec.js.map delete mode 100644 dist/js/app.a4f9d1d7.js delete mode 100644 dist/js/app.a4f9d1d7.js.map delete mode 100644 menu.db create mode 100644 pug/email.jade create mode 100644 pug/email.pug create mode 100644 server/lib/FoodObj.js create mode 100644 server/lib/job.js create mode 100644 server/middle/checkAuth.js create mode 100644 tests/db.js diff --git a/dist/css/app.65ce66e5.css b/dist/css/app.5fa0b293.css similarity index 85% rename from dist/css/app.65ce66e5.css rename to dist/css/app.5fa0b293.css index f76be4f..5c084bb 100644 --- a/dist/css/app.65ce66e5.css +++ b/dist/css/app.5fa0b293.css @@ -1 +1 @@ -@import url(https://fonts.googleapis.com/css?family=Roboto);.recipeItem[data-v-203d6576]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:.1rem;border-bottom:1px dotted #ccc}.recipeItem[data-v-203d6576]:nth-of-type(odd){background-color:rgba(0,0,0,.04)}.listItemSix[data-v-203d6576]{-webkit-box-flex:6;-ms-flex:6;flex:6}.listItemThree[data-v-203d6576]{-webkit-box-flex:3;-ms-flex:3;flex:3}.chicken[data-v-203d6576]{background:#8e5241;color:#fff}.beef[data-v-203d6576]{background:#d72414;color:#fff}.pork[data-v-203d6576]{background:#ef96d9;color:#fff}.fish[data-v-203d6576]{background:#005ba0;color:#fff}.egg[data-v-203d6576]{background:#fbc003;color:#000}.vegetable[data-v-203d6576]{background:#00903e;color:#fff}*{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0}body{font-family:Roboto,sans-serif;font-size:1rem;line-height:1.6;background-color:#fff;color:#333}a{color:var(--primary-color);text-decoration:none}a:hover{color:#666}ul{list-style:none}img{width:100%}.dataRow{cursor:pointer}.container{max-width:1100px;margin:auto;overflow:hidden;padding:0 2rem}.x-large{font-size:4rem}.large,.x-large{line-height:1.2;margin-bottom:1rem}.large{font-size:3rem}.lead{font-size:1.5rem;margin-bottom:1rem}.text-primary{color:var(--primary-color)}.text-dark{color:var(--dark-color)}.text-success{color:var(--success-color)}.text-danger{color:var(--danger-color)}.text-center{text-align:center}.text-right{text-align:right}.text-left{text-align:left}.all-center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;margin:auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.card{padding:1rem;border:1px dotted #ccc;margin:.7rem 0}.list{margin:.5rem 0}.list li{padding-bottom:.3rem}.p{padding:.5rem}.p-1{padding:1rem}.p-2{padding:2rem}.p-3{padding:3rem}.py{padding:.5rem 0}.py-1{padding:1rem 0}.py-2{padding:2rem 0}.py-3{padding:3rem 0}.m{margin:.5rem}.m-1{margin:1rem}.m-2{margin:2rem}.m-3{margin:3rem}.my{margin:.5rem 0}.my-1{margin:1rem 0}.my-2{margin:2rem 0}.my-3{margin:3rem 0}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1rem}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1rem}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:1rem}.btn{display:inline-block;background:var(--light-color);color:#333;padding:.4rem 1.3rem;font-size:1rem;border:none;cursor:pointer;margin-right:.5rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;outline:none}.btn-link{background:none;padding:0;margin:0}.btn-block{display:block;width:100%}.btn-sm{font-size:.8rem;padding:.3rem 1rem;margin-right:.2rem}.badge{display:inline-block;font-size:.6rem;padding:.1rem .4rem;text-align:center;margin:.3rem;border-radius:3px}.alert,.badge{background:var(--light-color);color:#333}.alert{padding:.7rem;margin:1rem 0;opacity:.9}.alert-primary,.badge-primary,.bg-primary,.btn-primary{background:var(--primary-color);color:#fff}.alert-light,.badge-light,.bg-light,.btn-light{background:var(--light-color);color:#333}.alert-dark,.badge-dark,.bg-dark,.btn-dark{background:var(--dark-color);color:#fff}.alert-danger,.badge-danger,.bg-danger,.btn-danger{background:var(--danger-color);color:#fff}.alert-success,.badge-success,.bg-success,.btn-success{background:var(--success-color);color:#fff}.alert-white,.badge-white,.bg-white,.btn-white{background:#fff;color:#333;border:1px solid #ccc}.btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;-webkit-box-shadow:none;box-shadow:none}.btn:enabled:hover{opacity:.8}.badge-light,.bg-light{border:1px solid #ccc}.round-img{border-radius:50%}input{margin:1.2rem 0}.form-text{display:block;margin-top:.3rem;color:#888}input[type=date],input[type=email],input[type=password],input[type=text],select,textarea{display:block;width:100%;padding:.4rem;border:1px solid #ccc}button,input[type=submit]{font:inherit}table td,table th{padding:1rem;text-align:left}table th{background:var(--light-color)}.navbar{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.7rem 2rem;z-index:1;width:100%;opacity:.9;margin-bottom:1rem}.navbar,.navbar ul{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar a{color:#fff;padding:.45rem;margin:0 .25rem}.navbar a:hover{color:var(--light-color)}.navbar .welcome span{margin-right:.6rem}@media (max-width:700px){.hide-sm{display:none}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.x-large{font-size:3rem}.large{font-size:2rem}.lead{font-size:1rem}.navbar{display:block;text-align:center}.navbar ul{text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}}:root{--primary-color:#64b5f6;--dark-color:#333;--light-color:#f4f4f4;--danger-color:#dc3545;--success-color:#28a745;--medium-color:#999}.table-responsive{display:block;overflow-x:auto;width:100%}.cardV2{border-radius:4px;background-color:#fff;-webkit-box-shadow:0 0 4px 0 rgba(0,0,0,.14),0 3px 4px 0 rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);box-shadow:0 0 4px 0 rgba(0,0,0,.14),0 3px 4px 0 rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);min-width:0}table{max-width:100%;width:100%;border:0;margin-bottom:1rem;border-collapse:collapse}tr{border-top:1px solid #ccc}tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.04)}tbody td{border-top:1px solid #e1e1e1}.chicken{background:#8e5241;color:#fff}.beef{background:#d72414;color:#fff}.pork{background:#ef96d9;color:#fff}.fish{background:#005ba0;color:#fff}.egg{background:#fbc003;color:#fff}.vegetable{background:#00903e;color:#fff}.filterBar{background:var(--medium-color);margin-bottom:1rem;padding:10px 5px} \ No newline at end of file +@import url(https://fonts.googleapis.com/css?family=Roboto);.recipeItem[data-v-2e90e6b6]{display:-webkit-box;display:-ms-flexbox;display:flex;padding:.1rem;border-bottom:1px dotted #ccc}.recipeItem[data-v-2e90e6b6]:nth-of-type(odd){background-color:rgba(0,0,0,.04)}.listItemSix[data-v-2e90e6b6]{-webkit-box-flex:6;-ms-flex:6;flex:6}.listItemThree[data-v-2e90e6b6]{-webkit-box-flex:3;-ms-flex:3;flex:3}.chicken[data-v-2e90e6b6]{background:#8e5241;color:#fff}.beef[data-v-2e90e6b6]{background:#d72414;color:#fff}.pork[data-v-2e90e6b6]{background:#ef96d9;color:#fff}.fish[data-v-2e90e6b6]{background:#005ba0;color:#fff}.egg[data-v-2e90e6b6]{background:#fbc003;color:#000}.vegetable[data-v-2e90e6b6]{background:#00903e;color:#fff}*{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:0}body{font-family:Roboto,sans-serif;font-size:1rem;line-height:1.6;background-color:#fff;color:#333}a{color:var(--primary-color);text-decoration:none}a:hover{color:#666}ul{list-style:none}img{width:100%}.dataRow{cursor:pointer}.container{max-width:1100px;margin:auto;overflow:hidden;padding:0 2rem}.x-large{font-size:4rem}.large,.x-large{line-height:1.2;margin-bottom:1rem}.large{font-size:3rem}.lead{font-size:1.5rem;margin-bottom:1rem}.text-primary{color:var(--primary-color)}.text-dark{color:var(--dark-color)}.text-success{color:var(--success-color)}.text-danger{color:var(--danger-color)}.text-center{text-align:center}.text-right{text-align:right}.text-left{text-align:left}.all-center{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;margin:auto;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.card{padding:1rem;border:1px dotted #ccc;margin:.7rem 0}.list{margin:.5rem 0}.list li{padding-bottom:.3rem}.p{padding:.5rem}.p-1{padding:1rem}.p-2{padding:2rem}.p-3{padding:3rem}.py{padding:.5rem 0}.py-1{padding:1rem 0}.py-2{padding:2rem 0}.py-3{padding:3rem 0}.m{margin:.5rem}.m-1{margin:1rem}.m-2{margin:2rem}.m-3{margin:3rem}.my{margin:.5rem 0}.my-1{margin:1rem 0}.my-2{margin:2rem 0}.my-3{margin:3rem 0}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:1rem}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1rem}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);grid-gap:1rem}.btn{display:inline-block;background:var(--light-color);color:#333;padding:.4rem 1.3rem;font-size:1rem;border:none;cursor:pointer;margin-right:.5rem;-webkit-transition:opacity .2s ease-in;transition:opacity .2s ease-in;outline:none}.btn-link{background:none;padding:0;margin:0}.btn-block{display:block;width:100%}.btn-sm{font-size:.8rem;padding:.3rem 1rem;margin-right:.2rem}.badge{display:inline-block;font-size:.6rem;padding:.1rem .4rem;text-align:center;margin:.3rem;border-radius:3px}.alert,.badge{background:var(--light-color);color:#333}.alert{padding:.7rem;margin:1rem 0;opacity:.9}.alert-primary,.badge-primary,.bg-primary,.btn-primary{background:var(--primary-color);color:#fff}.alert-light,.badge-light,.bg-light,.btn-light{background:var(--light-color);color:#333}.alert-dark,.badge-dark,.bg-dark,.btn-dark{background:var(--dark-color);color:#fff}.alert-danger,.badge-danger,.bg-danger,.btn-danger{background:var(--danger-color);color:#fff}.alert-success,.badge-success,.bg-success,.btn-success{background:var(--success-color);color:#fff}.alert-white,.badge-white,.bg-white,.btn-white{background:#fff;color:#333;border:1px solid #ccc}.btn:disabled{cursor:not-allowed;pointer-events:none;opacity:.6;-webkit-box-shadow:none;box-shadow:none}.btn:enabled:hover{opacity:.8}.badge-light,.bg-light{border:1px solid #ccc}.round-img{border-radius:50%}input{margin:1.2rem 0}.form-text{display:block;margin-top:.3rem;color:#888}input[type=date],input[type=email],input[type=password],input[type=text],select,textarea{display:block;width:100%;padding:.4rem;border:1px solid #ccc}button,input[type=submit]{font:inherit}table td,table th{padding:1rem;text-align:left}table th{background:var(--light-color)}.navbar{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.7rem 2rem;z-index:1;width:100%;opacity:.9;margin-bottom:1rem}.navbar,.navbar ul{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar a{color:#fff;padding:.45rem;margin:0 .25rem}.navbar a:hover{color:var(--light-color)}.navbar .welcome span{margin-right:.6rem}@media (max-width:700px){.hide-sm{display:none}.grid-2,.grid-3,.grid-4{grid-template-columns:1fr}.x-large{font-size:3rem}.large{font-size:2rem}.lead{font-size:1rem}.navbar{display:block;text-align:center}.navbar ul{text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}}:root{--primary-color:#64b5f6;--dark-color:#333;--light-color:#f4f4f4;--danger-color:#dc3545;--success-color:#28a745;--medium-color:#999}.table-responsive{display:block;overflow-x:auto;width:100%}.cardV2{border-radius:4px;background-color:#fff;-webkit-box-shadow:0 0 4px 0 rgba(0,0,0,.14),0 3px 4px 0 rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);box-shadow:0 0 4px 0 rgba(0,0,0,.14),0 3px 4px 0 rgba(0,0,0,.12),0 1px 5px 0 rgba(0,0,0,.2);min-width:0}table{max-width:100%;width:100%;border:0;margin-bottom:1rem;border-collapse:collapse}tr{border-top:1px solid #ccc}tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.04)}tbody td{border-top:1px solid #e1e1e1}.chicken{background:#8e5241;color:#fff}.beef{background:#d72414;color:#fff}.pork{background:#ef96d9;color:#fff}.fish{background:#005ba0;color:#fff}.egg{background:#fbc003;color:#fff}.vegetable{background:#00903e;color:#fff}.filterBar{background:var(--medium-color);margin-bottom:1rem;padding:10px 5px}.modalWindow{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.2);z-index:99999;opacity:0;pointer-events:none;text-align:center}.modalWindow:target{opacity:1;pointer-events:auto}.modalWindow>div{width:500px;position:relative;margin:10% auto;background:#fff} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index a9b91b1..cf5721b 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -Menus
\ No newline at end of file +Menus
\ No newline at end of file diff --git a/dist/js/app.53dc46ec.js b/dist/js/app.53dc46ec.js new file mode 100644 index 0000000..9b1ea0e --- /dev/null +++ b/dist/js/app.53dc46ec.js @@ -0,0 +1,2 @@ +(function(e){function t(t){for(var a,o,s=t[0],c=t[1],u=t[2],d=0,m=[];d0){var v=m.map((function(e){return e[0].toLowerCase()}));for(var f in v.forEach((function(e){s[e]=s[e]+1||1})),s)s[f]>c&&(c=s[f],u=t.indexOf(f));r.meat=u}p.length>0?r.mealtype=2:r.mealtype=1,this.updateRecipe(r)}}),created:function(){this.debouncedGetPastedtTitle=$()(this.getPastedTitle,500)},watch:{editMode:function(e){!0===e&&window.scrollTo(0,0)}}},F=N,T=Object(m["a"])(F,k,M,!1,null,"c30c324e",null),S=T.exports,B=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"container"},[r("div",{staticClass:"filterBar grid-4"},[r("select",{on:{change:function(t){return e.updateFilter(t)}}},[r("option",{attrs:{value:"0"}},[e._v("All")]),r("option",{attrs:{value:"1"}},[e._v("Chicken")]),r("option",{attrs:{value:"2"}},[e._v("Beef")]),r("option",{attrs:{value:"3"}},[e._v("Pork")]),r("option",{attrs:{value:"4"}},[e._v("Fish")]),r("option",{attrs:{value:"5"}},[e._v("Egg")]),r("option",{attrs:{value:"6"}},[e._v("Vegetable")])])])])},A=[],q={name:"FilterBar",methods:Object(c["a"])({},Object(u["b"])(["updateFilter"]))},V=q,D=Object(m["a"])(V,B,A,!1,null,"396df403",null),H=D.exports,G={name:"App",data:function(){return{}},components:{Header:v,Editor:S,FilterBar:H,Recipes:C},methods:{}},J=G,L=(r("034f"),Object(m["a"])(J,n,i,!1,null,null,null)),U=L.exports,z=(r("99af"),r("4de4"),r("96cf"),r("1da1")),K=r("bc3a"),Q=r.n(K),W="https://menu.silvrtree.co.uk/recipes",X={recipes:[],currentItem:{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""},editMode:!1,filterMode:0},Y={allRecipes:function(e){var t=e.recipes.filter((function(t){return 0===parseInt(e.filterMode,10)||t.meat===parseInt(e.filterMode,10)}));return t.sort((function(e,t){var r=e.short,a=t.short;return ra?1:0}))},editorItem:function(e){return e.currentItem},editMode:function(e){return e.editMode},filterMode:function(e){return e.filterMode}},Z={fetchRecipes:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,Q.a.get(W);case 2:r=e.sent,t("setRecipes",r.data);case 4:case"end":return e.stop()}}),e)})))()},editRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,Q.a.get("".concat(W,"/").concat(t));case 2:a=e.sent,r("setCurrentItem",a.data),r("setEditMode",!0);case 5:case"end":return e.stop()}}),e)})))()},newRecipe:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),t("setEditMode",!0);case 2:case"end":return e.stop()}}),e)})))()},closeEditor:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),t("setEditMode",!1);case 2:case"end":return e.stop()}}),e)})))()},saveRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var a,n,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(a=Object(c["a"])({},t),""!==a.hash){e.next=8;break}return console.log("Create new"),e.next=5,Q.a.post("".concat(W),a);case 5:n=e.sent,e.next=12;break;case 8:return console.log("Update existing"),e.next=11,Q.a.put("".concat(W,"/").concat(a.hash),a);case 11:n=e.sent;case 12:if(!(n.data.changes>0||"Row inserted"===n.data.msg)){e.next=19;break}return r("setEditMode",!1),r("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),e.next=17,Q.a.get(W);case 17:i=e.sent,r("setRecipes",i.data);case 19:case"end":return e.stop()}}),e)})))()},updateFilter:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:a=t.target.value,r("setFilter",a);case 2:case"end":return e.stop()}}),e)})))()},updateRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var a;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:a=Object.assign({},X.currentItem,t),r("setCurrentItem",a);case 2:case"end":return e.stop()}}),e)})))()}},ee={setRecipes:function(e,t){return e.recipes=t},setCurrentItem:function(e,t){return e.currentItem=t},setEditMode:function(e,t){return e.editMode=t},setFilter:function(e,t){return e.filterMode=t}},te={state:X,getters:Y,actions:Z,mutations:ee};a["a"].use(u["a"]);var re=new u["a"].Store({state:{},mutations:{},actions:{},modules:{recipes:te}});a["a"].config.productionTip=!1,new a["a"]({store:re,render:function(e){return e(U)}}).$mount("#app")},"85ec":function(e,t,r){},a0b1:function(e,t,r){},cba2:function(e,t,r){"use strict";var a=r("a0b1"),n=r.n(a);n.a}}); +//# sourceMappingURL=app.53dc46ec.js.map \ No newline at end of file diff --git a/dist/js/app.53dc46ec.js.map b/dist/js/app.53dc46ec.js.map new file mode 100644 index 0000000..9c5c6c5 --- /dev/null +++ b/dist/js/app.53dc46ec.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7e02","webpack:///./src/App.vue?e770","webpack:///./src/components/layout/Header.vue?fd33","webpack:///src/components/layout/Header.vue","webpack:///./src/components/layout/Header.vue?2022","webpack:///./src/components/layout/Header.vue","webpack:///./src/components/Recipes.vue?fb8b","webpack:///./src/components/RecipeItem.vue?6271","webpack:///src/components/RecipeItem.vue","webpack:///./src/components/RecipeItem.vue?6647","webpack:///./src/components/RecipeItem.vue","webpack:///src/components/Recipes.vue","webpack:///./src/components/Recipes.vue?73ed","webpack:///./src/components/Recipes.vue","webpack:///./src/components/Editor.vue?663b","webpack:///src/components/Editor.vue","webpack:///./src/components/Editor.vue?145f","webpack:///./src/components/Editor.vue","webpack:///./src/components/FilterBar.vue?89a8","webpack:///src/components/FilterBar.vue","webpack:///./src/components/FilterBar.vue?2775","webpack:///./src/components/FilterBar.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/store/modules/recipes.js","webpack:///./src/store/index.js","webpack:///./src/main.js","webpack:///./src/components/RecipeItem.vue?9d8b"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticRenderFns","staticClass","_v","on","$event","newRecipe","component","_l","item","_id","url","_s","mealtype","_e","class","meatClass","meatText","editRecipe","hash","created","fetchRecipes","editMode","directives","rawName","editorItem","expression","domProps","target","composing","$set","onPasteMD","$$selectedVal","Array","filter","options","selected","map","val","_value","multiple","closeEditor","saveRecipe","debouncedGetPastedtTitle","getPastedTitle","newTitle","newFragment","newLink","matchedFoods","toLowerCase","deboxed","forEach","foodCount","el","winnerVal","winnerId","meats","indexOf","meat","mealTypes","updateRecipe","updateFilter","Header","Editor","FilterBar","Recipes","state","getters","filtered","recipes","parseInt","filterMode","sort","a","b","shortA","short","shortB","currentItem","actions","commit","axios","response","console","log","post","put","changes","msg","updatedList","event","newVal","newRecord","assign","mutations","recipe","newMode","Vue","use","Vuex","Store","config","productionTip","store","h","App","$mount"],"mappings":"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","file":"js/app.53dc46ec.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Header'),_c('Editor'),_c('FilterBar'),_c('Recipes')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"navbar bg-primary\"},[_c('h2',[_vm._v(\" Recipes \")]),_c('ul',[_c('li',[_c('button',{staticClass:\"btn btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.newRecipe()}}},[_vm._v(\"New Recipe\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Header.vue?vue&type=template&id=276d2a9c&scoped=true&\"\nimport script from \"./Header.vue?vue&type=script&lang=js&\"\nexport * from \"./Header.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"276d2a9c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container \"},_vm._l((_vm.allRecipes),function(item){return _c('div',{key:item._id},[_c('RecipeItem',{attrs:{\"item\":item}})],1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"recipeItem\"},[_c('div',{staticClass:\"listItemSix\"},[_c('a',{attrs:{\"href\":_vm.url}},[_vm._v(_vm._s(_vm.item.name))])]),_c('div',{staticClass:\"listItemThree\"},[(_vm.item.mealtype === 2)?_c('span',{staticClass:\"badge badge-light\"},[_vm._v(\"Soup\")]):(_vm.item.mealtype === 128)?_c('span',{staticClass:\"badge badge-dark\"},[_vm._v(\"Note\")]):_vm._e(),_c('span',{staticClass:\"badge\",class:_vm.meatClass},[_vm._v(_vm._s(_vm.meatText))])]),_c('div',{staticClass:\"listItemThree all-center\"},[_c('button',{staticClass:\"btn btn-primary btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.editRecipe(_vm.item.hash)}}},[_vm._v(\"Edit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RecipeItem.vue?vue&type=template&id=2e90e6b6&scoped=true&\"\nimport script from \"./RecipeItem.vue?vue&type=script&lang=js&\"\nexport * from \"./RecipeItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecipeItem.vue?vue&type=style&index=0&id=2e90e6b6&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2e90e6b6\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Recipes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Recipes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Recipes.vue?vue&type=template&id=47ce2f76&scoped=true&\"\nimport script from \"./Recipes.vue?vue&type=script&lang=js&\"\nexport * from \"./Recipes.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47ce2f76\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[(_vm.editMode === true)?_c('form',{attrs:{\"autocomplete\":\"off\"}},[_c('label',{attrs:{\"for\":\"name\"}},[_vm._v(\"Name:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.name),expression:\"editorItem.name\"}],attrs:{\"type\":\"text\",\"name\":\"name\",\"id\":\"name\",\"value\":\"\",\"required\":\"\"},domProps:{\"value\":(_vm.editorItem.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"name\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"url\"}},[_vm._v(\"Url:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.url),expression:\"editorItem.url\"}],attrs:{\"type\":\"text\",\"name\":\"url\",\"id\":\"url\",\"value\":\"\",\"required\":\"\"},domProps:{\"value\":(_vm.editorItem.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"url\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"md\"}},[_vm._v(\"Markdown:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.md),expression:\"editorItem.md\"}],attrs:{\"id\":\"md\",\"name\":\"md\",\"cols\":\"50\",\"rows\":\"10\"},domProps:{\"value\":(_vm.editorItem.md)},on:{\"paste\":_vm.onPasteMD,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"md\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"meat\"}},[_vm._v(\"Meat\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.meat),expression:\"editorItem.meat\"}],attrs:{\"id\":\"meat\",\"name\":\"meat\",\"required\":\"\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.editorItem, \"meat\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option'),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Chicken\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Beef\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"Pork\")]),_c('option',{attrs:{\"value\":\"4\"}},[_vm._v(\"Fish\")]),_c('option',{attrs:{\"value\":\"5\"}},[_vm._v(\"Egg\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"Vegetable\")])]),_c('label',{attrs:{\"for\":\"mealtype\"}},[_vm._v(\"Meal type\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.mealtype),expression:\"editorItem.mealtype\"}],attrs:{\"id\":\"mealtype\",\"name\":\"mealtype\",\"required\":\"\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.editorItem, \"mealtype\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option'),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Main\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Soup\")]),_c('option',{attrs:{\"value\":\"128\"}},[_vm._v(\"Note\")])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem._id),expression:\"editorItem._id\"}],attrs:{\"id\":\"_id\",\"name\":\"id\",\"type\":\"hidden\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem._id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"_id\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.short),expression:\"editorItem.short\"}],attrs:{\"type\":\"hidden\",\"id\":\"short\",\"name\":\"short\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.short)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"short\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.hash),expression:\"editorItem.hash\"}],attrs:{\"type\":\"hidden\",\"id\":\"hash\",\"name\":\"hash\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.hash)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"hash\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.lastused),expression:\"editorItem.lastused\"}],attrs:{\"type\":\"hidden\",\"id\":\"lastused\",\"name\":\"lastused\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.lastused)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"lastused\", $event.target.value)}}}),_c('div',{staticClass:\"my text-right\"},[_c('button',{staticClass:\"btn btn-danger btn-sm\",attrs:{\"id\":\"delete\",\"type\":\"button\"}},[_vm._v(\" Delete \")]),_c('button',{staticClass:\"btn btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.closeEditor}},[_vm._v(\" Close \")]),_c('button',{staticClass:\"btn btn-primary btn-sm\",attrs:{\"id\":\"save\",\"type\":\"button\"},on:{\"click\":function($event){return _vm.saveRecipe(_vm.editorItem)}}},[_vm._v(\" Save \")])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Editor.vue?vue&type=template&id=c30c324e&scoped=true&\"\nimport script from \"./Editor.vue?vue&type=script&lang=js&\"\nexport * from \"./Editor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c30c324e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"filterBar grid-4\"},[_c('select',{on:{\"change\":function($event){return _vm.updateFilter($event)}}},[_c('option',{attrs:{\"value\":\"0\"}},[_vm._v(\"All\")]),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Chicken\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Beef\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"Pork\")]),_c('option',{attrs:{\"value\":\"4\"}},[_vm._v(\"Fish\")]),_c('option',{attrs:{\"value\":\"5\"}},[_vm._v(\"Egg\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"Vegetable\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilterBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilterBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FilterBar.vue?vue&type=template&id=396df403&scoped=true&\"\nimport script from \"./FilterBar.vue?vue&type=script&lang=js&\"\nexport * from \"./FilterBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"396df403\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=e449d61c&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import axios from 'axios';\n\nconst url = process.env.NODE_ENV === 'production' ? 'https://menu.silvrtree.co.uk/recipes' : 'http://localhost:3000/recipes';\n\nconst state = {\n 'recipes': [],\n 'currentItem': {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n },\n 'editMode': false,\n 'filterMode':0\n};\n\nconst getters = {\n 'allRecipes': (state) => {\n const filtered = state.recipes.filter(item => parseInt(state.filterMode, 10) === 0 || item.meat === parseInt(state.filterMode, 10));\n\n return filtered.sort((a, b) => {\n var shortA = a.short; // ignore upper and lowercase\n var shortB = b.short; // ignore upper and lowercase\n if (shortA < shortB) \n return -1;\n \n if (shortA > shortB) \n return 1;\n\n // names must be equal\n return 0;\n });\n },\n 'editorItem': (state) => state.currentItem,\n 'editMode': (state) => state.editMode,\n 'filterMode':(state) => state.filterMode\n};\n\nconst actions = {\n\n async fetchRecipes({ commit }) {\n const response = await axios.get(url);\n commit('setRecipes', response.data);\n },\n\n async editRecipe({ commit }, hash) {\n const response = await axios.get(`${url}/${hash}`);\n\n commit('setCurrentItem', response.data);\n\n commit('setEditMode', true);\n },\n async newRecipe({ commit }) {\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n commit('setEditMode', true);\n },\n async closeEditor({ commit }) {\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n commit('setEditMode', false);\n },\n async saveRecipe({ commit }, newRecipe) {\n const data = { ...newRecipe };\n\n let response;\n\n if (data.hash === '') {\n console.log('Create new');\n response = await axios.post(`${url}`, data);\n }\n else {\n console.log('Update existing');\n response = await axios.put(`${url}/${data.hash}`, data);\n }\n\n if (response.data.changes > 0 || response.data.msg === 'Row inserted') {\n commit('setEditMode', false);\n\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n const updatedList = await axios.get(url);\n commit('setRecipes', updatedList.data);\n }\n },\n async updateFilter({ commit }, event) {\n const newVal = event.target.value;\n commit('setFilter', newVal);\n },\n // async updateRecipe({ commit }, oldRecord, newFragment) {\n async updateRecipe({ commit }, newFragment) {\n const newRecord = Object.assign({}, state.currentItem, newFragment );\n\n commit('setCurrentItem', newRecord);\n }\n};\n\nconst mutations = {\n 'setRecipes': (state, recipes) => (state.recipes = recipes),\n 'setCurrentItem': (state, recipe) => (state.currentItem = recipe),\n 'setEditMode': (state, mode) => (state.editMode = mode),\n 'setFilter': (state, newMode) => (state.filterMode = newMode)\n \n};\n\nexport default {\n state,\n getters,\n actions,\n mutations\n};\n","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport recipes from './modules/recipes';\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n 'state': {\n },\n 'mutations': {\n },\n 'actions': {\n },\n 'modules': {\n recipes\n }\n});\n","import Vue from 'vue';\nimport App from './App.vue';\nimport store from './store';\n// import axios from 'axios';\n\nVue.config.productionTip = false;\n// Vue.prototype.$http = axios;\n\nnew Vue({\n store,\n 'render': h => h(App)\n}).$mount('#app');\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=style&index=0&id=2e90e6b6&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=style&index=0&id=2e90e6b6&scoped=true&lang=css&\""],"sourceRoot":""} \ No newline at end of file diff --git a/dist/js/app.a4f9d1d7.js b/dist/js/app.a4f9d1d7.js deleted file mode 100644 index febafe6..0000000 --- a/dist/js/app.a4f9d1d7.js +++ /dev/null @@ -1,2 +0,0 @@ -(function(e){function t(t){for(var n,o,s=t[0],c=t[1],u=t[2],d=0,m=[];d0){var v=m.map((function(e){return e[0].toLowerCase()}));for(var f in v.forEach((function(e){s[e]=s[e]+1||1})),s)s[f]>c&&(c=s[f],u=t.indexOf(f));r.meat=u}p.length>0?r.mealtype=2:r.mealtype=1,this.updateRecipe(r)}}),created:function(){this.debouncedGetPastedtTitle=$()(this.getPastedTitle,500)}},N=F,S=Object(m["a"])(N,k,M,!1,null,"63042c54",null),T=S.exports,B=function(){var e=this,t=e.$createElement,r=e._self._c||t;return r("div",{staticClass:"container"},[r("div",{staticClass:"filterBar grid-4"},[r("select",{on:{change:function(t){return e.updateFilter(t)}}},[r("option",{attrs:{value:"0"}},[e._v("All")]),r("option",{attrs:{value:"1"}},[e._v("Chicken")]),r("option",{attrs:{value:"2"}},[e._v("Beef")]),r("option",{attrs:{value:"3"}},[e._v("Pork")]),r("option",{attrs:{value:"4"}},[e._v("Fish")]),r("option",{attrs:{value:"5"}},[e._v("Egg")]),r("option",{attrs:{value:"6"}},[e._v("Vegetable")])])])])},A=[],q={name:"FilterBar",methods:Object(c["a"])({},Object(u["b"])(["updateFilter"]))},V=q,D=Object(m["a"])(V,B,A,!1,null,"396df403",null),H=D.exports,G={name:"App",data:function(){return{}},components:{Header:v,Editor:T,FilterBar:H,Recipes:C},methods:{}},J=G,L=(r("034f"),Object(m["a"])(J,a,i,!1,null,null,null)),U=L.exports,z=(r("99af"),r("4de4"),r("96cf"),r("1da1")),K=r("bc3a"),Q=r.n(K),W="https://menu.silvrtree.co.uk/recipes",X={recipes:[],currentItem:{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""},editMode:!1,filterMode:0},Y={allRecipes:function(e){var t=e.recipes.filter((function(t){return 0===parseInt(e.filterMode,10)||t.meat===parseInt(e.filterMode,10)}));return t.sort((function(e,t){var r=e.short,n=t.short;return rn?1:0}))},editorItem:function(e){return e.currentItem},editMode:function(e){return e.editMode},filterMode:function(e){return e.filterMode}},Z={fetchRecipes:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var r;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,Q.a.get(W);case 2:r=e.sent,t("setRecipes",r.data);case 4:case"end":return e.stop()}}),e)})))()},editRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return console.log(t),console.log(r),e.next=4,Q.a.get("".concat(W,"/").concat(t));case 4:n=e.sent,console.log(n.data),r("setCurrentItem",n.data),r("setEditMode",!0);case 8:case"end":return e.stop()}}),e)})))()},newRecipe:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),t("setEditMode",!0);case 2:case"end":return e.stop()}}),e)})))()},closeEditor:function(e){var t=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:t("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),t("setEditMode",!1);case 2:case"end":return e.stop()}}),e)})))()},saveRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var n,a,i;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(n=Object(c["a"])({},t),""!==n.hash){e.next=8;break}return console.log("Create new"),e.next=5,Q.a.post("".concat(W),n);case 5:a=e.sent,e.next=12;break;case 8:return console.log("Update existing"),e.next=11,Q.a.put("".concat(W,"/").concat(n.hash),n);case 11:a=e.sent;case 12:if(!(a.data.changes>0||"Row inserted"===a.data.msg)){e.next=19;break}return r("setEditMode",!1),r("setCurrentItem",{name:"",url:"",md:"",meat:"",mealtype:"",_id:"",short:"",hash:"",lastused:""}),e.next=17,Q.a.get(W);case 17:i=e.sent,r("setRecipes",i.data);case 19:case"end":return e.stop()}}),e)})))()},updateFilter:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:n=t.target.value,r("setFilter",n);case 2:case"end":return e.stop()}}),e)})))()},updateRecipe:function(e,t){var r=e.commit;return Object(z["a"])(regeneratorRuntime.mark((function e(){var n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:n=Object.assign({},X.currentItem,t),r("setCurrentItem",n);case 2:case"end":return e.stop()}}),e)})))()}},ee={setRecipes:function(e,t){return e.recipes=t},setCurrentItem:function(e,t){return e.currentItem=t},setEditMode:function(e,t){return e.editMode=t},setFilter:function(e,t){return e.filterMode=t}},te={state:X,getters:Y,actions:Z,mutations:ee};n["a"].use(u["a"]);var re=new u["a"].Store({state:{},mutations:{},actions:{},modules:{recipes:te}});n["a"].config.productionTip=!1,new n["a"]({store:re,render:function(e){return e(U)}}).$mount("#app")},"85ec":function(e,t,r){},c9e9:function(e,t,r){}}); -//# sourceMappingURL=app.a4f9d1d7.js.map \ No newline at end of file diff --git a/dist/js/app.a4f9d1d7.js.map b/dist/js/app.a4f9d1d7.js.map deleted file mode 100644 index 6f4e55b..0000000 --- a/dist/js/app.a4f9d1d7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?7e02","webpack:///./src/components/RecipeItem.vue?3dc2","webpack:///./src/App.vue?e770","webpack:///./src/components/layout/Header.vue?fd33","webpack:///src/components/layout/Header.vue","webpack:///./src/components/layout/Header.vue?2022","webpack:///./src/components/layout/Header.vue","webpack:///./src/components/Recipes.vue?fb8b","webpack:///./src/components/RecipeItem.vue?aecf","webpack:///src/components/RecipeItem.vue","webpack:///./src/components/RecipeItem.vue?6647","webpack:///./src/components/RecipeItem.vue","webpack:///src/components/Recipes.vue","webpack:///./src/components/Recipes.vue?73ed","webpack:///./src/components/Recipes.vue","webpack:///./src/components/Editor.vue?18a8","webpack:///src/components/Editor.vue","webpack:///./src/components/Editor.vue?145f","webpack:///./src/components/Editor.vue","webpack:///./src/components/FilterBar.vue?89a8","webpack:///src/components/FilterBar.vue","webpack:///./src/components/FilterBar.vue?2775","webpack:///./src/components/FilterBar.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/store/modules/recipes.js","webpack:///./src/store/index.js","webpack:///./src/main.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticRenderFns","staticClass","_v","on","$event","newRecipe","component","_l","item","_id","url","_s","mealtype","_e","class","meatClass","meatText","editRecipe","hash","created","fetchRecipes","editMode","directives","rawName","editorItem","expression","domProps","target","composing","$set","onPasteMD","$$selectedVal","Array","filter","options","selected","map","val","_value","multiple","closeEditor","saveRecipe","debouncedGetPastedtTitle","getPastedTitle","newTitle","newFragment","newLink","matchedFoods","toLowerCase","deboxed","forEach","foodCount","el","winnerVal","winnerId","meats","indexOf","meat","mealTypes","updateRecipe","updateFilter","Header","Editor","FilterBar","Recipes","state","getters","filtered","recipes","parseInt","filterMode","sort","a","b","shortA","short","shortB","currentItem","actions","commit","axios","response","console","log","post","put","changes","msg","updatedList","event","newVal","newRecord","assign","mutations","recipe","newMode","Vue","use","Vuex","Store","config","productionTip","store","h","App","$mount"],"mappings":"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","file":"js/app.a4f9d1d7.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=style&index=0&lang=css&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=style&index=0&id=203d6576&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=style&index=0&id=203d6576&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('Header'),_c('Editor'),_c('FilterBar'),_c('Recipes')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('header',{staticClass:\"navbar bg-primary\"},[_c('h2',[_vm._v(\" Recipes \")]),_c('ul',[_c('li',[_c('button',{staticClass:\"btn btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.newRecipe()}}},[_vm._v(\"New Recipe\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Header.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Header.vue?vue&type=template&id=276d2a9c&scoped=true&\"\nimport script from \"./Header.vue?vue&type=script&lang=js&\"\nexport * from \"./Header.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"276d2a9c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container \"},_vm._l((_vm.allRecipes),function(item){return _c('div',{key:item._id},[_c('RecipeItem',{attrs:{\"item\":item}})],1)}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"recipeItem\"},[_c('div',{staticClass:\"listItemSix\"},[_c('a',{attrs:{\"href\":_vm.url}},[_vm._v(_vm._s(_vm.item.name))])]),_c('div',{staticClass:\"listItemThree\"},[(_vm.item.mealtype === 2)?_c('span',{staticClass:\"badge badge-light\"},[_vm._v(\"Soup\")]):_vm._e(),_c('span',{staticClass:\"badge\",class:_vm.meatClass},[_vm._v(_vm._s(_vm.meatText))])]),_c('div',{staticClass:\"listItemThree all-center\"},[_c('button',{staticClass:\"btn btn-primary btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){return _vm.editRecipe(_vm.item.hash)}}},[_vm._v(\"Edit\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecipeItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./RecipeItem.vue?vue&type=template&id=203d6576&scoped=true&\"\nimport script from \"./RecipeItem.vue?vue&type=script&lang=js&\"\nexport * from \"./RecipeItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./RecipeItem.vue?vue&type=style&index=0&id=203d6576&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"203d6576\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Recipes.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Recipes.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Recipes.vue?vue&type=template&id=47ce2f76&scoped=true&\"\nimport script from \"./Recipes.vue?vue&type=script&lang=js&\"\nexport * from \"./Recipes.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"47ce2f76\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container \"},[(_vm.editMode === true)?_c('form',{attrs:{\"autocomplete\":\"off\"}},[_c('label',{attrs:{\"for\":\"name\"}},[_vm._v(\"Name:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.name),expression:\"editorItem.name\"}],attrs:{\"type\":\"text\",\"name\":\"name\",\"id\":\"name\",\"value\":\"\",\"required\":\"\"},domProps:{\"value\":(_vm.editorItem.name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"name\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"url\"}},[_vm._v(\"Url:\")]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.url),expression:\"editorItem.url\"}],attrs:{\"type\":\"text\",\"name\":\"url\",\"id\":\"url\",\"value\":\"\",\"required\":\"\"},domProps:{\"value\":(_vm.editorItem.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"url\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"md\"}},[_vm._v(\"Markdown:\")]),_c('textarea',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.md),expression:\"editorItem.md\"}],attrs:{\"id\":\"md\",\"name\":\"md\",\"cols\":\"50\",\"rows\":\"10\"},domProps:{\"value\":(_vm.editorItem.md)},on:{\"paste\":_vm.onPasteMD,\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"md\", $event.target.value)}}}),_c('label',{attrs:{\"for\":\"meat\"}},[_vm._v(\"Meat\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.meat),expression:\"editorItem.meat\"}],attrs:{\"id\":\"meat\",\"name\":\"meat\",\"required\":\"\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.editorItem, \"meat\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option'),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Chicken\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Beef\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"Pork\")]),_c('option',{attrs:{\"value\":\"4\"}},[_vm._v(\"Fish\")]),_c('option',{attrs:{\"value\":\"5\"}},[_vm._v(\"Egg\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"Vegetable\")])]),_c('label',{attrs:{\"for\":\"mealtype\"}},[_vm._v(\"Meal type\")]),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.mealtype),expression:\"editorItem.mealtype\"}],attrs:{\"id\":\"mealtype\",\"name\":\"mealtype\",\"required\":\"\"},on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.$set(_vm.editorItem, \"mealtype\", $event.target.multiple ? $$selectedVal : $$selectedVal[0])}}},[_c('option'),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Main\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Soup\")])]),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem._id),expression:\"editorItem._id\"}],attrs:{\"id\":\"_id\",\"name\":\"id\",\"type\":\"hidden\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem._id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"_id\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.short),expression:\"editorItem.short\"}],attrs:{\"type\":\"hidden\",\"id\":\"short\",\"name\":\"short\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.short)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"short\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.hash),expression:\"editorItem.hash\"}],attrs:{\"type\":\"hidden\",\"id\":\"hash\",\"name\":\"hash\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.hash)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"hash\", $event.target.value)}}}),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.editorItem.lastused),expression:\"editorItem.lastused\"}],attrs:{\"type\":\"hidden\",\"id\":\"lastused\",\"name\":\"lastused\",\"value\":\"\",\"disabled\":\"\"},domProps:{\"value\":(_vm.editorItem.lastused)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.editorItem, \"lastused\", $event.target.value)}}}),_c('div',{staticClass:\"my text-right\"},[_c('button',{staticClass:\"btn btn-danger btn-sm\",attrs:{\"id\":\"delete\",\"type\":\"button\"}},[_vm._v(\" Delete \")]),_c('button',{staticClass:\"btn btn-sm\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.closeEditor}},[_vm._v(\" Close \")]),_c('button',{staticClass:\"btn btn-primary btn-sm\",attrs:{\"id\":\"save\",\"type\":\"button\"},on:{\"click\":function($event){return _vm.saveRecipe(_vm.editorItem)}}},[_vm._v(\" Save \")])])]):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Editor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Editor.vue?vue&type=template&id=63042c54&scoped=true&\"\nimport script from \"./Editor.vue?vue&type=script&lang=js&\"\nexport * from \"./Editor.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"63042c54\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"filterBar grid-4\"},[_c('select',{on:{\"change\":function($event){return _vm.updateFilter($event)}}},[_c('option',{attrs:{\"value\":\"0\"}},[_vm._v(\"All\")]),_c('option',{attrs:{\"value\":\"1\"}},[_vm._v(\"Chicken\")]),_c('option',{attrs:{\"value\":\"2\"}},[_vm._v(\"Beef\")]),_c('option',{attrs:{\"value\":\"3\"}},[_vm._v(\"Pork\")]),_c('option',{attrs:{\"value\":\"4\"}},[_vm._v(\"Fish\")]),_c('option',{attrs:{\"value\":\"5\"}},[_vm._v(\"Egg\")]),_c('option',{attrs:{\"value\":\"6\"}},[_vm._v(\"Vegetable\")])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilterBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FilterBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./FilterBar.vue?vue&type=template&id=396df403&scoped=true&\"\nimport script from \"./FilterBar.vue?vue&type=script&lang=js&\"\nexport * from \"./FilterBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"396df403\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=e449d61c&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import axios from 'axios';\n\nconst url = process.env.NODE_ENV === 'production' ? 'https://menu.silvrtree.co.uk/recipes' : 'http://localhost:3000/recipes';\n\nconst state = {\n 'recipes': [],\n 'currentItem': {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n },\n 'editMode': false,\n 'filterMode':0\n};\n\nconst getters = {\n 'allRecipes': (state) => {\n const filtered = state.recipes.filter(item => parseInt(state.filterMode, 10) === 0 || item.meat === parseInt(state.filterMode, 10));\n\n return filtered.sort((a, b) => {\n var shortA = a.short; // ignore upper and lowercase\n var shortB = b.short; // ignore upper and lowercase\n if (shortA < shortB) \n return -1;\n \n if (shortA > shortB) \n return 1;\n\n // names must be equal\n return 0;\n });\n },\n 'editorItem': (state) => state.currentItem,\n 'editMode': (state) => state.editMode,\n 'filterMode':(state) => state.filterMode\n};\n\nconst actions = {\n\n async fetchRecipes({ commit }) {\n const response = await axios.get(url);\n commit('setRecipes', response.data);\n },\n\n async editRecipe({ commit }, hash) {\n console.log(hash);\n console.log(commit);\n\n const response = await axios.get(`${url}/${hash}`);\n\n console.log(response.data);\n\n commit('setCurrentItem', response.data);\n\n commit('setEditMode', true);\n },\n async newRecipe({ commit }) {\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n commit('setEditMode', true);\n },\n async closeEditor({ commit }) {\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n commit('setEditMode', false);\n },\n async saveRecipe({ commit }, newRecipe) {\n const data = { ...newRecipe };\n\n let response;\n\n if (data.hash === '') {\n console.log('Create new');\n response = await axios.post(`${url}`, data);\n }\n else {\n console.log('Update existing');\n response = await axios.put(`${url}/${data.hash}`, data);\n }\n\n if (response.data.changes > 0 || response.data.msg === 'Row inserted') {\n commit('setEditMode', false);\n\n commit('setCurrentItem', {\n 'name': '',\n 'url': '',\n 'md': '',\n 'meat': '',\n 'mealtype': '',\n '_id': '',\n 'short': '',\n 'hash': '',\n 'lastused': ''\n });\n\n const updatedList = await axios.get(url);\n commit('setRecipes', updatedList.data);\n }\n },\n async updateFilter({ commit }, event) {\n const newVal = event.target.value;\n commit('setFilter', newVal);\n },\n // async updateRecipe({ commit }, oldRecord, newFragment) {\n async updateRecipe({ commit }, newFragment) {\n const newRecord = Object.assign({}, state.currentItem, newFragment );\n\n commit('setCurrentItem', newRecord);\n }\n};\n\nconst mutations = {\n 'setRecipes': (state, recipes) => (state.recipes = recipes),\n 'setCurrentItem': (state, recipe) => (state.currentItem = recipe),\n 'setEditMode': (state, mode) => (state.editMode = mode),\n 'setFilter': (state, newMode) => (state.filterMode = newMode)\n \n};\n\nexport default {\n state,\n getters,\n actions,\n mutations\n};\n","import Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport recipes from './modules/recipes';\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n 'state': {\n },\n 'mutations': {\n },\n 'actions': {\n },\n 'modules': {\n recipes\n }\n});\n","import Vue from 'vue';\nimport App from './App.vue';\nimport store from './store';\n// import axios from 'axios';\n\nVue.config.productionTip = false;\n// Vue.prototype.$http = axios;\n\nnew Vue({\n store,\n 'render': h => h(App)\n}).$mount('#app');\n"],"sourceRoot":""} \ No newline at end of file diff --git a/live/css/login.css b/live/css/login.css index 3b3a545..cf2cd99 100644 --- a/live/css/login.css +++ b/live/css/login.css @@ -30,7 +30,8 @@ body { top: 50%; left: 50%; margin: -150px 0 0 -150px; - width:300px; + min-width: 300px; + width:0.5vw; height:300px; } .login h1 { color: #fff; text-shadow: 0 0 10px rgba(0,0,0,0.3); letter-spacing:1px; text-align:center; } @@ -42,7 +43,7 @@ input { border: none; outline: none; padding: 10px; - font-size: 13px; + font-size: 1rem; color: #fff; text-shadow: 1px 1px 1px rgba(0,0,0,0.3); border: 1px solid rgba(0,0,0,0.3); diff --git a/live/login.html b/live/login.html index be3321c..ef4dae6 100644 --- a/live/login.html +++ b/live/login.html @@ -2,6 +2,8 @@ + + Login diff --git a/menu.db b/menu.db deleted file mode 100644 index 2b2f33189f64d6576a1ce9bfa5e3673161a3ece9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 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 TX?nxln^-m0+l>YA=0.4.22", + "underscore": "~1.7.0" + }, + "dependencies": { + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" + } + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=" + }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -2917,11 +3265,15 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ics-creator": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ics-creator/-/ics-creator-1.1.1.tgz", + "integrity": "sha1-6t/I/bycMqAA1R89LPVN21g/H/Y=" + }, "ieee754": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "ienoopen": { "version": "1.1.0", @@ -3119,11 +3471,20 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" }, "is-data-descriptor": { "version": "0.1.4", @@ -3145,6 +3506,11 @@ } } }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3164,6 +3530,22 @@ } } }, + "is-expression": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", + "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", + "requires": { + "acorn": "~4.0.2", + "object-assign": "^4.0.1" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" + } + } + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -3225,8 +3607,15 @@ "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "is-regex": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "requires": { + "has": "^1.0.3" + } }, "is-relative": { "version": "1.0.0", @@ -3237,6 +3626,14 @@ "is-unc-path": "^1.0.0" } }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3285,11 +3682,136 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=", + "requires": { + "character-parser": "1.2.1", + "clean-css": "^3.1.9", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "jstransformer": "0.0.2", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "uglify-js": "^2.4.19", + "void-elements": "~2.0.1", + "with": "~4.0.0" + }, + "dependencies": { + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", + "requires": { + "acorn": "^2.1.0" + } + }, + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" + }, + "character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" + }, + "constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=", + "requires": { + "acorn": "^2.1.0" + } + }, + "jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^6.0.1" + } + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=", + "requires": { + "asap": "~1.0.0" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", + "requires": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" + } + } + } + } + }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, "jquery": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" }, + "js-stringify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", + "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -3364,6 +3886,15 @@ "verror": "1.10.0" } }, + "jstransformer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", + "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", + "requires": { + "is-promise": "^2.0.0", + "promise": "^7.0.1" + } + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -3380,6 +3911,11 @@ "stream-splicer": "^2.0.0" } }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -3536,6 +4072,11 @@ "lodash.escape": "^3.0.0" } }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", @@ -3927,6 +4468,15 @@ "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==" }, + "node-cron": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-2.0.3.tgz", + "integrity": "sha512-eJI+QitXlwcgiZwNNSRbqsjeZMp5shyajMR81RZCqeW0ZDEj4zU9tpd4nTh/1JsBiKbF8d08FCewiipDmVIYjg==", + "requires": { + "opencollective-postinstall": "^2.0.0", + "tz-offset": "0.0.1" + } + }, "node-pre-gyp": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", @@ -3944,6 +4494,47 @@ "tar": "^4" } }, + "nodemailer": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.7.0.tgz", + "integrity": "sha512-IludxDypFpYw4xpzKdMAozBSkzKHmNBvGanUREjJItgJ2NYcK/s8+PggVhj7c2yGFQykKsnnmv1+Aqo0ZfjHmw==" + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=" + }, + "nodemailer-html-to-text": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-html-to-text/-/nodemailer-html-to-text-2.1.0.tgz", + "integrity": "sha1-mW3szMmv9jcew242M7GO114PyPI=", + "requires": { + "html-to-text": "^2.1.0" + } + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.4.tgz", + "integrity": "sha1-DYmvAZoUSkgP2OzJmZfZ+DjxNoU=", + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=" + }, "nopt": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", @@ -4044,6 +4635,21 @@ } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==" + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -4053,6 +4659,17 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", @@ -4114,6 +4731,20 @@ "mimic-fn": "^2.1.0" } }, + "opencollective-postinstall": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", + "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==" + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -4262,8 +4893,7 @@ "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-platform": { "version": "0.11.15", @@ -4356,6 +4986,14 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, "proxy-addr": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", @@ -4384,6 +5022,120 @@ "safe-buffer": "^5.1.2" } }, + "pug": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz", + "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==", + "requires": { + "pug-code-gen": "^2.0.2", + "pug-filters": "^3.1.1", + "pug-lexer": "^4.1.0", + "pug-linker": "^3.0.6", + "pug-load": "^2.0.12", + "pug-parser": "^5.0.1", + "pug-runtime": "^2.0.5", + "pug-strip-comments": "^1.0.4" + } + }, + "pug-attrs": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz", + "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==", + "requires": { + "constantinople": "^3.0.1", + "js-stringify": "^1.0.1", + "pug-runtime": "^2.0.5" + } + }, + "pug-code-gen": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz", + "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==", + "requires": { + "constantinople": "^3.1.2", + "doctypes": "^1.1.0", + "js-stringify": "^1.0.1", + "pug-attrs": "^2.0.4", + "pug-error": "^1.3.3", + "pug-runtime": "^2.0.5", + "void-elements": "^2.0.1", + "with": "^5.0.0" + } + }, + "pug-error": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz", + "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ==" + }, + "pug-filters": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz", + "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==", + "requires": { + "clean-css": "^4.1.11", + "constantinople": "^3.0.1", + "jstransformer": "1.0.0", + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8", + "resolve": "^1.1.6", + "uglify-js": "^2.6.1" + } + }, + "pug-lexer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz", + "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==", + "requires": { + "character-parser": "^2.1.1", + "is-expression": "^3.0.0", + "pug-error": "^1.3.3" + } + }, + "pug-linker": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz", + "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==", + "requires": { + "pug-error": "^1.3.3", + "pug-walk": "^1.1.8" + } + }, + "pug-load": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz", + "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==", + "requires": { + "object-assign": "^4.1.0", + "pug-walk": "^1.1.8" + } + }, + "pug-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz", + "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==", + "requires": { + "pug-error": "^1.3.3", + "token-stream": "0.0.1" + } + }, + "pug-runtime": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz", + "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw==" + }, + "pug-strip-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz", + "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==", + "requires": { + "pug-error": "^1.3.3" + } + }, + "pug-walk": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz", + "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA==" + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -4397,8 +5149,7 @@ "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "querystring-es3": { "version": "0.2.1", @@ -4501,6 +5252,11 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.2.0.tgz", "integrity": "sha512-LgQJIuS6nAy1Jd88DCQRemyE3mS+ispwlqMk3b0yjZ257fI1v9c+/p6SD5gP5FGyXUIgrNOAfmyioHwZtYv2VA==" }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -4511,6 +5267,15 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", @@ -4532,8 +5297,7 @@ "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { "version": "1.0.0", @@ -4585,7 +5349,6 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", - "dev": true, "requires": { "path-parse": "^1.0.6" } @@ -4622,12 +5385,28 @@ "signal-exit": "^3.0.2" } }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "requires": { + "through": "~2.3.4" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "^0.1.1" + } + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -4940,6 +5719,26 @@ } } }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, + "smtp-email-sender": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/smtp-email-sender/-/smtp-email-sender-1.0.0.tgz", + "integrity": "sha512-s2YSj43qz0F91Fgiest7XhI+0JrOdy+/gMw2w3OEbcdt3XzpZHhzaexJpF+RmshFTTPk9XHZh2d1TPOT8XMj7g==", + "requires": { + "ics-creator": "^1.1.1", + "nodemailer": "^4.6.6", + "nodemailer-html-to-text": "^2.1.0", + "nodemailer-smtp-transport": "^2.7.4" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -5050,8 +5849,7 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.2", @@ -5108,8 +5906,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "sqlite3": { "version": "4.1.1", @@ -5234,6 +6031,34 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz", + "integrity": "sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -5406,6 +6231,72 @@ } } }, + "tape": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.13.2.tgz", + "integrity": "sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ==", + "requires": { + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "function-bind": "~1.1.1", + "glob": "~7.1.6", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.0.5", + "minimist": "~1.2.0", + "object-inspect": "~1.7.0", + "resolve": "~1.15.1", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.1", + "through": "~2.3.8" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "minimist": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.4.tgz", + "integrity": "sha512-wTiNDqe4D2rbTJGZk1qcdZgFtY0/r+iuE6GDT7V0/+Gu5MLpIDm4+CssDECR79OJs/OxLPXMzdxy153b5Qy3hg==" + }, + "resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "requires": { + "path-parse": "^1.0.6" + } + } + } + }, + "tape-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tape-promise/-/tape-promise-4.0.0.tgz", + "integrity": "sha512-mNi5yhWAKDuNgZCfFKeZbsXvraVOf+I8UZG+lf+aoRrzX4+jd4mpNBjYh16/VcpEMUtS0iFndBgnfxxZbtyLFw==", + "requires": { + "is-promise": "^2.1.0", + "onetime": "^2.0.0" + }, + "dependencies": { + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + } + } + }, "tar": { "version": "4.4.13", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", @@ -5448,8 +6339,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.5", @@ -5504,6 +6394,11 @@ "os-tmpdir": "~1.0.2" } }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", @@ -5551,6 +6446,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, + "token-stream": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", + "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" + }, "tough-cookie": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", @@ -5567,6 +6467,65 @@ } } }, + "transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", + "requires": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + }, + "dependencies": { + "css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=", + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "requires": { + "wordwrap": "~0.0.2" + } + }, + "promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=", + "requires": { + "is-promise": "~1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=", + "requires": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + } + } + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -5628,6 +6587,27 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "tz-offset": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tz-offset/-/tz-offset-0.0.1.tgz", + "integrity": "sha512-kMBmblijHJXyOpKzgDhKx9INYU4u4E1RPMB0HqmKSgWG8vEcf3exEfLh4FFfzd3xdQOw9EuIy/cP0akY6rHopQ==" + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "optional": true + }, "uid-safe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", @@ -5636,6 +6616,16 @@ "random-bytes": "~1.0.0" } }, + "ultrases": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ultrases/-/ultrases-0.1.3.tgz", + "integrity": "sha1-VCbVxbsjj92bVJ7BIIpUJGYoIbU=", + "requires": { + "aws-sdk": "*", + "html-to-text": "*", + "jade": "*" + } + }, "umd": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", @@ -5666,6 +6656,15 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" }, + "underscore.string": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", + "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", + "requires": { + "sprintf-js": "^1.0.3", + "util-deprecate": "^1.0.2" + } + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5958,6 +6957,11 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -5975,12 +6979,38 @@ "string-width": "^1.0.2 || 2" } }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "with": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", + "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", + "requires": { + "acorn": "^3.1.0", + "acorn-globals": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -6000,6 +7030,20 @@ "resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz", "integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg==" }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -6010,6 +7054,17 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } } } } diff --git a/package.json b/package.json index a60bce5..87e191b 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "backbone": "^1.4.0", "body-parser": "^1.19.0", "cors": "^2.8.5", + "dateformat": "^3.0.3", "dotenv": "^8.2.0", "express": "^4.17.1", "express-session": "^1.17.0", @@ -21,10 +22,16 @@ "lodash": "^4.17.15", "markdown": "^0.5.0", "minibus": "^3.1.0", + "node-cron": "^2.0.3", "nosql": "^6.1.0", + "pug": "^2.0.4", "schema-check": "0.0.7", "short-hash": "^1.0.0", - "sqlite3": "^4.1.1" + "smtp-email-sender": "^1.0.0", + "sqlite3": "^4.1.1", + "tape": "^4.13.2", + "tape-promise": "^4.0.0", + "ultrases": "^0.1.3" }, "devDependencies": { "browserify": "^16.5.0", diff --git a/pug/email.jade b/pug/email.jade new file mode 100644 index 0000000..2cfa274 --- /dev/null +++ b/pug/email.jade @@ -0,0 +1,10 @@ +html(lang="en") + head + meta(charset='utf-8') + title + Suggestions + body + h1 Suggestions for !{ts} + ol + each item in suggestions + li: a(href=item.url)= item.name diff --git a/pug/email.pug b/pug/email.pug new file mode 100644 index 0000000..2cfa274 --- /dev/null +++ b/pug/email.pug @@ -0,0 +1,10 @@ +html(lang="en") + head + meta(charset='utf-8') + title + Suggestions + body + h1 Suggestions for !{ts} + ol + each item in suggestions + li: a(href=item.url)= item.name diff --git a/server.js b/server.js index 38de5e5..c08a14a 100644 --- a/server.js +++ b/server.js @@ -1,3 +1,4 @@ +require('dotenv').config(); const express = require('express'); const bodyParser = require('body-parser'); const session = require('express-session'); @@ -7,6 +8,9 @@ const cors = require('cors'); const db = require('./server/lib/loginmanager'); +const doJob = require('./server/lib/job'); +const checkAuth = require('./server/middle/checkAuth'); + // create express app const app = express(); require('dotenv').config(); @@ -24,12 +28,17 @@ app.use(session({ 'saveUninitialized': true })); -app.get('/', function(request, response) { - if (request.session.loggedin !== true) - response.sendFile(path.join(`${__dirname }/server/static/login.html`)); - else - response.redirect('/recipes.html'); +app.get('/', (request, response) => { + if (request.session.auth) + response.redirect('/menu'); + else + response.sendFile(path.join(`${__dirname}/server/static/login.html`)); }); + +app.get('/menu', checkAuth, (req, res) => { + res.sendFile(path.join(`${__dirname }/dist/index.html`)); +}); + app.use(express.static(path.join(__dirname, sitePath))); // parse requests of content-type - application/x-www-form-urlencoded @@ -38,7 +47,7 @@ app.use(bodyParser.urlencoded({ 'extended': true })); // parse requests of content-type - application/json app.use(bodyParser.json()); -app.post('/auth', function(request, response) { +app.post('/auth', (request, response) => { const username = request.body.u; const password = request.body.p; @@ -47,12 +56,12 @@ app.post('/auth', function(request, response) { db.getOne(username, password) .then((data) => { if (!data) - response.send('Incorrect Username and/or Password!'); - + // response.send('Incorrect Username and/or Password!'); + response.redirect('/'); else { - request.session.loggedin = true; request.session.username = username; - response.redirect('/recipes.html'); + request.session.auth = 'jhgkjgkjhgkjhgjkhgjkhgfhghfjgfjhgf'; + response.redirect('/menu'); } }) .catch((err) => { @@ -75,3 +84,8 @@ require('./server/routes/view.routes')(app); app.listen(serverPort, () => { console.log(`Server is listening on port ${serverPort}`); }); + +((() => { + console.log('Menuizer started'); + // doJob(); +})()); diff --git a/server/lib/FoodObj.js b/server/lib/FoodObj.js new file mode 100644 index 0000000..7fe8684 --- /dev/null +++ b/server/lib/FoodObj.js @@ -0,0 +1,39 @@ +class FoodObj { + + constructor(limit) { + this.limit = limit; + this.store = []; + this.types = [0, 0, 0, 0, 0, 0, 0]; + } + + get () { + return this.store; + } + + getFirstFive() { + return (this.store.slice(0, 5)); + } + + getFirstFiveIDs() { + const outVal = this.store.slice(0, 5).map((item) => { + return item._id; + }); + + return (outVal); + } + + add(item) { + // console.log('>>', item); + item.url = `https://menu.silvrtree.co.uk/view/${item.short}`; + if (this.types[item.meat] < this.limit) { + this.store.push(item); + this.types[item.meat]++; + } + } + + count() { + return (this.store.slice(0, 5).length); + } +} + +module.exports = FoodObj; diff --git a/server/lib/dbmanager.js b/server/lib/dbmanager.js index 67e70dc..bdb4aae 100644 --- a/server/lib/dbmanager.js +++ b/server/lib/dbmanager.js @@ -106,3 +106,50 @@ exports.updateOne = (data) => { }); }); }; + +exports.getRandom = (timestamp) => { + const sql = 'SELECT _id, short, hash, name, meat, mealtype FROM menu where mealtype =1 and lastused { + db.all(sql, [sqlTimestamp], (err, rows) => { + if (err) + reject(err); + + if (!err) { + const outgoing = [...rows]; + + resolve(outgoing) ; + } + }); + }); +}; + +exports.updateTimestamps = (newTimestamp, items) => { + const sqlTimestamp = ~~(newTimestamp / 1000); + + console.log('>> items', items); + + const sql = 'UPDATE menu SET lastused = $lastused WHERE _id = $in'; + + return new Promise((resolve, reject) => { + db.serialize(() => { + const stmt = db.prepare(sql); + + items.forEach((item) => { + console.log(item); + const newData = { '$lastused':sqlTimestamp, '$in':item }; + + stmt.run(newData); + }); + + stmt.finalize((err) => { + if (err) + reject(err); + + resolve({ 'msg':'Row updateds' }); + }); + }); + }); +}; diff --git a/server/lib/job.js b/server/lib/job.js new file mode 100644 index 0000000..fdfdbf8 --- /dev/null +++ b/server/lib/job.js @@ -0,0 +1,61 @@ +const dbmanager = require('./dbmanager'); +const FoodObj = require('./FoodObj'); + +const pug = require('pug'); +const dateFormat = require('dateformat'); + +const email = require('smtp-email-sender')({ + 'host': 'mail.caliban.io', + 'port': '465', + 'auth': { + 'user': 'aida@caliban.io', + 'pass': 'WaF#E+5am7.)\\csD', + 'type': 'LOGIN' // PLAIN, LOGIN, MD5 etc... + }, + 'secure': 'secure' +}); + +function sendSMTP(data, newPath) { + const now = new Date(); + + const html = pug.renderFile(`${newPath}/` + 'pug/email.pug', data); + email({ + 'from': 'Aida ', + 'to': 'Aida ', + // 'bcc': 'Martin , Jessica ', + 'bcc': 'Martin ', + 'subject': `Suggestions 🍽️ - ${dateFormat(now, 'dddd, mmmm dS, yyyy')}`, + 'html': html + }); +} + +function pugTest(data, newpath) { + console.log(pug.renderFile(`${newpath}/` + 'pug/email.pug', data)); +} + +async function doJob() { + console.log('Doing job...'); + const now = new Date(); + const currentTS = ~~(now.getTime() / 86400000) * 86400000; + const pastTS = currentTS - (86400000 * 28); + + const fo = new FoodObj(2); + + await dbmanager.getRandom(pastTS).then((r) => { + // console.log(r); + + for(const item of r) + fo.add(item); + }); + + if (fo.count() === 5) { + sendSMTP({ 'suggestions':fo.getFirstFive() }, './'); + await dbmanager.updateTimestamps(currentTS, fo.getFirstFiveIDs()).then((r) => { + console.log(r); + }); + } else { + console.log(`Not enough items, only got ${fo.count()}`); + } +} + +module.exports = doJob; diff --git a/server/middle/checkAuth.js b/server/middle/checkAuth.js new file mode 100644 index 0000000..96bc301 --- /dev/null +++ b/server/middle/checkAuth.js @@ -0,0 +1,15 @@ +function checkAuth(req, res, next) { + if (!req.session.auth) + // res.send('You are not authorized to view this page'); + res.redirect('/'); + else { + res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'); + next(); + } +} + +module.exports = checkAuth; + +// https://stackoverflow.com/questions/7990890/how-to-implement-login-auth-in-node-js + +// look aT JWT BIT AT BOTTOM diff --git a/server/static/login.html b/server/static/login.html index d0b4f52..d6ae202 100644 --- a/server/static/login.html +++ b/server/static/login.html @@ -2,6 +2,8 @@ + + Login