diff --git a/.idea/PetitTeton.iml b/.idea/PetitTeton.iml index eb841c2..c956989 100644 --- a/.idea/PetitTeton.iml +++ b/.idea/PetitTeton.iml @@ -4,6 +4,5 @@ - \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml index 50f35e6..d66ffc9 100644 --- a/.idea/jsLibraryMappings.xml +++ b/.idea/jsLibraryMappings.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/libraries/PetitTeton_node_modules.xml b/.idea/libraries/PetitTeton_node_modules.xml deleted file mode 100644 index 06decd4..0000000 --- a/.idea/libraries/PetitTeton_node_modules.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/routes.js b/app/routes.js index 7577a10..3805452 100644 --- a/app/routes.js +++ b/app/routes.js @@ -1,8 +1,11 @@ var ejs = require('ejs'); var fs = require('fs'); var path = require('path'); +var msgpack = require('msgpack5'); var adminPath; +var PRODUCT_LIST_PATH = "VAP_Availability_List_Oct2016.pdf"; + //Notes: //Use res.send or res.sendFile for static resources (like images or html) //Use res.send(ejs.render(htmlStr, viewArgs)) to manually render EJS files @@ -167,476 +170,219 @@ module.exports = function(app, rootPath, passport, smtpTransport, sequelize) { }); // Check for an ejs first even if an html is requested. - app.get('/admin/**/*.html', isLoggedIn, function(req, res) { - var ejs = req.path.substring(0, req.path.length - 4) + ".ejs"; + app.get('/admin/*.html', isLoggedIn, function(req, res) { + var ejs = req.path.substring(0, req.path.length - 4) + "ejs"; //console.log("Checking for an ejs: " + ejs); - fs.stat(ejs, function(err, stats) { + fs.stat(path.join(rootPath, ejs), function(err, stats) { if(!err) { - res.render(ejs); + res.render(path.join(rootPath, ejs)); } else { - res.sendFile(req.path); + res.sendFile(path.join(rootPath, req.path)); + //res.sendFile(req.path); } }); }); - app.get('/admin/user/list', isLoggedIn, function(req, res) { + /* Test code to find all Categories and Subcategories. + sequelize.models.Category.findAll({ + include: + [ + {model: sequelize.models.Subcategory, paranoid: true, as: 'subcategories'} + ], + order: ['name', ['name']] + }).then(function(values) { + console.log(values); + }).catch(function(err) { + console.log(err); + }); + */ + + app.use('/ProductList', function(req, res) { + try { + res.sendFile(path.join(rootPath, PRODUCT_LIST_PATH)); + } + catch(e) { + console.log(e); + } + }); + + //Allows the client to query using the models defined by the application. Returns status codes or the results of the queries. + app.use('/admin/data/:cls/:query', isLoggedIn, function(req, res) { try { if(req.user.admin) { - sequelize.models.User.findAll().then(function(values) { - res.json(values); - }); + //var params = Object.keys(req.body).length == 0 ? req.query : req.body; //Use the Request.query if Request.body is empty. + var params = req.query; + var cls = req.params.cls; + var query = req.params.query; + var model = sequelize.models[cls]; + + //Merge the Request.body parameters into the params object. + //TODO: Can we just use extend? + Object.keys(req.body).forEach(function(key) {params[key] = req.body[key]}); + + if(params.msgpack) { + params = msgpack.decode(params.msgpack); + } + + if(!model) { + res.status(400).end(); + } + else { + res.header("Cache-Control", "no-cache, no-store, must-revalidate"); + res.header("Pragma", "no-cache"); + res.header("Expires", 0); + + switch(query) { + case 'readAll': + case 'findAll': + case 'getAll': { + //Check the params for model references that need to be linked to the correct class. Example: + //{include: [{model: 'Subcategory', paranoid: true, as: 'subcategories'}], order: ['name', ['name']]} + if(params.include) { + var include = params.include; + + for(var includeIndex = 0; includeIndex < include.length; includeIndex++) { + var nextInclude = include[includeIndex]; + + if(nextInclude.model) { + nextInclude.model = sequelize.models[nextInclude.model]; + } + } + } + + model.findAll(params).then(function(values) { + res.json(values); + }).catch(function(err) { + console.log(err); + res.status(400).end(); + }); + break; + } + case 'read': + case 'readOne': + case 'readFirst': + case 'find': + case 'findOne': + case 'findFirst': + case 'get': + case 'getFirst': + case 'getOne': { + //Check the params for model references that need to be linked to the correct class. Example: + //{include: [{model: 'Subcategory', paranoid: true, as: 'subcategories'}], order: ['name', ['name']]} + if(params.include) { + var include = params.include; + + for(var includeIndex = 0; includeIndex < include.length; includeIndex++) { + var nextInclude = include[includeIndex]; + + if(nextInclude.model) { + nextInclude.model = sequelize.models[nextInclude.model]; + } + } + } + + model.find(params).then(function(value) { + res.json(value); + }).catch(function(err) { + console.log(err); + res.status(400).end(); + }); + break; + } + case 'create': + case 'insert': + case 'new': { + model.create(params).then(function(user) { + //res.json({result: 'success'}); + res.status(200).end(); + }).catch(function(err) { + console.log(err); + //res.json({result: 'duplicate'}); + res.status(400).end(); + }); + break; + } + case 'delete': + case 'remove': + case 'destroy': { + //params: {where: {id: myId}} + model.destroy(params).then(function(count) { + if(count == 1) { + //res.json({result: 'success'}); + res.status(200).end(); + } + else { + //res.json({result: 'failure'}); + res.status(400).end(); + } + }).catch(function(err) { + console.log(err); + //res.json({result: 'failure'}); + res.status(400).end(); + }); + break; + } + case 'restore': { + model.find(params).then(function(value) { + if(value) { + value.deletedAt = null; + value.save().then(function() { + res.status(200).end(); + }).catch(function(err) { + console.log(err); + res.status(400).end(); + }); + } + else { + res.status(400).end(); + } + }).catch(function(err) { + console.log(err); + res.status(400).end(); + }); + break; + } + case 'update': + case 'change': + case 'edit': + case 'modify': { + model.findById(params.id, {}).then(function(myModel) { + for(var key in params) { + if(key != 'id') { + myModel[key] = params[key]; + } + } + + return myModel.save(); + }).then(function() { + //res.json({result: 'success'}); + res.status(200).end(); + }).catch(function(err) { + console.log(err); + //res.json({result: 'failure'}); + res.status(400).end(); + }); + break; + } + default: { + res.status(400).end(); + break; + } + } + } } else { //TODO: Return some kind of error. res.status(400).end(); } } - catch(e) {console.log(e);} + catch(e) {console.log(e); res.status(400).end();} }); - app.post('/admin/user/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var login = req.body.login; - var password = req.body.password; - - sequelize.models.User.create({ - login: login, - password: sequelize.models.User.generateHash(password), - admin: true - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/user/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var userId = req.body.id; - - /* This isn't quite right.. the return of user.destroy() causes problems if the user is not found. Regardless, it is cleaner code to user the class method to destroy the instance rather than load it just to destroy it. - sequelize.models.User.findById(userId, {}).then(function(user) { - if(user) { - return user.destroy(); - } - else { - res.json({result: 'failure'}); - } - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - */ - sequelize.models.User.destroy({where: {id: userId}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/user/changeLogin', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var userId = req.body.id; - var login = req.body.login; - - sequelize.models.User.findById(userId, {}).then(function(user) { - user.login = login; - return user.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/user/resetPassword', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var userId = req.body.id; - var password = req.body.password; - - sequelize.models.User.findById(userId, {}).then(function(user) { - user.password = sequelize.models.User.generateHash(password); - return user.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.get('/admin/venues/list', isLoggedIn, function(req, res) { - try { - var showDeleted = req.query.showDeleted == 'true'; - - sequelize.models.Venue.findAll({paranoid: !showDeleted}).then(function(values) { - res.json(values); - }); - } - catch(e) {console.log(e);} - }); - - app.post('/admin/venues/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var name = req.body.name; - - sequelize.models.Venue.create({ - name: name - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/venues/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - - sequelize.models.Venue.destroy({where: {id: id}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/venues/edit', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - var name = req.body.name; - - sequelize.models.Venue.findById(id, {}).then(function(venue) { - venue.name = name; - return venue.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.get('/admin/measures/list', isLoggedIn, function(req, res) { - try { - var showDeleted = req.query.showDeleted == 'true'; - - sequelize.models.Measure.findAll({paranoid: !showDeleted}).then(function(values) { - res.json(values); - }); - } - catch(e) {console.log(e);} - }); - - app.post('/admin/measures/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var name = req.body.name; - var postfix = req.body.postfix; - - sequelize.models.Measure.create({ - name: name, - postfix: postfix - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/measures/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - - sequelize.models.Measure.destroy({where: {id: id}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/measures/edit', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - var name = req.body.name; - var postfix = req.body.postfix; - - sequelize.models.Measure.findById(id, {}).then(function(measure) { - measure.name = name; - measure.postfix = postfix; - return measure.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.get('/admin/categories/list', isLoggedIn, function(req, res) { - try { - var showDeleted = req.query.showDeleted == 'true'; - - sequelize.models.Category.findAll({paranoid: !showDeleted}).then(function(values) { - res.json(values); - }); - } - catch(e) {console.log(e);} - }); - - app.post('/admin/categories/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var name = req.body.name; - - sequelize.models.Category.create({ - name: name - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/categories/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - - sequelize.models.Category.destroy({where: {id: id}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/categories/edit', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - var name = req.body.name; - - sequelize.models.Category.findById(id, {}).then(function(category) { - category.name = name; - return category.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.get('/admin/subcategories/list', isLoggedIn, function(req, res) { - try { - var showDeleted = req.query.showDeleted == 'true'; - - sequelize.models.Subcategory.findAll({paranoid: !showDeleted}).then(function(values) { - res.json(values); - }); - } - catch(e) {console.log(e);} - }); - - app.post('/admin/subcategories/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var name = req.body.name; - - sequelize.models.Subcategory.create({ - name: name - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/subcategories/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - - sequelize.models.Subcategory.destroy({where: {id: id}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/subcategories/edit', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - var name = req.body.name; - - sequelize.models.Subcategory.findById(id, {}).then(function(subcategory) { - subcategory.name = name; - return subcategory.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.get('/admin/items/list', isLoggedIn, function(req, res) { - try { - var showDeleted = req.query.showDeleted == 'true'; - - sequelize.models.Item.findAll({paranoid: !showDeleted}).then(function(values) { - res.json(values); - }); - } - catch(e) {console.log(e);} - }); - - app.post('/admin/items/create', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var name = req.body.name; - var defaultPrice = req.body.defaultPrice; - var measures = req.body.measures; - - sequelize.models.Item.create({ - name: name, - defaultPrice: defaultPrice, - measures: measures - }).then(function(user) { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'duplicate'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/items/delete', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - - sequelize.models.Item.destroy({where: {id: id}}).then(function(count) { - if(count == 1) { - res.json({result: 'success'}); - } - else { - res.json({result: 'failure'}); - } - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - - app.post('/admin/items/edit', isLoggedIn, function(req, res) { - try { - if(req.user.admin) { - var id = req.body.id; - var name = req.body.name; - var defaultPrice = req.body.defaultPrice; - var measures = req.body.measures; - - sequelize.models.Item.findById(id, {}).then(function(item) { - item.name = name; - item.defaultPrice = defaultPrice; - item.measures = measures; - return item.save(); - }).then(function() { - res.json({result: 'success'}); - }).catch(function(err) { - console.log(err); - res.json({result: 'failure'}); - }); - } - } catch(e) {console.log(e);} - }); - + /* app.get('/admin/getCategories', isLoggedIn, function(req, res) { sequelize.models.Category.findAll({attributes: ['id', 'name', 'visible'], order: [['name', 'DESC'], ['visible', 'DESC']]}).then(function(values) { res.json(values); @@ -685,7 +431,7 @@ module.exports = function(app, rootPath, passport, smtpTransport, sequelize) { } }); }); - + */ }; // route middleware to make sure a user is logged in diff --git a/brainstorm.js b/brainstorm.js index 9527ebe..e824d06 100644 --- a/brainstorm.js +++ b/brainstorm.js @@ -1,7 +1,7 @@ //Server side brainstorm. -module.exports = function(app, sequelize) { - var io = require('socket.io')(app); +module.exports = function(server, sequelize) { + var io = require('socket.io')(server); io.on('connection', function(socket) { //TODO: Handle new connections. @@ -13,7 +13,9 @@ module.exports = function(app, sequelize) { var model = sequelize.models[params.class]; if(model) { - + model.findAll().then(function(values) { + + }); } else { diff --git a/downloaded tools/chosen_v1.6.2.zip b/downloaded tools/chosen_v1.6.2.zip new file mode 100644 index 0000000..1723cec Binary files /dev/null and b/downloaded tools/chosen_v1.6.2.zip differ diff --git a/downloaded tools/font-awesome-4.6.3.zip b/downloaded tools/font-awesome-4.6.3.zip new file mode 100644 index 0000000..c1b0367 Binary files /dev/null and b/downloaded tools/font-awesome-4.6.3.zip differ diff --git a/downloaded tools/jquery-validation-1.15.0.zip b/downloaded tools/jquery-validation-1.15.0.zip new file mode 100644 index 0000000..d6f2fe7 Binary files /dev/null and b/downloaded tools/jquery-validation-1.15.0.zip differ diff --git a/downloaded tools/select2-4.0.3.zip b/downloaded tools/select2-4.0.3.zip new file mode 100644 index 0000000..8f5b8b9 Binary files /dev/null and b/downloaded tools/select2-4.0.3.zip differ diff --git a/models/user.js b/models/user.js index fce0365..dfd67d9 100644 --- a/models/user.js +++ b/models/user.js @@ -15,7 +15,10 @@ module.exports = function(sequelize, DataTypes) { type: DataTypes.STRING }, password: { - type: DataTypes.STRING + type: DataTypes.STRING, + set: function(val) { + this.setDataValue('password', sequelize.models.User.generateHash(val)); + } }, admin: { type: DataTypes.BOOLEAN, diff --git a/package.json b/package.json index 94db093..413d875 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,13 @@ "passport-local": "^1.0.0", "pg": "^4.4.3", "pg-hstore": "^2.3.2", - "sequelize": "^3.0", - "sequelize-cli": "^2.4.0", + "sequelize": "latest", + "sequelize-cli": "latest", "serve-favicon": "~2.2.0", "session-file-store": "~0.0.24", "stylus": "~0.42.3", "swig": "~1.4.2", - "socket.io": "^1.4.8" + "socket.io": "^1.4.8", + "msgpack5": "latest" } } diff --git a/public/admin/Venues.html b/public/admin/Venues.html index 2e9d592..3ed6c07 100644 --- a/public/admin/Venues.html +++ b/public/admin/Venues.html @@ -1,5 +1,7 @@
+ +

