├── views ├── partials │ ├── footer.ejs │ └── header.ejs ├── comments │ ├── new.ejs │ └── edit.ejs ├── login.ejs ├── register.ejs ├── campgrounds │ ├── edit.ejs │ ├── index.ejs │ ├── new.ejs │ └── show.ejs └── landing.ejs ├── models ├── user.js ├── comment.js └── campground.js ├── package.json ├── README.md ├── public └── assets │ ├── newCampground.css │ ├── showCampground.css │ ├── campgrounds.css │ └── landing.css ├── routes ├── index.js ├── comments.js └── campgrounds.js ├── app.js ├── middleware └── index.js └── seeds.js /views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | -------------------------------------------------------------------------------- /models/user.js: -------------------------------------------------------------------------------- 1 | var mongoose = require("mongoose"); 2 | var passportLocalMongoose=require("passport-local-mongoose"); 3 | 4 | var UserSchema = new mongoose.Schema({ 5 | username: String, 6 | password: String 7 | }) 8 | 9 | UserSchema.plugin(passportLocalMongoose); 10 | 11 | module.exports=mongoose.model("User",UserSchema); -------------------------------------------------------------------------------- /models/comment.js: -------------------------------------------------------------------------------- 1 | var mongoose = require("mongoose"); 2 | var commentSchema = mongoose.Schema({ 3 | text: String, 4 | author: { 5 | id: { 6 | type: mongoose.Schema.Types.ObjectId, 7 | ref: "User" 8 | }, 9 | username: String 10 | } 11 | }); 12 | 13 | module.exports=mongoose.model("Comment",commentSchema); -------------------------------------------------------------------------------- /models/campground.js: -------------------------------------------------------------------------------- 1 | var mongoose = require("mongoose"); 2 | 3 | var campgroundSchema = new mongoose.Schema({ 4 | name: String, 5 | image: String, 6 | description: String, 7 | author: { 8 | id: { 9 | type: mongoose.Schema.Types.ObjectId, 10 | ref: "User" 11 | }, 12 | username: String 13 | }, 14 | comments: [ 15 | { 16 | type: mongoose.Schema.Types.ObjectId, 17 | ref: "Comment" 18 | } 19 | ] 20 | }); 21 | 22 | module.exports = mongoose.model("Campground",campgroundSchema); 23 | -------------------------------------------------------------------------------- /views/comments/new.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 | 4 |
5 |
6 |

Add New Comment to <%= campground.name %>

7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 |
15 |
16 |
17 |
18 | 19 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /views/comments/edit.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 |
4 |
5 |

Edit Comment

