init
This commit is contained in:
commit
6f95baaa7a
55
.eslintrc
Normal file
55
.eslintrc
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"parserOptions": {
|
||||||
|
"ecmaVersion": 2017,
|
||||||
|
"sourceType": "module",
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"jsx": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"browser": false,
|
||||||
|
"node": true,
|
||||||
|
"es6": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"arrow-spacing": "error",
|
||||||
|
"block-scoped-var": "error",
|
||||||
|
"block-spacing": "error",
|
||||||
|
"brace-style": ["error", "stroustrup", {}],
|
||||||
|
"camelcase": "error",
|
||||||
|
"comma-dangle": ["error", "never"],
|
||||||
|
"comma-spacing": ["error", { "before": false, "after": true }],
|
||||||
|
"comma-style": [1, "last"],
|
||||||
|
"consistent-this": [1, "_this"],
|
||||||
|
"curly": [1, "multi"],
|
||||||
|
"eol-last": 1,
|
||||||
|
"eqeqeq": 1,
|
||||||
|
"func-names": 1,
|
||||||
|
"indent": ["error", 2, { "SwitchCase": 1 }],
|
||||||
|
"lines-around-comment": ["error", { "beforeBlockComment": true, "allowArrayStart": true }],
|
||||||
|
"max-len": [1, 180, 2], // 2 spaces per tab, max 80 chars per line
|
||||||
|
"new-cap": 1,
|
||||||
|
"newline-before-return": "error",
|
||||||
|
"no-array-constructor": 1,
|
||||||
|
"no-inner-declarations": [1, "both"],
|
||||||
|
"no-mixed-spaces-and-tabs": 1,
|
||||||
|
"no-multi-spaces": 2,
|
||||||
|
"no-new-object": 1,
|
||||||
|
"no-shadow-restricted-names": 1,
|
||||||
|
"object-curly-spacing": ["error", "always"],
|
||||||
|
"padded-blocks": ["error", { "blocks": "never", "switches": "always" }],
|
||||||
|
"prefer-const": "error",
|
||||||
|
"prefer-template": "error",
|
||||||
|
"one-var": 0,
|
||||||
|
"quote-props": ["error", "always"],
|
||||||
|
"quotes": [1, "single"],
|
||||||
|
"radix": 1,
|
||||||
|
"semi": [1, "always"],
|
||||||
|
"space-before-blocks": [1, "always"],
|
||||||
|
"space-infix-ops": 1,
|
||||||
|
"vars-on-top": 1,
|
||||||
|
"no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 1 }],
|
||||||
|
"spaced-comment": ["error", "always", { "markers": ["/"] }]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
182
.gitignore
vendored
Normal file
182
.gitignore
vendored
Normal file
@ -0,0 +1,182 @@
|
|||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### Archives template
|
||||||
|
# It's better to unpack these files and commit the raw source because
|
||||||
|
# git has its own built in compression methods.
|
||||||
|
*.7z
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.zip
|
||||||
|
*.gz
|
||||||
|
*.bzip
|
||||||
|
*.bz2
|
||||||
|
*.xz
|
||||||
|
*.lzma
|
||||||
|
*.cab
|
||||||
|
|
||||||
|
#packing-only formats
|
||||||
|
*.iso
|
||||||
|
*.tar
|
||||||
|
|
||||||
|
#package management formats
|
||||||
|
*.dmg
|
||||||
|
*.xpi
|
||||||
|
*.gem
|
||||||
|
*.egg
|
||||||
|
*.deb
|
||||||
|
*.rpm
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
### Windows template
|
||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
### OSX template
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Icon must end with two \r
|
||||||
|
Icon
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
||||||
|
### JetBrains template
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||||
|
|
||||||
|
*.iml
|
||||||
|
|
||||||
|
## Directory-based project format:
|
||||||
|
.idea/
|
||||||
|
# if you remove the above rule, at least ignore the following:
|
||||||
|
|
||||||
|
# User-specific stuff:
|
||||||
|
# .idea/workspace.xml
|
||||||
|
# .idea/tasks.xml
|
||||||
|
# .idea/dictionaries
|
||||||
|
|
||||||
|
# Sensitive or high-churn files:
|
||||||
|
# .idea/dataSources.ids
|
||||||
|
# .idea/dataSources.xml
|
||||||
|
# .idea/sqlDataSources.xml
|
||||||
|
# .idea/dynamic.xml
|
||||||
|
# .idea/uiDesigner.xml
|
||||||
|
|
||||||
|
# Gradle:
|
||||||
|
# .idea/gradle.xml
|
||||||
|
# .idea/libraries
|
||||||
|
|
||||||
|
# Mongo Explorer plugin:
|
||||||
|
# .idea/mongoSettings.xml
|
||||||
|
|
||||||
|
## File-based project format:
|
||||||
|
*.ipr
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
## Plugin-specific files:
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
/out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
### Node template
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directory
|
||||||
|
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
|
||||||
|
node_modules
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
### VisualStudioCode template
|
||||||
|
.settings
|
||||||
|
|
||||||
|
### Xcode template
|
||||||
|
# Xcode
|
||||||
|
#
|
||||||
|
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
|
||||||
|
|
||||||
|
## Build generated
|
||||||
|
build/
|
||||||
|
DerivedData
|
||||||
|
|
||||||
|
## Various settings
|
||||||
|
*.pbxuser
|
||||||
|
!default.pbxuser
|
||||||
|
*.mode1v3
|
||||||
|
!default.mode1v3
|
||||||
|
*.mode2v3
|
||||||
|
!default.mode2v3
|
||||||
|
*.perspectivev3
|
||||||
|
!default.perspectivev3
|
||||||
|
xcuserdata
|
||||||
|
|
||||||
|
## Other
|
||||||
|
*.xccheckout
|
||||||
|
*.moved-aside
|
||||||
|
*.xcuserstate
|
||||||
|
|
||||||
|
dist
|
||||||
|
/jspm_packages/npm/
|
||||||
|
/jspm_packages/github/
|
187
index.js
Normal file
187
index.js
Normal file
@ -0,0 +1,187 @@
|
|||||||
|
const sentence = require('to-sentence-case');
|
||||||
|
const UltraSES = require('ultrases');
|
||||||
|
const dateFormat = require('dateformat');
|
||||||
|
const pug = require('pug');
|
||||||
|
const logger = require('log4js').getLogger('menuizer');
|
||||||
|
logger.level = 'debug';
|
||||||
|
|
||||||
|
// {'name':'', 'url':''
|
||||||
|
|
||||||
|
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'
|
||||||
|
});
|
||||||
|
|
||||||
|
const mailer = new UltraSES({
|
||||||
|
'aws': {
|
||||||
|
'accessKeyId': 'AKIAJWJS75F7WNCGK64A',
|
||||||
|
'secretAccessKey': '8irYxThCp4xxyrbr00HzWcODe2qdNrR7X7S5BKup',
|
||||||
|
'region': 'eu-west-1'
|
||||||
|
}, 'defaults': {
|
||||||
|
'from': 'Martin Donnelly <martind2000@gmail.com>'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const menu = [
|
||||||
|
{ 'name': 'Asian pepper steak crock pot recipe', 'url': 'https://www.marksdailyapple.com/asian-pepper-steak-crock-pot-recipe/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'Beef burgandy', 'url': 'http://www.marksdailyapple.com/beef-burgundy-recipe/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'italian sausage meatballs', 'url': 'http://www.marksdailyapple.com/primal-meatballs/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'frittata aleta', 'url': 'http://www.marksdailyapple.com/frittata-aleta/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'garlic pulled pork', 'url': 'http://www.marksdailyapple.com/garlic-pulled-pork/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'crock pot pork stuffed peppers', 'url': 'http://www.marksdailyapple.com/crock-pot-pork-stuffed-peppers/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'sesame chicken with "rice"', 'url': 'http://www.marksdailyapple.com/sesame-chicken-and-rice-with-fiery-ginger-and-chile-sauce/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'crispy nut and herb fried chicken', 'url': 'http://www.marksdailyapple.com/crispy-nut-and-herb-fried-chicken-with-creamy-avocado/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'spicy chicken and bacon poppers', 'url': 'http://www.marksdailyapple.com/spicy-chicken-and-bacon-poppers/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'butter chicken in silky sauce', 'url': 'http://www.marksdailyapple.com/butter-chicken-in-a-silky-sauce/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'steak', 'url': 'https://www.farmison.com/community/recipe/how-to-cook-your-beef-fillet-steak' },
|
||||||
|
{ 'name': 'hazelnut crusted chicken', 'url': 'http://www.marksdailyapple.com/hazelnut-crusted-chicken-with-stealth-coconut/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'vegetable latkes', 'url': 'http://www.marksdailyapple.com/vegetable-latkes/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'beef stew', 'url': 'http://www.marksdailyapple.com/beef-stew-and-chicken-soup-in-35-minutes-or-less/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'chicken soup', 'url': 'http://www.marksdailyapple.com/beef-stew-and-chicken-soup-in-35-minutes-or-less/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'sausage patties', 'url': 'https://www.tasteslovely.com/homemade-paleo-breakfast-sausage-patties/' },
|
||||||
|
{ 'name': 'primal tex mex torillas', 'url': 'http://www.marksdailyapple.com/primal-tex-mex-tortillas-and-taco-seasoning/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'primal texas chili', 'url': 'http://www.marksdailyapple.com/primal-texas-chili/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'moroccan burgers', 'url': 'https://sarahfragoso.com/moroccan-burgers-and-beet-salad/' },
|
||||||
|
{ 'name': 'paleo spaghetti', 'url': 'https://paleoleap.com/paleo-spaghetti/' },
|
||||||
|
{ 'name': 'primal chicken tikka masala', 'url': 'http://www.marksdailyapple.com/primal-chicken-tikka-masala/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'butter stuffed chicken kiev', 'url': 'http://www.marksdailyapple.com/butter-stuffed-chicken-kiev/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'tender lemon parsley brisket', 'url': 'http://www.marksdailyapple.com/tender-lemon-parsley-brisket/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'banh mi salad', 'url': 'http://www.marksdailyapple.com/banh-mi-salad/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'taco bowl crispy kale', 'url': 'http://www.marksdailyapple.com/taco-bowl-with-crispy-kale-chips/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'lime and basil kebabs', 'url': 'http://www.marksdailyapple.com/lime-and-basil-beef-kebabs/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'sun dried tomato meatballs', 'url': 'https://sarahfragoso.com/sun-dried-tomato-meatballs-with-creamy-pesto/' },
|
||||||
|
{ 'name': 'slow cooked coconut ginger pork', 'url': 'http://www.marksdailyapple.com/slow-cooked-coconut-ginger-pork/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'balsamic glazed drumsticks', 'url': 'http://www.marksdailyapple.com/balsamic-glazed-drumsticks/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'herb chicken cooked under a brick', 'url': 'http://www.marksdailyapple.com/herb-chicken-cooked-under-a-brick/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'pork stuffed jalapeno peppers', 'url': 'http://www.marksdailyapple.com/pork-stuffed-jalapeno-peppers/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'spiced pork butternut squash', 'url': 'http://www.marksdailyapple.com/spiced-pork-and-butternut-squash-with-sage/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'shakshuka', 'url': 'http://www.marksdailyapple.com/shakshuka-eggs-poached-in-spicy-tomato-sauce/#axzz29jTSubMo' },
|
||||||
|
{ 'name': 'grilled lime chicken', 'url': 'http://www.simplyrecipes.com/recipes/grilled_lime_chicken_with_black_bean_sauce/' },
|
||||||
|
{ 'name': 'eggs benadict burger', 'url': 'https://paleoleap.com/eggs-benedict-burgers/' },
|
||||||
|
{ 'name': 'asian marinated steaks', 'url': 'https://web.archive.org/web/20120330045230/http://www.paleotable.com/2011/01/asian-marinated-steaks.html' },
|
||||||
|
{ 'name': 'tango burgers', 'url': 'https://web.archive.org/web/20120127101048/http://www.paleotable.com/2011/01/tango-burgers.html' },
|
||||||
|
{ 'name': 'meatza', 'url': 'https://web.archive.org/web/20120118062740/http://www.paleotable.com/2011/02/meatza.html' },
|
||||||
|
{ 'name': 'baked chicken with roasted tomatos', 'url': 'https://web.archive.org/web/20120125102938/http://www.paleotable.com/2011/01/baked-chicken-with-roasted-tomatoes.html' },
|
||||||
|
{ 'name': 'blackened chicken', 'url': 'https://web.archive.org/web/20120420232533/http://www.paleotable.com/2011/02/blackened-chicken.html' },
|
||||||
|
{ 'name': 'breaded baked chicken', 'url': 'https://www.tastesoflizzyt.com/paleo-baked-chicken/' },
|
||||||
|
{ 'name': 'chicken and avocado tostadas', 'url': 'https://web.archive.org/web/20120707073826/http://www.paleotable.com/2011/03/chicken-and-avocado-tostadas.html' },
|
||||||
|
{ 'name': 'sausages and pepperonata', 'url': 'https://web.archive.org/web/20120707071653/http://www.paleotable.com/2011/01/sausages-and-pepperonata.html' },
|
||||||
|
{ 'name': 'Mediterranean Beef Stew with Green Olive Pesto', 'url': 'http://www.health-bent.com/soups/paleo-mediterranean-beef-stew' },
|
||||||
|
{ 'name': 'Beanless Chili', 'url': 'https://web.archive.org/web/20121004005636/http://www.realfoodfreaks.com/2012/04/02/chili-beanless-cuz-i-dont-eat-em/' },
|
||||||
|
{ 'name': 'Grilled Steak with Roasted Jalapeño Chimichurri', 'url': 'https://www.seriouseats.com/recipes/2012/05/ted-allens-grilled-steak-with-roasted-jalepeno.html' },
|
||||||
|
{ 'name': 'Lime and Coconut Chicken', 'url': 'http://chaosinthekitchen.com/2009/07/lime-and-coconut-chicken/' },
|
||||||
|
{ 'name': 'BEEF AND VEGETABLE CHILI', 'url': 'http://www.paleoplan.com/2011/10-12/steak-and-vegetable-chili/' },
|
||||||
|
{ 'name': 'PORK LOIN WITH PEPPERS, MUSHROOMS AND ONIONS', 'url': 'https://www.paleoplan.com/2010/02-23/pork-loin-with-peppers-mushrooms-n-onions/' },
|
||||||
|
{ 'name': 'Melt In Your Mouth Slow Cooker Beef Brisket', 'url': 'https://paleogrubs.com/beef-brisket-recipe' },
|
||||||
|
{ 'name': 'Yummy Sweet Potato Gnocchi', 'url': 'https://paleogrubs.com/sweet-potato-gnocchi-recipe' },
|
||||||
|
{ 'name': 'Simple Beef and Broccoli Stir Fry', 'url': 'https://paleogrubs.com/beef-and-broccoli-recipe' },
|
||||||
|
{ 'name': 'Crockpot Balsamic Roast Beef', 'url': 'https://www.primallyinspired.com/crockpot-balsamic-roast-beef/' },
|
||||||
|
{ 'name': 'Quick & Easy Crock Pot Chili', 'url': 'https://www.healthstartsinthekitchen.com/2014/01/04/quick-crock-pot-chili/' },
|
||||||
|
{ 'name': 'Tom Kha Gai -- Thai Coconut Soup', 'url': 'https://www.angsarap.net/2012/03/08/tom-kha-gai/' },
|
||||||
|
{ 'name': 'Roasted, Herbed Beef Tenderloin Recipe', 'url': 'https://www.chowhound.com/recipes/roasted-herbed-beef-tenderloin-30901' },
|
||||||
|
{ 'name': 'Chorizo Carbonara', 'url': 'https://www.jamieoliver.com/recipes/pasta-recipes/chorizo-carbonara-with-catalan-market-salad/#1EmLf9RiqepY4Z95.97' },
|
||||||
|
{ 'name': 'Roasted Tomato Soup with Fresh Basil', 'url': 'https://civilizedcaveman.com/recipes/soups/roasted-tomato-soup/' },
|
||||||
|
{ 'name': 'swedish meatballs', 'url': 'https://www.paleorunningmomma.com/paleo-swedish-meatballs-whole30/' },
|
||||||
|
{ 'name': 'Tom Yum Gai - hot and sour soup', 'url': 'http://angsarap.net/2013/08/07/tom-yum-gai/' },
|
||||||
|
{ 'name': 'Coconut Lime Chicken Soup', 'url': 'https://paleoleap.com/coconut-lime-chicken-soup/' },
|
||||||
|
{ 'name': 'Hungarian Beef Goulash', 'url': 'https://paleoleap.com/hungarian-beef-goulash/' },
|
||||||
|
{ 'name': 'Beef Bourguignon', 'url': 'http://paleoleap.com/beef-bourguignon/' },
|
||||||
|
{ 'name': 'Minted pesto chicken stir-fry', 'url': 'http://paleoleap.com/quick-and-easy-paleo-stir-fries/' },
|
||||||
|
{ 'name': 'Coconut curry stir-fry', 'url': 'http://paleoleap.com/quick-and-easy-paleo-stir-fries/' },
|
||||||
|
{ 'name': 'Citrus beef salad stir-fry', 'url': 'http://paleoleap.com/quick-and-easy-paleo-stir-fries/' },
|
||||||
|
{ 'name': 'Basil and chilli beef stir-fry', 'url': 'http://paleoleap.com/quick-and-easy-paleo-stir-fries/' },
|
||||||
|
{ 'name': 'a normal chicken stir fry', 'url': '' },
|
||||||
|
{ 'name': 'hunters chicken ( chicken wrapped in bacon / pancetta )', 'url': '' },
|
||||||
|
{ 'name': 'Caribbean Pork Chops with Mango Salsa | Paleo Grubs', 'url': 'https://paleogrubs.com/caribbean-pork-chops-recipe' },
|
||||||
|
{ 'name': 'Paleo Pork Tenderloin with Fig and Balsamic Glaze', 'url': 'http://paleogrubs.com/balsamic-pork-tenderloin-recipe' },
|
||||||
|
{ 'name': 'Chicken Cordon-Bacon', 'url': 'https://fastpaleo.com/recipe/bacon-wrapped-chicken-cordon-bleu/' },
|
||||||
|
{ 'name': 'Grilled Tandoori Chicken', 'url': 'http://cookingweekends.blogspot.com/2012/05/grilled-tandoori-chicken.html' },
|
||||||
|
{ 'name': 'Stuffed Chicken Breast (paleo and grain free)', 'url': 'http://www.cavegirlcuisine.com/recipes/stuffed-chicken-breast/' },
|
||||||
|
{ 'name': 'Lemon Chicken Breast Recipe', 'url': 'https://www.everydaymaven.com/lemon-chicken-breast/' },
|
||||||
|
{ 'name': 'Grilled Lemon Garlic Rosemary Chicken Breasts', 'url': 'https://www.phoenixhelix.com/2013/07/21/grilled-lemon-garlic-rosemary-chicken-breasts/' },
|
||||||
|
{ 'name': 'Paleo Spicy Mustard Crockpot Chicken', 'url': 'https://www.plaidandpaleo.com/2013/10/paleo-spicy-mustard-crockpot-chicken.html' },
|
||||||
|
{ 'name': 'Creamy Paleo Chicken Skillet', 'url': 'http://paleogrubs.com/skillet-chicken-recipe' },
|
||||||
|
{ 'name': 'Sweet and Savory Moroccan Chicken', 'url': 'http://paleogrubs.com/moroccan-chicken-recipe' },
|
||||||
|
{ 'name': 'Simple and Addictive Chicken Kabobs', 'url': 'http://paleogrubs.com/chicken-kabob-recipe' },
|
||||||
|
{ 'name': 'Indian Paleo Stew with Chicken', 'url': 'http://paleogrubs.com/indian-paleo-stew-recipe' },
|
||||||
|
{ 'name': 'Slow-Cooker Swedish Kalops Stew', 'url': 'https://web.archive.org/web/20130501032143/http://www.mylivingnutrition.com/2013/04/11/slow-cooker-swedish-kalops-stew/' },
|
||||||
|
{ 'name': 'Beef, Bacon and Rum Stew', 'url': 'http://domesticsoul.com/2011/12/beef-bacon-rum-stew-recipe.html' },
|
||||||
|
{ 'name': 'Paleo Orange Cinnamon Beef Stew', 'url': 'https://thehealthyfoodie.com/orange-cinnamon-beef-stew/' },
|
||||||
|
{ 'name': 'pepper steak', 'url': 'http://paleoleap.com/pepper-steak/' },
|
||||||
|
{ 'name': 'GARLIC ROASTED COD', 'url': 'http://paleoleap.com/garlic-roasted-cod/' },
|
||||||
|
{ 'name':'Easy Bacon-Wrapped Paleo Meatloaf Muffins', 'url':'https://paleogrubs.com/bacon-wrapped-meatloaf-muffins' },
|
||||||
|
{ 'name':'Easy Ground Beef Stuffed Peppers', 'url':'https://paleogrubs.com/ground-beef-stuffed-peppers' },
|
||||||
|
{ 'name':'Cream of Chicken Soup', 'url':'https://paleogrubs.com/crockpot-cream-of-chicken-soup' },
|
||||||
|
{ 'name':'balsamic grilled chicken with greek style salad', 'url':'https://paleoleap.com/balsamic-grilled-chicken-greek-style-salad/' },
|
||||||
|
{ 'name':'slow cooked hawaiian style kalua pork', 'url':'https://paleoleap.com/slow-cooked-hawaiian-style-kalua-pork/' },
|
||||||
|
{ 'name':'Sweet Thai Chili Chicken With Roasted Peppers', 'url':'http://paleoleap.com/sweet-thai-chili-chicken-roasted-peppers/' },
|
||||||
|
{ 'name':'Steak Ratatouille', 'url':'http://www.jamieoliver.com/recipes/beef-recipes/grilled-steak-ratatouille-saffron-rice/' },
|
||||||
|
{ 'name':'Slow Cooked Balsamic Pork Roast', 'url':'https://paleoleap.com/slow-cooked-balsamic-pork-roast/' },
|
||||||
|
{ 'name':'Seared Cod with Fresh Herb Sauce', 'url':'http://paleoleap.com/seared-cod-fresh-herb-sauce/' },
|
||||||
|
{ 'name':'Honey Ginger Apple Shredded Pork', 'url':'https://paleomg.com/honey-ginger-apple-shredded-pork/' },
|
||||||
|
{ 'name':'Orange Pineapple Pulled Pork', 'url':'http://www.smokedngrilled.com/orange-pineapple-pulled-pork/' }
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
// {'name':'', 'url':''}
|
||||||
|
|
||||||
|
function sendEmail(data, newpath) {
|
||||||
|
const now = new Date();
|
||||||
|
const email = {
|
||||||
|
'to': 'martind2000@gmail.com', 'subject': `Suggestions - ${ dateFormat(now, 'dddd, mmmm dS, yyyy')}`
|
||||||
|
};
|
||||||
|
const template = {
|
||||||
|
'file': `${newpath }/` + 'pug/email.jade', 'locals': data
|
||||||
|
};
|
||||||
|
|
||||||
|
mailer.sendTemplate(email, template, err => {
|
||||||
|
if (err) throw err;
|
||||||
|
logger.info('compiled template email sent');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function sendSMTP(data, newPath) {
|
||||||
|
const now = new Date();
|
||||||
|
|
||||||
|
const html = pug.renderFile( `${newPath }/` + 'pug/email.pug', data);
|
||||||
|
email({
|
||||||
|
'from': 'aida@caliban.io',
|
||||||
|
'to': 'martind2000@gmail.com',
|
||||||
|
'subject': `Suggestions - ${ dateFormat(now, 'dddd, mmmm dS, yyyy')}`,
|
||||||
|
'html': html
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function pugTest(data, newpath) {
|
||||||
|
logger.debug(pug.renderFile( `${newpath }/` + 'pug/email.pug', data));
|
||||||
|
}
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// body
|
||||||
|
|
||||||
|
const usedNumbers = [];
|
||||||
|
const suggestions = [];
|
||||||
|
const data = {};
|
||||||
|
const now = new Date();
|
||||||
|
var options = { 'weekday': 'long', 'year': 'numeric', 'month': 'long', 'day': 'numeric' };
|
||||||
|
do {
|
||||||
|
const randomnumber = Math.floor(Math.random() * menu.length);
|
||||||
|
if (usedNumbers.indexOf(randomnumber) === -1) {
|
||||||
|
usedNumbers.push(randomnumber);
|
||||||
|
suggestions.push(menu[randomnumber]);
|
||||||
|
}
|
||||||
|
} while(usedNumbers.length < 5);
|
||||||
|
|
||||||
|
data.ts = now.toLocaleDateString('en-GB', options);
|
||||||
|
data.suggestions = suggestions;
|
||||||
|
|
||||||
|
// logger.debug(JSON.stringify(data));
|
||||||
|
|
||||||
|
sendSMTP(data, './');
|
||||||
|
}());
|
1141
package-lock.json
generated
Normal file
1141
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
package.json
Normal file
19
package.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "menuizer",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"dateformat": "^3.0.3",
|
||||||
|
"log4js": "^5.1.0",
|
||||||
|
"pug": "^2.0.4",
|
||||||
|
"smtp-email-sender": "^1.0.0",
|
||||||
|
"to-sentence-case": "^1.0.0",
|
||||||
|
"ultrases": "^0.1.3"
|
||||||
|
}
|
||||||
|
}
|
10
pug/email.jade
Normal file
10
pug/email.jade
Normal file
@ -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
|
10
pug/email.pug
Normal file
10
pug/email.pug
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user