Manage Venues

@@ -7,14 +9,15 @@ New Edit Delete + Restore
- +
@@ -23,69 +26,85 @@
Name
- -
- -$('.shadow').buildShadow(); - \ No newline at end of file + \ No newline at end of file diff --git a/public/holidays.html b/public/holidays.html index 37fbfd4..3d1a997 100644 --- a/public/holidays.html +++ b/public/holidays.html @@ -9,6 +9,6 @@ Stop by and pick out tasty holiday gifts with color and function! Perfect for any consumer of food products, these beautiful glass jars come complete with tasty contents and feature a built in place to put the bow and card. Friends and family will marvel at the contents and the convenience of not needing to re-gift the items you got this year. --> - + \ No newline at end of file diff --git a/public/index.html b/public/index.html index 6665839..7edd90b 100644 --- a/public/index.html +++ b/public/index.html @@ -25,7 +25,7 @@ - + diff --git a/public/js/jquery.cycle2.js.map b/public/js/jquery.cycle2.js.map new file mode 100644 index 0000000..a686257 --- /dev/null +++ b/public/js/jquery.cycle2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/jquery.cycle2.min.js","sources":["build/jquery.cycle2.js"],"names":["$","lowerCase","s","toLowerCase","version","fn","cycle","options","o","this","length","isReady","each","data","opts","shortName","val","container","log","noop","p","hasOwnProperty","test","match","replace","extend","defaults","timeoutId","paused","_maxZ","maxZ","API","_container","trigger","eventName","args","addInitialSlides","preInitSlideshow","slides","initSlideshow","selector","c","context","slideCount","jquery","find","random","sort","Math","add","tx","transitions","fx","isFunction","preInit","_preInitialized","postInitSlideshow","postInit","slideOpts","pauseObj","calcFirstSlide","css","currSlide","opacity","display","visibility","stackSlides","nextSlide","reverse","pauseOnHover","hover","pause","resume","timeout","getSlideOpts","queueTransition","delay","_initialized","updateView","alreadyPaused","hoverPaused","addClass","clearTimeout","_remainingTimeout","now","_lastQueue","isNaN","undefined","alreadyResumed","removeClass","filter","prepend","len","oldSlideCount","startSlideshow","type","trim","slide","append","buildSlideOpts","initSlide","firstSlideIndex","parseInt","startingSlide","calcNextSlide","roll","calcTx","manual","_tempFx","manualFx","fade","prepareTx","fwd","after","curr","next","busy","manualTrump","stopTransition","_tx","manualSpeed","speed","before","transition","doTransition","currEl","nextEl","callback","animate","animIn","easeIn","easing","cssBefore","animOut","easeOut","cssAfter","sync","specificTimeout","loop","setTimeout","continueAuto","stop","advanceSlide","slideNum","e","index","suggestedZindex","slideCss","speeds","_default","slideClass","isAfter","isDuring","slideActiveClass","eq","hideNonActive","getComponent","name","i","z","getSlideIndex","el","window","console","Array","prototype","join","call","arguments","custom","none","fadeout","scrollHorz","w","width","left","top","zIndex","allowWrap","autoSelector","position","document","ready","jQuery","initAutoHeight","clone","height","sentinelIndex","autoHeight","outerHeight","_autoHeightRatio","calcSentinelIndex","_sentinelIndex","_sentinel","remove","cloneNode","removeAttr","prependTo","max","h","onBefore","outgoing","incoming","autoHeightSpeed","autoHeightEasing","onDestroy","_autoHeightOnResize","off","on","onResize","ratio","t","resizeThrottle","caption","captionTemplate","overlay","overlayTemplate","captionModule","template","html","tmpl","show","hide","empty","c2","cmd","cmdFn","makeArray","cmdArgs","shift","apply","count","prev","destroy","clean","_data","removeData","retainStylesOnDestroy","jump","num","reinit","slideToRemove","push","preventDefault","command","onHashChange","setStartingSlide","hash","_hashFence","location","substring","_onHashChange","loader","addSlide","slideArr","sorter","addFn","a","b","appendTo","imageLoaded","images","is","complete","load","src","buildPagerLink","pagerLink","pagers","pager","pagerTemplate","markup","children","pagerEvent","pagerEventBubble","page","currentTarget","target","pagerFx","pagerActiveClass","slideAdded","nextEvent","disabledClass","prevEvent","swipe","swipeVert","swipeFx","cls","prevBoundry","_prevBoundry","nextBoundry","_nextBoundry","prop","progressive","scriptEl","nextFn","prevFn","prepareTxFn","parseJSON","err","split","RegExp","pop","slice","one","tmplRegex","str","regex","_","j","obj","names"],"mappings":"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","sourceRoot":"http://malsup.github.io/"} \ No newline at end of file diff --git a/public/js/layout.js b/public/js/layout.js index 7f4b888..6cb4bb9 100644 --- a/public/js/layout.js +++ b/public/js/layout.js @@ -185,7 +185,12 @@ function LayoutManager(view) { if(oldUrlObjectFadeOuts) fadeManager.fadeOut(oldUrlObjectFadeOuts); //If the element being shown is set to load upon showing, do the load of the contents now.// - brainstormFramework.load(container[0], viewMetadata.url); + //brainstormFramework.load(container[0], viewMetadata.url); + $.ajax({url: viewMetadata.url, dataType: 'html', async: false}).done(function(data) { + container.html(data); + }).fail(function(error) { + console.log(error); + }); //Some presets via the element's class, to fade things in and out based on the element's style.// for(var index = 0; index < _this.pageClassFades.length; index++) { diff --git a/public/land.html b/public/land.html index 2bbf96b..4571633 100644 --- a/public/land.html +++ b/public/land.html @@ -1,9 +1,9 @@