6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 |
14 |
15 |
16 |
17 | 18 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "yelpcamp", 3 | "version": "1.0.0", 4 | "description": "Its a Full Stack Website for finding Camping grounds.", 5 | "main": "app.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node app.js" 9 | }, 10 | "author": "Arnab Poddar", 11 | "license": "ISC", 12 | "dependencies": { 13 | "body": "^5.1.0", 14 | "body-parser": "^1.19.0", 15 | "connect-flash": "^0.1.1", 16 | "ejs": "^3.0.2", 17 | "express": "^4.17.1", 18 | "express-session": "^1.17.0", 19 | "method-override": "^3.0.0", 20 | "mongodb": "^3.5.5", 21 | "mongoose": "^5.9.7", 22 | "parser": "^0.1.4", 23 | "passport": "^0.4.1", 24 | "passport-local": "^1.0.0", 25 | "passport-local-mongoose": "^6.0.1" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /views/login.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('./partials/header') %> 2 | 3 |
4 |
5 |

Login Form

6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 | 17 |
18 |
19 |

Don't have an account yet?Create one by clicking here

20 |
21 |
22 | 23 | 24 | 25 | 26 | <%- include ('\partials/footer') %> -------------------------------------------------------------------------------- /views/register.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('./partials/header') %> 2 | 3 |
4 |
5 |

Create an AngelCamp account and gain access to Campkeeper,comments, and much more.

6 |

SignUp Form

7 |
8 |
9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 |
17 | 18 |
19 |
20 |
21 |
22 | 23 | 24 | <%- include ('\partials/footer') %> -------------------------------------------------------------------------------- /views/campgrounds/edit.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 |
4 |
5 |

Edit <%= campground.name %>

6 |
7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 |
22 |
23 |
24 |
25 | 26 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /views/landing.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | AngelCamp 10 | 11 | 12 | 13 |
14 |

AngelCamp

15 |

Rediscover The Joy Of Camping

16 |
17 | Enter 18 |
19 |
20 | 21 | 28 | 29 | <%- include('partials/footer'); -%> 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AngelCamp 2 | This is a node.js application which let's users browse through various camping areas posted by other users and can post their own campground too.Users can also post comments to any campground. 3 | 4 | Live Demo 5 | 6 | To see the app in action, go to https://mysterious-thicket-79829.herokuapp.com/ 7 | 8 | # Features 9 | 10 | ## Authentication: 11 | 12 | User login with username and password 13 | 14 | Admin sign-up 15 | 16 | 17 | ## Authorization: 18 | 19 | One cannot edit or delete posts and comments created by other users 20 | 21 | 22 | ## Manage campground posts and comments 23 | 24 | Create campground and post comments 25 | 26 | Edit or delete campground by it's owner 27 | 28 | Edit or delete comments by it's writer 29 | 30 | Flash messages responding to users' interaction with the app 31 | 32 | Responsive web design 33 | 34 | 35 | # Built with 36 | 37 | ## Front-end 38 | 39 | ejs 40 | 41 | Bootstrap 42 | 43 | ## Back-end 44 | 45 | node.js 46 | 47 | express 48 | 49 | mongoDB 50 | 51 | mongoose 52 | 53 | passport 54 | 55 | passport-local 56 | 57 | express-session 58 | 59 | method-override 60 | 61 | connect-flash 62 | 63 | ## Deployment 64 | 65 | Heroku 66 | 67 | -------------------------------------------------------------------------------- /views/campgrounds/index.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 | 4 | 5 |
6 | 13 | 14 |
15 | <% campgrounds.forEach(function(camp) 16 | { 17 | %>
18 |
19 | 20 |
21 |
22 |

<%= camp.name %>

23 |
24 |
25 |
26 |
<% 27 | }) %> 28 |
29 | 30 | 31 |
32 | 33 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /views/campgrounds/new.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 |
4 | 28 |
29 | 30 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /public/assets/newCampground.css: -------------------------------------------------------------------------------- 1 | .campdetails 2 | { 3 | margin-top: 100px; 4 | } 5 | #header-login .campdetails 6 | { 7 | margin-top: 40px; 8 | } 9 | .campdetails h3 10 | { 11 | font-family: 'Milonga', cursive; 12 | font-size: 30px; 13 | text-align: center; 14 | margin-bottom: 50px; 15 | } 16 | 17 | form div 18 | { 19 | text-align: center; 20 | margin: 10px; 21 | } 22 | 23 | form div label 24 | { 25 | font-size: 20px; 26 | margin: 20px; 27 | } 28 | 29 | 30 | form div input 31 | { 32 | height: 40px; 33 | width: 400px; 34 | border: 2px solid rgb(92, 61, 3); 35 | border-radius: 20px; 36 | padding: 5px 20px; 37 | font-size: 20px; 38 | outline: none; 39 | font-family: Georgia, 'Times New Roman', Times, serif; 40 | } 41 | 42 | 43 | form div button 44 | { 45 | height: 40px; 46 | width: 100px; 47 | border: 2px solid rgb(92, 61, 3); 48 | border-radius: 20px; 49 | margin: 10px; 50 | outline: none; 51 | font-family: Georgia, 'Times New Roman', Times, serif; 52 | color: rgb(92, 61, 3); 53 | font-size: 15px; 54 | transition: all 0.5s; 55 | } 56 | 57 | form div button:hover 58 | { 59 | background-color: rgb(92, 61, 3); 60 | color: #fff; 61 | } 62 | 63 | #header-login p 64 | { 65 | margin-top: 40px; 66 | text-align: center; 67 | } -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var router = express.Router(); 3 | var passport = require("passport"); 4 | var User =require("../models/user"); 5 | 6 | router.get("/",function(req,res) 7 | { 8 | res.render("landing"); 9 | }) 10 | 11 | 12 | 13 | 14 | 15 | //AUTH ROUTES 16 | 17 | router.get("/register",function(req,res) 18 | { 19 | res.render("register"); 20 | }) 21 | 22 | router.post("/register",function(req,res) 23 | { 24 | var newUser= new User({username: req.body.username}); 25 | User.register(newUser,req.body.password,function(err,user){ 26 | if(err) 27 | { 28 | req.flash("error", err.message); 29 | return res.render("register") 30 | } 31 | passport.authenticate("local")(req,res,function() 32 | { 33 | req.flash("success", "Welcome "+newUser.username+"! You have Successfully Signed Up") 34 | res.redirect("/campgrounds"); 35 | }) 36 | }); 37 | }); 38 | 39 | //show login form 40 | router.get("/login",function(req,res) 41 | { 42 | res.render("login"); 43 | }) 44 | 45 | 46 | router.post("/login",passport.authenticate("local", 47 | { 48 | successRedirect: "/campgrounds", 49 | failureRedirect: "/login" 50 | }),function(req,res){ 51 | }) 52 | 53 | router.get("/logout",function(req,res) 54 | { 55 | req.logout(); 56 | req.flash("success", "Logged you out!"); 57 | res.redirect("/campgrounds"); 58 | }) 59 | 60 | function isLoggedIn(req,res,next){ 61 | if(req.isAuthenticated()) 62 | { 63 | return next(); 64 | } 65 | res.redirect("/login") 66 | } 67 | 68 | module.exports=router; -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var app = express(); 3 | app.set("view engine","ejs"); 4 | var bodyParser = require("body-parser"); 5 | var mongoose = require("mongoose"); 6 | var passport=require("passport"), 7 | LocalStrategy=require("passport-local"), 8 | Comment=require("./models/comment"); 9 | var User=require("./models/user"); 10 | mongoose.set('useNewUrlParser', true); 11 | mongoose.set('useUnifiedTopology', true); 12 | var flash=require("connect-flash"); 13 | 14 | methodOverride = require("method-override"); 15 | 16 | //requiring routes 17 | var commentRoutes = require("./routes/comments"); 18 | var campgroundRoutes = require("./routes/campgrounds"); 19 | var indexRoutes = require("./routes/index"); 20 | 21 | 22 | 23 | Campground=require("./models/campground"); 24 | seedDB=require("./seeds") 25 | seedDB(); 26 | 27 | var commentRoutes = require("./routes/comments") 28 | 29 | var url=process.env.DATABASEURL || "mongodb://localhost/yelpcamp" 30 | mongoose.connect(url); 31 | 32 | 33 | app.use(require("express-session")({ 34 | secret: "Its a secret", 35 | resave: false, 36 | saveUninitialized: false 37 | })) 38 | app.use('/public', express.static('public')); 39 | app.use(passport.initialize()); 40 | app.use(passport.session()); 41 | passport.use(new LocalStrategy(User.authenticate())); 42 | passport.serializeUser(User.serializeUser()); 43 | passport.deserializeUser(User.deserializeUser()); 44 | 45 | app.use(methodOverride("_method")); 46 | app.use(flash()); 47 | 48 | 49 | app.use(bodyParser.urlencoded({ 50 | extended: true 51 | })); 52 | app.use(function(req,res,next) 53 | { 54 | res.locals.currentUser = req.user; 55 | res.locals.error=req.flash("error"); 56 | res.locals.success=req.flash("success"); 57 | next(); 58 | }) 59 | 60 | 61 | app.use("/", indexRoutes); 62 | app.use("/campgrounds", campgroundRoutes); 63 | app.use("/campgrounds/:id/comments",commentRoutes); 64 | 65 | 66 | 67 | app.listen(process.env.PORT, process.env.IP,function() //replace process.env.PORT, process.env.IP with 5000 if running in local 68 | { 69 | console.log("Serving AngelCamp"); 70 | }) 71 | -------------------------------------------------------------------------------- /middleware/index.js: -------------------------------------------------------------------------------- 1 | var Campground=require("../models/campground"); 2 | var Comment = require("../models/comment"); 3 | 4 | var middlewareObj={}; 5 | 6 | middlewareObj.checkCampgroundOwnership = function(req,res,next) 7 | { 8 | if(req.isAuthenticated()) 9 | { 10 | Campground.findById(req.params.id, function(err, foundCampground) 11 | { 12 | if(err) 13 | res.redirect("back"); 14 | else 15 | { 16 | if(req.user._id.equals(foundCampground.author.id)) //we cant use === because campground author is a mongoose object while user id is a string 17 | next(); 18 | else 19 | { 20 | req.flash("error", "You don't own the Campground!") 21 | res.redirect("back"); 22 | } 23 | } 24 | }) 25 | } 26 | else 27 | { 28 | req.flash("error", "Please Login First"); 29 | res.redirect("back"); 30 | } 31 | 32 | } 33 | 34 | middlewareObj.checkCommentOwnership=function(req,res,next) 35 | { 36 | if(req.isAuthenticated()) 37 | { 38 | Comment.findById(req.params.comment_id, function(err, foundComment) 39 | { 40 | if(err) 41 | { 42 | req.flash("error", "Comment Not Found!") 43 | res.redirect("back"); 44 | } 45 | else 46 | { 47 | if(req.user._id.equals(foundComment.author.id)) //we cant use === because campground author is a mongoose object while user id is a string 48 | next(); 49 | else 50 | { 51 | req.flash("error", "You have not written this comment!") 52 | res.redirect("back"); 53 | } 54 | } 55 | }) 56 | } 57 | else 58 | { 59 | req.flash("error", "Please Login First") 60 | res.redirect("back"); 61 | } 62 | } 63 | 64 | middlewareObj.isLoggedIn = function(req, res, next) 65 | { 66 | if(req.isAuthenticated()) 67 | { 68 | return next(); 69 | } 70 | req.flash("error","Please Login First!") 71 | res.redirect("/login") 72 | } 73 | 74 | module.exports = middlewareObj -------------------------------------------------------------------------------- /public/assets/showCampground.css: -------------------------------------------------------------------------------- 1 | body .col-md-9 2 | { 3 | padding: 0; 4 | } 5 | 6 | .camp-show 7 | { 8 | background-color: #E2C74B; 9 | } 10 | .camp .thumbnail 11 | { 12 | width: 100%; 13 | background-color: #E2C74B; 14 | border: none; 15 | } 16 | 17 | .camp .thumbnail img 18 | { 19 | width: 100%; 20 | } 21 | 22 | body .lead 23 | { 24 | margin-top: 20vh; 25 | font-family: 'Milonga', cursive; 26 | text-align: center; 27 | background-color: #E2C74B; 28 | font-size: 40px; 29 | } 30 | body .well 31 | { 32 | background-color: #E2C74B; 33 | border: none; 34 | box-shadow: none; 35 | } 36 | 37 | body .list-group li 38 | { 39 | background-color: #E2C74B; 40 | font-family:Georgia, 'Times New Roman', Times, serif; 41 | font-size: 30px; 42 | border: none; 43 | } 44 | 45 | body .caption-full 46 | { 47 | margin: 10px; 48 | } 49 | 50 | body .caption-full p 51 | { 52 | font-size: 18px; 53 | } 54 | 55 | body .well .btn 56 | { 57 | display: inline-block; 58 | } 59 | 60 | body .camp form 61 | { 62 | display: inline; 63 | text-align: right; 64 | } 65 | 66 | .new-comment-but 67 | { 68 | text-align: right; 69 | margin-top: 30px; 70 | } 71 | 72 | .new-comment-but .but 73 | { 74 | height: 80px; 75 | font-size: 15px; 76 | padding: 5px; 77 | } 78 | 79 | body form input .com-del 80 | { 81 | display: inline; 82 | } 83 | 84 | .com-sec 85 | { 86 | margin-top: 80px; 87 | margin-left: 300px; 88 | } 89 | 90 | .comments-sec 91 | { 92 | background-color: #E2C74B;; 93 | } 94 | 95 | .comment 96 | { 97 | border-bottom: 1px solid rgb(92, 61, 3); 98 | margin-bottom: 5px; 99 | padding: 7px; 100 | } 101 | 102 | .author 103 | { 104 | font-family: 'Milonga', cursive; 105 | font-size: 15px; 106 | color: #000; 107 | } 108 | 109 | @media screen and (max-width: 1100px) 110 | { 111 | body .col-md-3 .lead 112 | { 113 | margin-top: 10vh; 114 | } 115 | 116 | .list-group 117 | { 118 | text-align: center; 119 | } 120 | } 121 | 122 | @media screen and (max-width: 800px) 123 | { 124 | body .col-md-3 .lead 125 | { 126 | margin-top: 5vh; 127 | } 128 | body .com-sec 129 | { 130 | margin-left: 0px; 131 | margin-top: 110px; 132 | } 133 | } 134 | @media screen and (max-width: 500px) 135 | { 136 | .text-center div 137 | { 138 | width: 100%; 139 | } 140 | form div input 141 | { 142 | width: 250px; 143 | height: 35px; 144 | font-size: 10px; 145 | } 146 | #header-login 147 | { 148 | width: 90%; 149 | } 150 | } -------------------------------------------------------------------------------- /routes/comments.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var router = express.Router({mergeParams: true}); 3 | var Campground = require("../models/campground") 4 | var Comment = require("../models/comment") 5 | var middleware = require("../middleware") 6 | 7 | //CREATE NEW COMMENT 8 | 9 | router.get("/new",middleware.isLoggedIn, function(req,res) 10 | { 11 | Campground.findById(req.params.id,function(err,campground) 12 | { 13 | if(err) 14 | console.log(err); 15 | else 16 | res.render("comments/new",{campground: campground}); 17 | }) 18 | }) 19 | 20 | router.post("/",middleware.isLoggedIn,function(req,res) 21 | { 22 | Campground.findById(req.params.id,function(err,campground) 23 | { 24 | if(err) 25 | { 26 | console.log(err); 27 | redirect("/campgrounds"); 28 | } 29 | else 30 | { 31 | Comment.create(req.body.comment,function(err,comment) 32 | { 33 | if(err) 34 | console.log(err); 35 | else 36 | { 37 | comment.author.id = req.user._id; 38 | comment.author.username = req.user.username; 39 | comment.save(); 40 | campground.comments.push(comment); 41 | campground.save(); 42 | res.redirect("/campgrounds/"+campground._id); 43 | } 44 | }) 45 | } 46 | }) 47 | 48 | }) 49 | 50 | //EDIT COMMENT 51 | 52 | router.get("/:comment_id/edit", middleware.checkCommentOwnership, function(req,res) 53 | { 54 | Comment.findById(req.params.comment_id, function(err,foundComment) 55 | { 56 | if(err) 57 | res.redirect("back"); 58 | else{ 59 | res.render("comments/edit", {campground_id: req.params.id, comment: foundComment}); 60 | } 61 | }) 62 | }) 63 | 64 | router.put("/:comment_id", middleware.checkCommentOwnership, function(req,res) 65 | { 66 | Comment.findByIdAndUpdate(req.params.comment_id,req.body.comment,function(err, updatedComment) 67 | { 68 | if(err) 69 | res.redirect("back"); 70 | else 71 | { 72 | res.redirect("/campgrounds/" + req.params.id); 73 | } 74 | }) 75 | }) 76 | 77 | //DESTROY COMMENT 78 | 79 | router.delete("/:comment_id",middleware.checkCommentOwnership, function(req,res) 80 | { 81 | Comment.findByIdAndDelete(req.params.comment_id,function(err) 82 | { 83 | if(err) 84 | { 85 | res.redirect("back"); 86 | } 87 | else 88 | { 89 | res.redirect("/campgrounds/"+req.params.id) 90 | } 91 | }) 92 | }) 93 | 94 | 95 | 96 | module.exports=router; -------------------------------------------------------------------------------- /views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | AngelCamp 17 | 18 | 19 | 49 |
50 | <% if(error && error.length>0){ %> 51 | 54 | <%}%> 55 | <% if(success && success.length>0){ %> 56 | 59 | <%}%> 60 |
61 | -------------------------------------------------------------------------------- /views/campgrounds/show.ejs: -------------------------------------------------------------------------------- 1 | <%- include ('../partials/header') %> 2 | 3 |
4 |
5 |
6 |

Camp Details

7 |
8 |
  • Camp Name - <%= campground.name %>
  • 9 |
  • Camp Owner - <%= campground.author.username %>
  • 10 |
    11 |
    12 |
    13 |
    14 | 15 |
    16 |

    17 |

    <%= campground.description %>

    18 | <% if(currentUser && campground.author.id.equals(currentUser._id)){%> 19 | Edit 20 |
    21 | 22 |
    23 | <% }%> 24 |
    25 |
    26 |
    27 |
    28 |
    29 |
    30 |

    Comments

    31 |
    32 | Add New Comment 33 |
    34 |
    35 |
    36 | <% campground.comments.forEach(function(comment){%> 37 |
    38 |

    <%= comment.author.username %>

    39 | 40 |

    41 | <%= comment.text %> 42 |

    43 | <% if(currentUser && comment.author.id.equals(currentUser._id)){%> 44 | 46 | Edit 47 | 48 |
    49 | 50 |
    51 | <% }%> 52 |
    53 | <%}) 54 | %> 55 |
    56 |
    57 |
    58 |
    59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | <%- include ('../partials/footer') %> -------------------------------------------------------------------------------- /public/assets/campgrounds.css: -------------------------------------------------------------------------------- 1 | body .navbar-inverse 2 | { 3 | background-color: #E2C74B; 4 | border-color: #E2C74B; 5 | } 6 | body .navbar-inverse .navbar-brand 7 | { 8 | color: rgb(92, 61, 3); 9 | font-family: 'Milonga', cursive; 10 | } 11 | body .navbar-inverse .navbar-nav>li>a 12 | { 13 | color: rgb(92, 61, 3); 14 | font-family:Georgia, 'Times New Roman', Times, serif; 15 | } 16 | body .navbar-inverse .navbar-toggle:focus, 17 | body .navbar-inverse .navbar-toggle:hover 18 | { 19 | background-color: rgb(92, 61, 3); 20 | } 21 | #header 22 | { 23 | background-color: #E2C74B; 24 | color: rgb(92, 61, 3); 25 | } 26 | #header h1 27 | { 28 | font-family: 'Milonga', cursive; 29 | 30 | } 31 | #header-login 32 | { 33 | width: 700px; 34 | background-color: #E2C74B; 35 | color: rgb(92, 61, 3); 36 | } 37 | 38 | .captions 39 | { 40 | font-family:Georgia, 'Times New Roman', Times, serif; 41 | color: #fff; 42 | margin-bottom: 20px; 43 | } 44 | 45 | .but 46 | { 47 | height: 40px; 48 | width: 250px; 49 | border: 2px solid rgb(92, 61, 3); 50 | color: rgb(92, 61, 3); 51 | text-align: center; 52 | line-height: 35px; 53 | font-size: 20px; 54 | border-radius: 20px; 55 | transition: all 0.5s; 56 | font-family:Georgia, 'Times New Roman', Times, serif; 57 | margin-top: 35px; 58 | } 59 | 60 | .caption 61 | { 62 | transition: all 0.5s; 63 | } 64 | 65 | body .but a, 66 | .caption a 67 | { 68 | text-decoration: none; 69 | color: rgb(92, 61, 3); 70 | } 71 | 72 | .but:hover 73 | { 74 | background-color: rgb(92, 61, 3); 75 | color: #fff; 76 | cursor: pointer; 77 | text-decoration: none; 78 | } 79 | 80 | body .but a:hover, 81 | .caption a:hover 82 | { 83 | color: #fff; 84 | text-decoration: none; 85 | } 86 | 87 | .caption:hover 88 | { 89 | background-color: rgb(92, 61, 3); 90 | } 91 | 92 | body .thumbnail 93 | { 94 | height: 292px; 95 | width: 350px; 96 | padding: 0; 97 | } 98 | 99 | body .thumbnail a img 100 | { 101 | margin: 0; 102 | width: 100%; 103 | height: 240px; 104 | } 105 | 106 | .camp_block_bottom 107 | { 108 | background-color: #E2C74B; 109 | } 110 | 111 | .camp_block_bottom p 112 | { 113 | margin-bottom: 0; 114 | font-family:Georgia, 'Times New Roman', Times, serif; 115 | } 116 | 117 | body .thumbnail .caption 118 | { 119 | padding-bottom: 5px; 120 | } 121 | 122 | body .caption h4 123 | { 124 | font-family: 'Milonga', cursive; 125 | font-size: 20px; 126 | } 127 | 128 | .camp_block_bottom .but 129 | { 130 | width: 130px; 131 | height: 30px;; 132 | margin: auto auto; 133 | line-height: 25px; 134 | } 135 | 136 | .del-form 137 | { 138 | display: inline; 139 | } 140 | 141 | 142 | @media screen and (max-width: 1100px) 143 | { 144 | body .col-md-4 .thumbnail 145 | { 146 | width: 105%; 147 | } 148 | } 149 | 150 | @media screen and (max-width: 800px) 151 | { 152 | body .col-md-4 .thumbnail 153 | { 154 | width: 100%; 155 | } 156 | } 157 | 158 | -------------------------------------------------------------------------------- /public/assets/landing.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #000; 3 | background-image: linear-gradient(to right, rgba(77, 72, 72, 0.9), rgb(77, 72, 72,0.9)); 4 | } 5 | 6 | div h1{ 7 | font-family: 'Milonga', cursive; 8 | font-size: 70px; 9 | } 10 | 11 | div p{ 12 | font-size: 20px; 13 | font-family:Georgia, 'Times New Roman', Times, serif; 14 | font-weight: 400; 15 | color:#fff; 16 | margin-bottom: 20px; 17 | } 18 | 19 | .landing-button 20 | { 21 | height: 30px; 22 | width: 100px; 23 | border: 2px solid #E2C74B; 24 | color: #E2C74B; 25 | text-align: center; 26 | margin: 0; 27 | margin: 0 auto; 28 | font-size: 20px; 29 | border-radius: 15px; 30 | transition: all 0.5s; 31 | } 32 | 33 | .landing-button:hover 34 | { 35 | background-color: #E2C74B; 36 | } 37 | 38 | .landing-button a 39 | { 40 | color: #E2C74B; 41 | text-decoration: none; 42 | } 43 | 44 | .landing-button a:hover 45 | { 46 | color: #fff; 47 | text-decoration: none; 48 | } 49 | 50 | 51 | #landing-header { 52 | z-index: 1; 53 | position: relative; 54 | text-align: center; 55 | padding-top: 30vh; 56 | } 57 | 58 | #landing-header h1 { 59 | color:#fff; 60 | } 61 | 62 | .slideshow { 63 | position: fixed; 64 | width: 100%; 65 | height: 100%; 66 | top: 0; 67 | left: 0; 68 | z-index: 0; 69 | list-style: none; 70 | margin: 0; 71 | padding: 0; 72 | } 73 | 74 | .slideshow li { 75 | width: 100%; 76 | height: 100%; 77 | position: absolute; 78 | top: 0; 79 | left: 0; 80 | background-size: cover; 81 | background-position: 50% 50%; 82 | background-repeat: no-repeat; 83 | opacity: 0; 84 | z-index: 0; 85 | animation: imageAnimation 25s linear infinite; 86 | } 87 | 88 | .slideshow li:nth-child(1) { 89 | background-image: linear-gradient(to right, rgba(48, 45, 45, 0.5), rgb(48, 45, 45,0.5)), url(http://i.imgur.com/K3mPv14.jpg) 90 | } 91 | .slideshow li:nth-child(2) { 92 | background-image: linear-gradient(to right, rgba(48, 45, 45, 0.5), rgb(48, 45, 45,0.5)),url(http://i.imgur.com/SBEmFpv.jpg); 93 | animation-delay: 5s; 94 | } 95 | .slideshow li:nth-child(3) { 96 | background-image: linear-gradient(to right, rgba(48, 45, 45, 0.5), rgb(48, 45, 45,0.5)),url(http://i.imgur.com/emvhOnb.jpg); 97 | animation-delay: 10s; 98 | } 99 | .slideshow li:nth-child(4) { 100 | background-image: linear-gradient(to right, rgba(48, 45, 45, 0.5), rgb(48, 45, 45,0.5)),url(https://images.unsplash.com/photo-1484960055659-a39d25adcb3c?ixlib=rb-1.2.1&auto=format&fit=crop&w=1350&q=80); 101 | animation-delay: 15s; 102 | } 103 | .slideshow li:nth-child(5) { 104 | background-image: linear-gradient(to right, rgba(48, 45, 45, 0.5), rgb(48, 45, 45,0.5)),url(http://i.imgur.com/TVGe0Ef.jpg); 105 | animation-delay: 20s; 106 | } 107 | 108 | @keyframes imageAnimation { 109 | 0% { 110 | opacity: 0; 111 | animation-timing-function: ease-in; 112 | } 113 | 10% { 114 | opacity: 1; 115 | animation-timing-function: ease-out; 116 | } 117 | 20% { 118 | opacity: 1 119 | } 120 | 30% { 121 | opacity: 0 122 | } 123 | } 124 | 125 | /* Older browser support - .no-cssanimations class added by modernizr */ 126 | .no-cssanimations .slideshow li { 127 | opacity: 1; 128 | } -------------------------------------------------------------------------------- /routes/campgrounds.js: -------------------------------------------------------------------------------- 1 | var express = require("express"); 2 | var router = express.Router(); 3 | var Campground = require("../models/campground"); 4 | var middleware = require("../middleware") 5 | 6 | 7 | //SHOW ALL CAMPGROUNDS 8 | 9 | router.get("/",function(req,res) 10 | { 11 | Campground.find({},function(err, allCampgrounds) 12 | { 13 | if(err){ 14 | console.log(err); 15 | }else{ 16 | res.render("campgrounds/index",{campgrounds:allCampgrounds, currentUser: req.user}); 17 | } 18 | }) 19 | }) 20 | 21 | //CREATE NEW CAMPGROUND 22 | 23 | router.get("/new",middleware.isLoggedIn,function(req,res) 24 | { 25 | res.render("campgrounds/new.ejs"); 26 | }) 27 | 28 | router.post("/",middleware.isLoggedIn,function(req,res) 29 | { 30 | var name=req.body.name; 31 | var image=req.body.image; 32 | var desc=req.body.description; 33 | var author = { 34 | id: req.user._id, 35 | username: req.user.username 36 | } 37 | var newCampground = {name: name, image: image, description: desc, author:author} 38 | Campground.create(newCampground, function(err, newlyCreated) 39 | { 40 | if(err) 41 | { 42 | console.log(err); 43 | } 44 | else 45 | { 46 | req.flash("success", "Successfully created your Campground!") 47 | res.redirect("/campgrounds"); 48 | } 49 | }); 50 | }); 51 | 52 | //SHOW A SPECIFIC CAMPGROUND 53 | 54 | router.get("/:id",function(req,res) 55 | { 56 | Campground.findById(req.params.id).populate("comments").exec(function(err, foundCampground) 57 | { 58 | if(err) 59 | console.log(err); 60 | else 61 | { 62 | res.render("campgrounds/show",{campground: foundCampground, currentUser: req.user}); 63 | } 64 | }) 65 | }); 66 | 67 | //EDIT CAMPGROUND 68 | router.get("/:id/edit",middleware.checkCampgroundOwnership, function(req,res) 69 | { 70 | Campground.findById(req.params.id, function(err, foundCampground) 71 | { 72 | if(req.user._id.equals(foundCampground.author.id)) //we cant use === because campground author is a mongoose object while user id is a string 73 | { 74 | res.render("campgrounds/edit", {campground: foundCampground}) 75 | } 76 | }); 77 | }); 78 | 79 | router.put("/:id", middleware.checkCampgroundOwnership, function(req,res) 80 | { 81 | Campground.findByIdAndUpdate(req.params.id, req.body.campground,function(err, updatedCampground) 82 | { 83 | if(err) 84 | res.redirect("/campgrounds"); 85 | else 86 | { 87 | req.flash("success", "You have Successfully edited your Campground!"); 88 | res.redirect("/campgrounds/"+ req.params.id); 89 | } 90 | }) 91 | }) 92 | 93 | //Destroy Campground 94 | 95 | router.delete("/:id",middleware.checkCampgroundOwnership, function(req,res) 96 | { 97 | Campground.findByIdAndRemove(req.params.id, function(err) 98 | { 99 | if(err) 100 | res.redirect("/campgrounds"); 101 | else 102 | { 103 | req.flash("success", "You have Successfully deleted your Campground!") 104 | res.redirect("/campgrounds"); 105 | } 106 | }) 107 | }) 108 | 109 | 110 | 111 | 112 | module.exports=router; -------------------------------------------------------------------------------- /seeds.js: -------------------------------------------------------------------------------- 1 | var mongoose = require("mongoose"); 2 | var Campground=require("./models/campground"); 3 | var Comment=require("./models/comment"); 4 | 5 | var data = [/* 6 | { 7 | name: "Cloud's Rest", 8 | image: "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSuzTFxpOhC0VVryrqB9kWry7CDSa_-85Budr0Zn9iLFnGymkbE", 9 | description: "blah blah blah" 10 | }, 11 | { 12 | name: "Desert Mesa", 13 | image: "data:image/jpeg;base64,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", 14 | description: "blah blah blah" 15 | }, 16 | { 17 | name: "Canyon floor", 18 | image: "data:image/jpeg;base64,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", 19 | description: "blah blah blah" 20 | },*/ 21 | ] 22 | 23 | function seedDB() 24 | {/* 25 | Campground.remove({},function(err) 26 | { 27 | if(err) 28 | console.log(err); 29 | else 30 | console.log("Campgrounds Removed!"); 31 | data.forEach(function(seed) 32 | { 33 | Campground.create(seed,function(err,campground) 34 | { 35 | if(err) 36 | console.log(err); 37 | else 38 | { 39 | 40 | Comment.create({ 41 | text: "A great place!", 42 | author: "Homer" 43 | },function(err,comment) 44 | { 45 | if(err) 46 | { 47 | console.log(err); 48 | console.log("Going to create comment!"); 49 | } 50 | else 51 | { 52 | console.log("Comment Added!"); 53 | campground.comments.push(comment); 54 | campground.save(); 55 | } 56 | }) 57 | } 58 | }) 59 | }) 60 | }) 61 | */} 62 | 63 | module.exports=seedDB --------------------------------------------------------------------------------