FARM LAND

-

+

The land we own had been a ranch for generations, part of a much larger spread, and was still a small sheep ranch when we bought it in 2004. In 2011 we bought the neighboring property to preserve our view shed and water source. The two properties used to be one. We now own around 375 acres of steeply benched open grassland cut in vertical swaths by more than seven seasonal creeks that debouch through large culverts beneath Highway 128 into Rancheria Creek which drains into the Pacific. A few miles downriver, the Rancheria runs into the Navarro, a protected watershed. Surrounding the creeks are dense woodlands of many kinds of oak, pepperwood (bay laurel), madrone, incense cedar, toyon, and a few Douglas fir.

-

+

The soils in our area are mostly a mix of clays and rock. In places there is a substratum of Yorkville clay that has the same greenish cast as, and is, a precursor to serpentine rock. In some areas there are good topsoils brought downhill by erosion and weather. All areas are prone to slipping and sliding when the top layer becomes so water saturated that it glides over the underlayment of clay. The benefits of clay are that it is very rich in minerals and nutrients. Of course the downside is that the plants have to access them, and mixing in the compost to make it possible takes lots of hard work. Removing rock is also a never ending task.

@@ -12,23 +12,23 @@

In 2008 we bought a refurbished Aeromotor 24' tall windmill which we put together and installed ourselves. It works beautifully pumping water from an "Indian well" (a 10' deep upended culvert set into water running over clay) uphill to a water tank that then feeds some of our garden plants.

-

+

After tying our existing 2 wells together and connecting them to a water tank above the house and gardens for gravity feed, the second most important improvement we made in preparation for planting was to put up a 5 acre fence surrounding the area we considered most useful for farming. It was clear that this was necessary when large herds of pigs rototilled the wet soil where we intended to plant and gangs of deer ate everything we grew! Within the fence perimeter, we now have nearly an acre of land that we have worked to good fertility. Beyond the fencing we have left the country to wild land for hiking and hunting, and the grazing of cattle at certain times of the year.

Last year we added another water tank to both our house and windmill water. Since the new property wells are better than our farm's, this year, to ensure enough water at the end of the summer season, we connected them to our farm water tanks which are directly 1,000' below.

-

+

The original property came with two smaller barns, a larger barn/garage and a small concrete block 2 bedroom house. We have improved all of the buildings and continue to do so. The new property has a ranch house, guest house, two large barns and a straw bale house on it within a 2 acre perimeter fence.

Late in 2011 we finished construction of and passed all inspections for our commercial kitchen building on the farm. We are in full production of value added foods made from our produce and they are selling well.

In 2006, (the year of the animals!) we purchased our first chickens and waaay over-built a coop. We presently have nearly 100 chickens and five coops. We have become adept at building them and have, after many trials and much error, designed our nearly perfect coop for 20 chickens. The next coop will be constructed on the bed of a decrepit Chevy pickup we found on the new property and moved to the farm. Each coop has a large area of fenced grassland surrounding it for the chickens to roam in at will.

-

+

Also in 2006 we took in 3 "loaner" yaks from a couple who didn't have enough grazing land for them. When we returned them after 6 months, we had fallen in love with yaks and had determined to purchase a starter herd. In 2007 we drove to Colorado and returned with 3 baby yaks, a boy and 2 girls, pulled in an 8'x8' U-Haul trailer. For several months we supplemented their grazing with bottle feeding until they were tame enough to halter and lead. Then we constructed a nine acre fenced area abutting our 5 acre compound in which they graze at will. We added several acres to their grazing land in 2010. One of Kayak's children, Sisa, grazes in a field close to the house.

We have had a succession of farm help over the years, none of whom has stayed for long but from whom we have learned much. This past year we did all our own planning and planting with the help of a local nursery who did our starts. We are in the 3rd year of our SF CSA and interest in it continues to grow steadily.

In spring of 2011 we planted an orchard from 45 apple and pear varieties we grafted on the farm. This year we will put in a new hoop house to expand our growing capabilities in the winter.

-

+

And how and why do we do it?! We love all aspects of creating the farm... the learning, designing, eating, observing, breathing, smelling, laboring, listening, connecting, prioritizing... but mainly the creativity of it. We sometimes jump out of bed eager to go to work and other times are so tired we have to kick ourselves out. Either way we love what we're doing and your responses to it. We hope you'll visit us.

\ No newline at end of file diff --git a/public/main.styl b/public/main.styl index 10e1653..8743c16 100644 --- a/public/main.styl +++ b/public/main.styl @@ -474,11 +474,8 @@ sup, sub { /* Scrolls all five pictures one at a time from right to left. */ .scrollViewport { margin: 0; - /* - width: 805px; - height: 145px; - */ - width: 568px; + max-width: 568px; + width: 100%; height: 100px; overflow: hidden; position: relative; @@ -519,6 +516,12 @@ sup, sub { background: url('images/shadow_130_90.png') no-repeat scroll 0px 0px; } +.shadow { + -webkit-box-shadow: 7px 7px 7px -3px rgba(0,0,0,0.67); + -moz-box-shadow: 7px 7px 7px -3px rgba(0,0,0,0.67); + box-shadow: 7px 7px 7px -3px rgba(0,0,0,0.67); +} + /* Chicken */ #chicken { width: auto; @@ -662,6 +665,7 @@ sup, sub { color: #e40329 !important; } +@require "clearfix" @require "farm" @require "food" @require "animals" @@ -674,7 +678,6 @@ sup, sub { @require "pigs" @require "chicken" @require "markets" -@require "produce" @require "slideshow" @require "visiting" @require "weddings" diff --git a/public/markets.html b/public/markets.html index 484839c..3b9709c 100644 --- a/public/markets.html +++ b/public/markets.html @@ -1,16 +1,18 @@
-

Markets

-

- Much has been learned about the importance of fresh produce in our diets and its importance in connecting us to our community and land. - We at Petit Teton have taken to heart what we have learned and have created a farm in Mendocino County. - We grow fruits and vegetables and make jams, jellies, pickles, chutneys, sauces and soups in our farm's commercial kitchen from produce grown by us. - We also offer eggs from our pasture raised chickens and pork from our pigs. -

-
-
Farmers' Markets
-

- For many years now we've sold our produce at farmers' markets. Currently you'll find us at: +
+

Markets

+

+ Much has been learned about the importance of fresh produce in our diets and its importance in connecting us to our community and land. + We at Petit Teton have taken to heart what we have learned and have created a farm in Mendocino County. + We grow fruits and vegetables and make jams, jellies, pickles, chutneys, sauces and soups in our farm's commercial kitchen from produce grown by us. + We also offer eggs from our pasture raised chickens and pork from our pigs.

+
+
+
+
Farmers' Markets
+
+

For many years now we've sold our produce at farmers' markets. Currently you'll find us at:

  • Mendocino Farmers' Market (May 1st-Oct 31st) Fridays, noon-2pm
  • Boonville Farmers' Market (All Year)* Saturdays, 9-12:30pm @@ -19,21 +21,20 @@
  • * We occasionally miss the Boonville market, but can normally be found at Petit Teton Farm, a few miles south-east on Hwy 128.
-
-
Farm Visits
-

- Visitors to the farm are always welcome. We have an open sign at the top of our drive that is generally accurate, and a main gate that will be standing open. Visitors are welcome to explore the farm, and we're happy to give tours when we have time. There is a lot to see between the yaks, chickens, pigs, rows and rows of vegetables, fruit trees, and fish. When you are done, stop by the commercial kitchen and check out the freshly harvested produce, meat, and canned goodies for sale. -

+
+
+
Farm Visits
+
+

Visitors to the farm are always welcome. We have an open sign at the top of our drive that is generally accurate, and a main gate that will be standing open. Visitors are welcome to explore the farm, and we're happy to give tours when we have time. There is a lot to see between the yaks, chickens, pigs, rows and rows of vegetables, fruit trees, and fish. When you are done, stop by the commercial kitchen and check out the freshly harvested produce, meat, and canned goodies for sale.

-
-
Community Supported Agriculture (CSA)
- -

- Between 2009 and 2013 we delivered a box of fresh seasonal produce and eggs to members of our CSA in our two communities, the Richmond District of San Francisco and the Anderson Valley. We currently do not anticipate starting up the CSA again, although we do still offer an informal CSA in the Anderson Valley. -

+
+
+
Community Supported Agriculture (CSA)
+ +

Between 2009 and 2013 we delivered a box of fresh seasonal produce and eggs to members of our CSA in our two communities, the Richmond District of San Francisco and the Anderson Valley. We currently do not anticipate starting up the CSA again, although we do still offer an informal CSA in the Anderson Valley.

- + \ No newline at end of file diff --git a/public/markets.styl b/public/markets.styl index ee393a7..5f3e391 100644 --- a/public/markets.styl +++ b/public/markets.styl @@ -1,6 +1,45 @@ #markets { .farmVisitSlides, .farmerMarketSlides, .farmVisitSlides img, .farmerMarketSlides img { - width: 300px; - height: 200px; + max-width: 300px; + max-height: 200px; + width: 100%; + } + + .cssImg { + width:240px; + height:160px; + } + + hr { + display: none; + } + + h5 { + margin: 0; + } + + .farmersMarkets, .farmVisits { + min-height: 300px; + } + .csa { + min-height: 200px; + } + + @media (max-width: 700px) { + .farmerMarketSlides, .farmVisitSlides, .csaImg { + float: none; + margin: 0 auto; + display: block; + } + h5 { + text-align: center; + } + hr { + height: 2px; + width: 100%; + background-color: #b3b2ad; + display: block; + margin-top: 40px; + } } } \ No newline at end of file diff --git a/public/pigs.html b/public/pigs.html index 924373e..2f2f521 100644 --- a/public/pigs.html +++ b/public/pigs.html @@ -41,9 +41,8 @@

Call us: 707.684.4146 for details.

-->
- +
- + \ No newline at end of file diff --git a/public/produce.html b/public/produce.html deleted file mode 100644 index 462b0ab..0000000 --- a/public/produce.html +++ /dev/null @@ -1,134 +0,0 @@ -
-

PRODUCE

-

- We grow a cornucopia of fruits and vegetables at Petit Teton. - Below is a listing of the things we have grown over the years. - We do not use chemicals, and we use organic seed where possible (never GMO). - To bring the best quality product to you, we practice biodiversity, make our own compost from crop and animal waste, and rotate crops. - We grow our crops a lot like family farms 100 years ago did, before corporations took over the business of farming. -

- -
    -
  • FRUITS
  • -
  • Apple
  • -
  • Blackberry
  • -
  • Cantaloupe
  • -
  • Honeydew
  • -
  • Jujube
  • -
  • Marionberry
  • -
  • Pear
  • -
  • Persimmon
  • -
  • Quince
  • -
  • Raspberry
  • -
  • Rhubarb
  • -
  • Strawberry
  • -
  • Watermelon
  • -
  • VEGETABLES
  • -
  • Artichoke
  • -
  • Arugula
  • -
  • Asparagus
  • -
  • Beans
  • -
  • Beet
  • -
  • Broccoli
  • -
  • Burdock
  • -
  • Cabbage
  • -
  • Carrot
  • -
  • Cauliflower
  • -
  • Celery
  • -
  • Chard
  • -
  • Choy
  • -
  • Collards
  • -
  • Cucumber
  • -
  • Eggplant
  • -
  • Fennel / Seed
  • -
  • Garlic
  • -
  • Horseradish
  • -
  • Kale
  • -
  • Kohlrabi
  • -
  • Leeks
  • -
  • Lettuce
  • -
  • Mesclun
  • -
-
- -
    -
  • Mustard green
  • -
  • Okra
  • -
  • Onions
  • -
  • Parsnip
  • -
  • Pea Shoots
  • -
  • Peas
  • -
  • Pepper
  • -
  • Potato
  • -
  • Pumpkin
  • -
  • Radicchio
  • -
  • Radish
  • -
  • Rutabaga
  • -
  • Salad mix
  • -
  • Scallions
  • -
  • Shallots
  • -
  • Spinach
  • -
  • Shoots
  • -
  • Summer squash
  • -
  • Tomatillo
  • -
  • Tomato
  • -
  • Turnip
  • -
  • Watercress
  • -
  • Winter squash
  • -
  • HERBS
  • -
  • Anise hyssop
  • -
  • Basil
  • -
  • Chervil
  • -
  • Chives
  • -
  • Cilantro / Coriander
  • -
  • Dill / Seed
  • -
  • Lemon Grass
  • -
  • Marjoram
  • -
  • Mint
  • -
  • Oregano
  • -
  • Parsley
  • -
  • Rosemary
  • -
  • Sage
  • -
  • Shiso
  • -
-
- -
    -
  • Thyme
  • -
  • FLOWERS
  • -
  • Bachelor Button
  • -
  • Calendula
  • -
  • Coreopsis
  • -
  • Daffodil
  • -
  • Forsythia
  • -
  • Iris
  • -
  • Ixia
  • -
  • Lavender
  • -
  • Lilac
  • -
  • Marigold
  • -
  • Paperwhite
  • -
  • Roses
  • -
  • Sunflower
  • -
  • Zinnia
  • -
  • Zulu Princess
  • -
  • BEDDING PLANTS
  • -
  • Begonia
  • -
  • Christmas Cactus
  • -
  • Incense Cedar
  • -
  • Lilac
  • -
  • Night Blooming Cereus
  • -
  • Succulents
  • -
  • HOLIDAY GREENS
  • -
  • Bay Laurel
  • -
  • Doug Fir
  • -
  • Incense Cedar
  • -
  • Madrone
  • -
  • Mistletoe
  • -
  • Toyon
  • -
-
-

-
- To find out what we have available now, please call 707.684.4146 or email. -

-
\ No newline at end of file diff --git a/public/produce.styl b/public/produce.styl deleted file mode 100644 index e69de29..0000000 diff --git a/public/services.html b/public/services.html index 2ab10e7..0ba76d5 100644 --- a/public/services.html +++ b/public/services.html @@ -24,6 +24,6 @@
- + \ No newline at end of file diff --git a/public/shipping.html b/public/shipping.html index dc767c0..5f3a042 100644 --- a/public/shipping.html +++ b/public/shipping.html @@ -15,6 +15,6 @@

We appologize for releasing something was not up to our high standards. Please let us know as soon as possible via phone or email, providing us with a batch number and approximate date of purchase, and we will do our best to fix the situation. We do appreciate getting the item back so we can prevent re-occurances, but please check with us first to avoid any unnecessary shipping. - + \ No newline at end of file diff --git a/public/slideshow.html b/public/slideshow.html index e28a931..9184f21 100644 --- a/public/slideshow.html +++ b/public/slideshow.html @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/public/temp_photos/Sample1.png b/public/temp_photos/Sample1.png deleted file mode 100644 index ab71b6f..0000000 Binary files a/public/temp_photos/Sample1.png and /dev/null differ diff --git a/public/temp_photos/Sample2.png b/public/temp_photos/Sample2.png deleted file mode 100644 index 69fefc5..0000000 Binary files a/public/temp_photos/Sample2.png and /dev/null differ diff --git a/public/temp_photos/Sample3.png b/public/temp_photos/Sample3.png deleted file mode 100644 index 2c9648b..0000000 Binary files a/public/temp_photos/Sample3.png and /dev/null differ diff --git a/public/temp_photos/Sample4.png b/public/temp_photos/Sample4.png deleted file mode 100644 index e7dd9cd..0000000 Binary files a/public/temp_photos/Sample4.png and /dev/null differ diff --git a/public/temp_photos/unspecified b/public/temp_photos/unspecified new file mode 100644 index 0000000..f2f7f56 Binary files /dev/null and b/public/temp_photos/unspecified differ diff --git a/public/todo.html b/public/todo.html deleted file mode 100644 index 371319a..0000000 --- a/public/todo.html +++ /dev/null @@ -1,7 +0,0 @@ -

-

Food:Eggs - Talk about buying spent laying hens (or reference it on the Food:Chickens page).

-

Fix Food:Veggies - I put in something as a place holder.

-

Add Animals:Cows/Pigs/Chickens in again with content that is animal specific (for animal lovers).

-

Update and add in the Holidays main heading with a variety of pages dependant on the time of year. Eggs/Easter, Jams/Christmas, Candied things and rollups year round, etc.

-

Add in the Services:Farm Tours heading again, with content.

-
\ No newline at end of file diff --git a/public/us.html b/public/us.html index ffcb602..f348587 100644 --- a/public/us.html +++ b/public/us.html @@ -2,7 +2,7 @@

About Us

WELCOME TO PETIT TETON FARM

-

+

Hi, we're Nikki and Steve. In 2004, we bought a ranch in Mendocino County's Anderson Valley, 5 acres of which we developed into the Petit Teton Farm, named for a small mountain visible from the entryway. Prior to that, we lived on 27th Avenue off Lake Street in San Francisco for more than 15 years. As the farm has grown, and our family has become involved in the business, we all spend time in both places.

Our original mission was to provide fresh, organically grown, local produce and eggs from our farm to Mendocino County and San Francisco, just 100 miles away. When we realized we couldn't sell everything we grew, we built a commercial kitchen to extend the food's shelf life and increase its value to our customers. Now, each week we sell our farm-made fare, eggs, and produce at Farmers' Markets in both San Francisco and Mendocino County.

Before starting Petit Teton farm with his partner, Nikki, Steve spent 25 years as corporate counsel for Bank of America. He is a life-long Californian; born in Long Beach and grew up in Santa Barbara and San Jose. He graduated from San Jose State University with a BA in Political Science and from the University of San Diego with a JD. Steve passed the California Bar in 1977 and is still an active member. In addition to farming, he and Nikki love to hike in the Sierra Nevada.

@@ -10,29 +10,29 @@

Nikki's son, Cameron, has been working with us since 2008. In the spring of 2012 her other son, Wynne, daughter-in-law, Sarah, and grandchildren, Kellie and Zoey, moved to the ranch to work with us. We are now a family farm.


-

+ +

Cam has a background in finance, and is a member of the CFA Society of SF. He splits his time between the farm and the city. On farm he's involved in most aspects of the business: planning, planting, harvesting, pruning, water systems, landscaping, kitchen work, and all general back-breaking labor. Most Sundays he can be found at our farm booth at the Clement Street Farmers' Market.

When he's not working on the farm business, Cameron continues to practice within the field of finance, in which he has background training. He received a BA in Asian Studies and Japanese from California State University, Sacramento in 2002, and went on to work as a Registered Client Service Representative with a team of Wealth Management brokers at UBS Financial Services, Inc. He received his Chartered Financial Analyst (CFA) designation in 2009, is an active member of the SF CFA Society, and continues today as an active portfolio manager for client accounts. Aside from an interest in farming and finance, Cameron pursues a long-term goal in the field of philanthropy, currently serving as the CF0 of the Petit Teton Foundation and President of the Bay Area Financial Education Foundation (BAFEF).



-

+

Sarah is our kitchen manager. She oversees our canned and prepared foods, producing most of them herself, and enjoys exploring new tastes and combinations for our jams, soups and savory sides. She loves living in northern California and in the Anderson Valley for its small town feel. - -

Born and raised in Anchorage, Alaska, Sarah is well educated with an MBA under her belt. Before switching to culinary arts, she spent many years working in emergency preparedness/response, and still maintains an interest in that field. She counts Anderson Valley as her second-favorite home. She likes the friendly, small-town atmosphere and the Northern California countryside. In her spare time, Sarah writes music, plays piano, and enjoys activities with her family, which includes daughters Kellie and Zoey.

- +

Born and raised in Anchorage, Alaska, Sarah is well educated with an MBA under her belt. Before switching to culinary arts, she spent many years working in emergency preparedness/response, and still maintains an interest in that field. She counts Anderson Valley as her second-favorite home. She likes the friendly, small-town atmosphere and the Northern California countryside. In her spare time, Sarah writes music, plays piano, and enjoys activities with her family, which includes daughters Kellie and Zoey.

+
-

+

Wynne has a software engineering background and uses his knowledge to improve farm efficiency. Recently he has delved into aquaponics in an effort to reduce our water use for growing food. We now have aquaponic systems that recirculate water between fish and plants. He also maintains the farm web site, and is building information systems to help us track our production.

With a background in software engineering specializing in corporate and startup software development, Wynne is a rock the boat to see what happens type of person. On any given day you will find Wynne designing, prototyping, and debugging complex software, social, and mechanical engineering problems. Wynne holds an MBA and a Bachelors of Computer Science, in addition to more than a decade of experience in the software industry, running his own software development and consulting firm, and building a next generation application development framework currently weighing in at a half million lines of code.


-

+

We are the luckiest farm family in the world to have Cliff as our farm infrastructure manager, house and kitchen builder, tool maven, and excavator. He is the best general contractor ever and in his previous life managed the building of many large commercial and civic buildings in Northern California. He has been working with us exclusively for the past 7-8 years and at this point we couldn't do business without him behind the scenes repairing all our mistakes. Although we’ve learned a lot from him over the years, we are still novices in comparison.


-

+

Juan is originally from the small town of La Laguneta in Michoacan Mexico. He has long experience in farming - over ten years as a gardener, harvesting organic grapes, doing maintenance and irrigation and more in a small Philo vineyard. Before coming to the US he also raised cows in the family business in Mexico. During his free time he enjoys the challenge of working on pretty much anything related to repairing and restoring vehicles, and on the upkeep of a year-round garden at his home with his wife. The man doesn't waste a minute and is always on the go. He has become an essential part of all aspects of our farm operation.




diff --git a/public/us.styl b/public/us.styl index e69de29..11259d4 100644 --- a/public/us.styl +++ b/public/us.styl @@ -0,0 +1,3 @@ +#us { + +} \ No newline at end of file diff --git a/public/veggies.html b/public/veggies.html index a3f2d4b..7cd8fe8 100644 --- a/public/veggies.html +++ b/public/veggies.html @@ -1,7 +1,7 @@

PRODUCE

We grow a cornucopia of fruits and vegetables at Petit Teton. Below is a listing of the things we have grown over the years. We do not use chemicals, and we use organic seed where possible (never GMO). To bring the best quality product to you, we practice biodiversity, make our own compost from crop and animal waste, and rotate crops. We grow our crops a lot like family farms 100 years ago did, before corporations took over the business of farming.

- +
  • FRUITS
  • Apple
  • @@ -44,7 +44,7 @@
  • Mesclun
- +
  • Mustard green
  • Okra
  • @@ -86,7 +86,7 @@
  • Shiso
- +
  • Thyme
  • FLOWERS
  • diff --git a/public/veggies.styl b/public/veggies.styl index e69de29..e8fb8fd 100644 --- a/public/veggies.styl +++ b/public/veggies.styl @@ -0,0 +1,7 @@ +#veggies { + .produceTable { + min-width: 200px; + float: left; + width: 33%; + } +} \ No newline at end of file diff --git a/public/visiting.html b/public/visiting.html index 25a8e62..15ba01a 100644 --- a/public/visiting.html +++ b/public/visiting.html @@ -5,7 +5,7 @@

    Click Image To Pause
    -
    +

    Petit Teton is located in the scenic Anderson Valley in Mendocino County on Highway 128 between Cloverdale and the coast just 100 miles from the Golden Gate Bridge. Our property of rolling hills and rocky crags covered in grasses, is cut through by many unnamed seasonal creeks running down to Rancheria Creek. @@ -24,24 +24,24 @@ The address, 18601, and the Petit Teton logo are on a sign at the foot of the short paved road to our farm.

- -$('.visitSlideshow').cycle(); -$('.visitSlideshow img').click(function() { - if($('.visitSlideshow').data('is-paused')) { - $('.visitSlideshow').cycle('resume'); - $('.visitSlideshow').data('is-paused', false); - $('.visitSlideshowInstructions').html("Click Image To Pause"); - //$('.visitSlideshow .cycle-pause').css('background-image', 'images/pause.png'); + \ No newline at end of file diff --git a/public/visiting.styl b/public/visiting.styl index e69de29..a33c06c 100644 --- a/public/visiting.styl +++ b/public/visiting.styl @@ -0,0 +1,13 @@ +#visiting { + .visitSlideshow { + border: 2px solid black; + margin: 0 auto; + width: 100%; + max-width: 560px; + max-height: 398px; + + img { + width: 100%; + } + } +} \ No newline at end of file diff --git a/public/weddings.html b/public/weddings.html index ef45838..f5b3d2a 100644 --- a/public/weddings.html +++ b/public/weddings.html @@ -2,59 +2,58 @@

WEDDING FLOWERS

If you are planning a wedding in the Anderson Valley or on the coast between Yorkville and the town of Mendocino, consider calling Petit Teton for your flowers. The farm is located on a paved road right off Highway 128 four miles outside Boonville. We grow a wide range of cultivated and wild flowers, both perennials and annuals, and many of them are edible which make them perfect cake decorations. They are local, seasonal and organic, and with enough advance notice, we might even be able to plant the variety of your choice. You are also welcome to visit the farm and select the ones that appeal to you.

A few of the varieties we have grown or are growing throughout the year:

-
-
    -
  • Daffodil
  • -
  • Paperwhite
  • -
  • Coral Bell
  • -
  • Calendula
  • -
  • Flowering Quince
  • -
  • Ixia
  • -
  • Jasmine
  • -
  • Iris
  • -
  • Bachelor Button
  • -
  • Sunflower (many varieties)
  • -
  • Black Eyed Susan
  • -
  • Lavender
  • -
  • Nicotiana
  • -
  • Pincushion
  • -
  • Amaranth
  • -
  • Dianthus
  • -
  • Chrysanthemum
  • -
  • Yarrow
  • -
  • Hollyhock
  • -
  • Mexican Sunflower
  • -
  • Hollyhock
  • -
  • Lupine
  • -
+
+
    +
  • Daffodil
  • +
  • Paperwhite
  • +
  • Coral Bell
  • +
  • Calendula
  • +
  • Flowering Quince
  • +
  • Ixia
  • +
  • Jasmine
  • +
  • Iris
  • +
  • Bachelor Button
  • +
  • Sunflower (many varieties)
  • +
  • Black Eyed Susan
  • +
  • Lavender
  • +
  • Nicotiana
  • +
  • Pincushion
  • +
  • Amaranth
  • +
  • Dianthus
  • +
  • Chrysanthemum
  • +
  • Yarrow
  • +
  • Hollyhock
  • +
  • Mexican Sunflower
  • +
  • Hollyhock
  • +
  • Lupine
  • +
+ +
    +
  • Forget-Me-Not
  • +
  • Lavateria
  • +
  • Zinnia
  • +
  • Daisy
  • +
  • Hibiscus
  • +
  • Star Jasmine
  • +
  • Anise Hyssop
  • +
  • Larkspur
  • +
  • Love-in-the-mist
  • +
  • Fever Few
  • +
  • Honeysuckle
  • +
  • Rose
  • +
  • Euonymous
  • +
  • Zulu Princess
  • +
  • Cosmos
  • +
  • Ajuga
  • +
  • Euryops
  • +
  • Canna Lily
  • +
  • Gladiola
  • +
  • Poppy
  • +
  • California Poppy
  • +
  • Verbena
  • +
  • Foxglove
  • +
- -
    -
  • Forget-Me-Not
  • -
  • Lavateria
  • -
  • Zinnia
  • -
  • Daisy
  • -
  • Hibiscus
  • -
  • Star Jasmine
  • -
  • Anise Hyssop
  • -
  • Larkspur
  • -
  • Love-in-the-mist
  • -
  • Fever Few
  • -
  • Honeysuckle
  • -
  • Rose
  • -
  • Euonymous
  • -
  • Zulu Princess
  • -
  • Cosmos
  • -
  • Ajuga
  • -
  • Euryops
  • -
  • Canna Lily
  • -
  • Gladiola
  • -
  • Poppy
  • -
  • California Poppy
  • -
  • Verbena
  • -
  • Foxglove
  • -
-

To find out what we may have available when you need them or to ask if we could plant certain varieties for you, please call 707.684.4146 or email.

diff --git a/public/weddings.styl b/public/weddings.styl index e69de29..f1fbd25 100644 --- a/public/weddings.styl +++ b/public/weddings.styl @@ -0,0 +1,14 @@ +#weddings { + .col2 { + //position: absolute; + //left: 300px; + //top: 0px; + float: left; + width: 50%; + min-width: 280px; + } + .col1 { + float: left; + min-width: 280px; + } +} \ No newline at end of file diff --git a/public/yaks.html b/public/yaks.html index c6fc8d9..1ec82b5 100644 --- a/public/yaks.html +++ b/public/yaks.html @@ -1,21 +1,9 @@

YAKS

-

- - Petit Teton Farm maintains a small yak herd - aka "hippy cows". At present we have 2 adult females, one adult male, an adolescent female and a female baby. The original three, the adult females and male, were purchased from a herd in Colorado six years ago. They are registered with the International Yak Association, are genetically mostly "yak" (not a cow/yak mix), and all have the "golden" gene, meaning it would be possible for their offspring to have brown hair, very rare in the wild, instead of the standard black. -

-

- Now that our yaks have reached breeding age we are interested in selling the youngsters once they are weaned. Yaks are excellent grazers - they eat and drink less than cattle. Because they are not as heavy as cattle their impact on the land is less. They tend not to test fences, and they birth easily without need of a vet. -

-

- Most yak herds are found in the high country of Montana and Colorado. If you live in California and have an interest in starting a yak herd or just having one as a pet or visiting some, we are in Mendocino County (Northern CA), a lot closer than Colorado. -

- +
+

Petit Teton Farm maintains a small yak herd - aka "hippy cows". At present we have 2 adult females, one adult male, an adolescent female and a female baby. The original three, the adult females and male, were purchased from a herd in Colorado six years ago. They are registered with the International Yak Association, are genetically mostly "yak" (not a cow/yak mix), and all have the "golden" gene, meaning it would be possible for their offspring to have brown hair, very rare in the wild, instead of the standard black.

+

Now that our yaks have reached breeding age we are interested in selling the youngsters once they are weaned. Yaks are excellent grazers - they eat and drink less than cattle. Because they are not as heavy as cattle their impact on the land is less. They tend not to test fences, and they birth easily without need of a vet.

+

Most yak herds are found in the high country of Montana and Colorado. If you live in California and have an interest in starting a yak herd or just having one as a pet or visiting some, we are in Mendocino County (Northern CA), a lot closer than Colorado.

-

- To find out what we have available now, please call 707.684.4146 or email. -

-
- -$('.shadow').buildShadow(); - \ No newline at end of file +

To find out what we have available now, please call 707.684.4146 or email.

+
\ No newline at end of file diff --git a/public/yaks.styl b/public/yaks.styl index e69de29..79bc561 100644 --- a/public/yaks.styl +++ b/public/yaks.styl @@ -0,0 +1,17 @@ +#yaks { + .yak { + float: left; + margin: 6px 14px 10px 0px; + max-width: 326px; + width: 100%; + } + + @media (max-width: 700px) { + .yak { + float: none; + } + .yakContainer { + text-align: center; + } + } +} \ No newline at end of file diff --git a/server.js b/server.js index 0c1f668..25b6081 100644 --- a/server.js +++ b/server.js @@ -1,8 +1,10 @@ #!/usr/bin/env node +var http = require("http"); var express = require('express'); -var app = express(); -var port = process.env.PORT || 8088; +var app = module.exports.app = express(); +var server = http.createServer(app); +var port = process.env.PORT || 8089; var passport = require('passport'); var flash = require('connect-flash'); var path = require('path'); @@ -73,7 +75,7 @@ var models = require("./models"); require('./app/initialData.js')(models.sequelize); //Setup the brainstorm communications system. - require('./brainstorm.js')(app, models.sequelize); + //require('./brainstorm.js')(server, models.sequelize); //Ensure we have an endsWith method in String. String.prototype.endsWith = function(suffix) { @@ -81,7 +83,7 @@ var models = require("./models"); }; //Launch - app.listen(port); + server.listen(port); console.log('The magic happens on port ' + port); console.log("Root Path: " + rootPath); console.log("Time now is: " + moment(new Date()).format("MMM Do YYYY, h:mm:ss a"));