Added start of individual post view and post lists view, wired upvoting functionality for individual posts
This commit is contained in:
220
.eslintrc
Normal file
220
.eslintrc
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
{
|
||||||
|
"ecmaFeatures": {
|
||||||
|
"jsx": true
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"mocha": true,
|
||||||
|
"node": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"window": true,
|
||||||
|
"$": true,
|
||||||
|
"ga": true,
|
||||||
|
"jQuery": true
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"no-comma-dangle": 2,
|
||||||
|
"no-cond-assign": 2,
|
||||||
|
"no-console": 0,
|
||||||
|
"no-constant-condition": 2,
|
||||||
|
"no-control-regex": 2,
|
||||||
|
"no-debugger": 2,
|
||||||
|
"no-dupe-keys": 2,
|
||||||
|
"no-empty": 2,
|
||||||
|
"no-empty-class": 2,
|
||||||
|
"no-ex-assign": 2,
|
||||||
|
"no-extra-boolean-cast": 2,
|
||||||
|
"no-extra-parens": 0,
|
||||||
|
"no-extra-semi": 2,
|
||||||
|
"no-func-assign": 2,
|
||||||
|
"no-inner-declarations": 2,
|
||||||
|
"no-invalid-regexp": 2,
|
||||||
|
"no-irregular-whitespace": 2,
|
||||||
|
"no-negated-in-lhs": 2,
|
||||||
|
"no-obj-calls": 2,
|
||||||
|
"no-regex-spaces": 2,
|
||||||
|
"no-reserved-keys": 0,
|
||||||
|
"no-sparse-arrays": 2,
|
||||||
|
"no-unreachable": 2,
|
||||||
|
"use-isnan": 2,
|
||||||
|
"valid-jsdoc": 2,
|
||||||
|
"valid-typeof": 2,
|
||||||
|
|
||||||
|
"block-scoped-var": 2,
|
||||||
|
"complexity": 0,
|
||||||
|
"consistent-return": 2,
|
||||||
|
"curly": 2,
|
||||||
|
"default-case": 1,
|
||||||
|
"dot-notation": 0,
|
||||||
|
"eqeqeq": 1,
|
||||||
|
"guard-for-in": 1,
|
||||||
|
"no-alert": 1,
|
||||||
|
"no-caller": 2,
|
||||||
|
"no-div-regex": 2,
|
||||||
|
"no-else-return": 0,
|
||||||
|
"no-empty-label": 2,
|
||||||
|
"no-eq-null": 1,
|
||||||
|
"no-eval": 2,
|
||||||
|
"no-extend-native": 2,
|
||||||
|
"no-extra-bind": 2,
|
||||||
|
"no-fallthrough": 2,
|
||||||
|
"no-floating-decimal": 2,
|
||||||
|
"no-implied-eval": 2,
|
||||||
|
"no-iterator": 2,
|
||||||
|
"no-labels": 2,
|
||||||
|
"no-lone-blocks": 2,
|
||||||
|
"no-loop-func": 1,
|
||||||
|
"no-multi-spaces": 1,
|
||||||
|
"no-multi-str": 2,
|
||||||
|
"no-native-reassign": 2,
|
||||||
|
"no-new": 2,
|
||||||
|
"no-new-func": 2,
|
||||||
|
"no-new-wrappers": 2,
|
||||||
|
"no-octal": 2,
|
||||||
|
"no-octal-escape": 2,
|
||||||
|
"no-process-env": 0,
|
||||||
|
"no-proto": 2,
|
||||||
|
"no-redeclare": 1,
|
||||||
|
"no-return-assign": 2,
|
||||||
|
"no-script-url": 2,
|
||||||
|
"no-self-compare": 2,
|
||||||
|
"no-sequences": 2,
|
||||||
|
"no-unused-expressions": 2,
|
||||||
|
"no-void": 1,
|
||||||
|
"no-warning-comments": [
|
||||||
|
1,
|
||||||
|
{
|
||||||
|
"terms": [
|
||||||
|
"fixme"
|
||||||
|
],
|
||||||
|
"location": "start"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"no-with": 2,
|
||||||
|
"radix": 2,
|
||||||
|
"vars-on-top": 0,
|
||||||
|
"wrap-iife": [2, "any"],
|
||||||
|
"yoda": 0,
|
||||||
|
|
||||||
|
"strict": 0,
|
||||||
|
|
||||||
|
"no-catch-shadow": 2,
|
||||||
|
"no-delete-var": 2,
|
||||||
|
"no-label-var": 2,
|
||||||
|
"no-shadow": 0,
|
||||||
|
"no-shadow-restricted-names": 2,
|
||||||
|
"no-undef": 2,
|
||||||
|
"no-undef-init": 2,
|
||||||
|
"no-undefined": 1,
|
||||||
|
"no-unused-vars": 2,
|
||||||
|
"no-use-before-define": 0,
|
||||||
|
|
||||||
|
"handle-callback-err": 2,
|
||||||
|
"no-mixed-requires": 0,
|
||||||
|
"no-new-require": 2,
|
||||||
|
"no-path-concat": 2,
|
||||||
|
"no-process-exit": 2,
|
||||||
|
"no-restricted-modules": 0,
|
||||||
|
"no-sync": 0,
|
||||||
|
|
||||||
|
"brace-style": [
|
||||||
|
2,
|
||||||
|
"1tbs",
|
||||||
|
{ "allowSingleLine": true }
|
||||||
|
],
|
||||||
|
"camelcase": 1,
|
||||||
|
"comma-spacing": [
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"before": false,
|
||||||
|
"after": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"comma-style": [
|
||||||
|
2, "last"
|
||||||
|
],
|
||||||
|
"consistent-this": 0,
|
||||||
|
"eol-last": 2,
|
||||||
|
"func-names": 0,
|
||||||
|
"func-style": 0,
|
||||||
|
"key-spacing": [
|
||||||
|
2,
|
||||||
|
{
|
||||||
|
"beforeColon": false,
|
||||||
|
"afterColon": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"max-nested-callbacks": 0,
|
||||||
|
"new-cap": 0,
|
||||||
|
"new-parens": 2,
|
||||||
|
"no-array-constructor": 2,
|
||||||
|
"no-inline-comments": 1,
|
||||||
|
"no-lonely-if": 1,
|
||||||
|
"no-mixed-spaces-and-tabs": 2,
|
||||||
|
"no-multiple-empty-lines": [
|
||||||
|
1,
|
||||||
|
{ "max": 2 }
|
||||||
|
],
|
||||||
|
"no-nested-ternary": 2,
|
||||||
|
"no-new-object": 2,
|
||||||
|
"no-space-before-semi": 2,
|
||||||
|
"no-spaced-func": 2,
|
||||||
|
"no-ternary": 0,
|
||||||
|
"no-trailing-spaces": 1,
|
||||||
|
"no-underscore-dangle": 0,
|
||||||
|
"no-wrap-func": 2,
|
||||||
|
"one-var": 0,
|
||||||
|
"operator-assignment": 0,
|
||||||
|
"padded-blocks": 0,
|
||||||
|
"quote-props": 0,
|
||||||
|
"quotes": [
|
||||||
|
2,
|
||||||
|
"single",
|
||||||
|
"avoid-escape"
|
||||||
|
],
|
||||||
|
"semi": [
|
||||||
|
2,
|
||||||
|
"always"
|
||||||
|
],
|
||||||
|
"sort-vars": 0,
|
||||||
|
"space-after-keywords": [
|
||||||
|
2,
|
||||||
|
"always",
|
||||||
|
{ "checkFunctionKeyword": false }
|
||||||
|
],
|
||||||
|
"space-after-function-names": "never",
|
||||||
|
"space-before-blocks": [
|
||||||
|
2,
|
||||||
|
"always"
|
||||||
|
],
|
||||||
|
"space-in-brackets": 0,
|
||||||
|
"space-in-parens": 0,
|
||||||
|
"space-infix-ops": 2,
|
||||||
|
"space-return-throw-case": 2,
|
||||||
|
"space-unary-ops": [
|
||||||
|
1,
|
||||||
|
{
|
||||||
|
"words": true,
|
||||||
|
"nonwords": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"spaced-line-comment": [
|
||||||
|
2,
|
||||||
|
"always",
|
||||||
|
{ "exceptions": ["-"] }
|
||||||
|
],
|
||||||
|
"wrap-regex": 1,
|
||||||
|
|
||||||
|
"max-depth": 0,
|
||||||
|
"max-len": [
|
||||||
|
1,
|
||||||
|
80,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
"max-params": 0,
|
||||||
|
"max-statements": 0,
|
||||||
|
"no-bitwise": 1,
|
||||||
|
"no-plusplus": 0
|
||||||
|
}
|
||||||
|
}
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -23,3 +23,5 @@ node_modules
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
bower_components
|
bower_components
|
||||||
|
.eslintignore
|
||||||
|
.eslintrc
|
||||||
|
4
app.js
4
app.js
@ -292,6 +292,10 @@ app.get(
|
|||||||
'/stories/:storyName',
|
'/stories/:storyName',
|
||||||
storyController.returnIndividualStory
|
storyController.returnIndividualStory
|
||||||
);
|
);
|
||||||
|
app.post(
|
||||||
|
'/stories/upvote/:id',
|
||||||
|
storyController.upvote
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Challenge related routes
|
* Challenge related routes
|
||||||
|
@ -50,9 +50,10 @@ exports.returnIndividualStory = function(req, res, next) {
|
|||||||
|
|
||||||
story = story.pop();
|
story = story.pop();
|
||||||
var dashedNameFull = story.headline.toLowerCase().replace(/\s/g, '-');
|
var dashedNameFull = story.headline.toLowerCase().replace(/\s/g, '-');
|
||||||
if (dashedNameFull != dashedName) {
|
if (dashedNameFull !== dashedName) {
|
||||||
return res.redirect('../stories/' + dashedNameFull);
|
return res.redirect('../stories/' + dashedNameFull);
|
||||||
}
|
}
|
||||||
|
debug('Story id is', story._id);
|
||||||
|
|
||||||
res.render('post/show', {
|
res.render('post/show', {
|
||||||
title: story.headline,
|
title: story.headline,
|
||||||
@ -61,7 +62,21 @@ exports.returnIndividualStory = function(req, res, next) {
|
|||||||
body: story.body,
|
body: story.body,
|
||||||
rank: story.rank,
|
rank: story.rank,
|
||||||
upVotes: story.upVotes,
|
upVotes: story.upVotes,
|
||||||
comments: story.comments
|
comments: story.comments,
|
||||||
|
id: story._id
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.upvote = function(req, res, next) {
|
||||||
|
var data = req.params.id;
|
||||||
|
Story.find({'_id': data}, function(err, story) {
|
||||||
|
if (err) {
|
||||||
|
throw err;
|
||||||
|
}
|
||||||
|
story = story.pop();
|
||||||
|
story.rank++;
|
||||||
|
story.save();
|
||||||
|
return res.send(story);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
@ -744,6 +744,10 @@ iframe.iphone {
|
|||||||
margin-bottom: -4px;
|
margin-bottom: -4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.story-list li {
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
//uncomment this to see the dimensions of all elements outlined in red
|
//uncomment this to see the dimensions of all elements outlined in red
|
||||||
//* {
|
//* {
|
||||||
// border-color: red;
|
// border-color: red;
|
||||||
|
@ -120,6 +120,27 @@ $(document).ready(function() {
|
|||||||
$('#brief-instructions').show();
|
$('#brief-instructions').show();
|
||||||
$('#long-instructions').hide();
|
$('#long-instructions').hide();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var upvoteHandler = function () {
|
||||||
|
var _id = storyId;
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: '/stories/upvote/' + _id,
|
||||||
|
beforeSend: function() {
|
||||||
|
$('#upvote').unbind('click');
|
||||||
|
},
|
||||||
|
error: function(xhr, textStatus, errorThrown) {
|
||||||
|
console.log('got error');
|
||||||
|
$('#upvote').bind('click', upvoteHandler);
|
||||||
|
},
|
||||||
|
success: function (data, textStatus, xhr) {
|
||||||
|
console.log(data);
|
||||||
|
$('#storyRank').text(data.rank);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
$('#upvote').on('click', upvoteHandler);
|
||||||
});
|
});
|
||||||
|
|
||||||
var profileValidation = angular.module('profileValidation',['ui.bootstrap']);
|
var profileValidation = angular.module('profileValidation',['ui.bootstrap']);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
h2
|
|
||||||
ul#story-list Top Stories
|
|
||||||
h3
|
h3
|
||||||
|
ul#story-list.story-list
|
||||||
|
|
||||||
script(src="https://cdn.jsdelivr.net/ramda/0.10.0/ramda.min.js")
|
script(src="https://cdn.jsdelivr.net/ramda/0.10.0/ramda.min.js")
|
||||||
script.
|
script.
|
||||||
var getLinkedName = function getLinkedName(name) {
|
var getLinkedName = function getLinkedName(name) {
|
||||||
@ -15,8 +15,9 @@ h2
|
|||||||
for (var i = 0; i < data.length; i++) {
|
for (var i = 0; i < data.length; i++) {
|
||||||
var li = document.createElement('li');
|
var li = document.createElement('li');
|
||||||
var linkedName = getLinkedName(data[i].headline);
|
var linkedName = getLinkedName(data[i].headline);
|
||||||
|
var rank = data[i].rank;
|
||||||
|
|
||||||
$(li).html("<a href='/stories/" + linkedName + "'>" + data[i].headline + "</a></li>");
|
$(li).html("<div class='row text-center'><div class='col-xs-3 text-right'><i class='ion-arrow-up-b'></i></div><div class='col-xs-6'><a href='/stories/" + linkedName + "'>" + data[i].headline + "</a></div><div class='col-xs-3'></div></div><div class='row text-center'><div class='col-xs-3 text-right'>" + rank + "</div><div class='col-xs-6'>" + data[i].author.username + "</div><div class='col-xs-3'></div></div></li>");
|
||||||
$(li).appendTo($('#story-list'));
|
$(li).appendTo($('#story-list'));
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -1,8 +1,22 @@
|
|||||||
extends ../layout
|
extends ../layout
|
||||||
block content
|
block content
|
||||||
|
script.
|
||||||
|
var challengeName = 'Story';
|
||||||
|
var storyId = !{JSON.stringify(id)};
|
||||||
|
.jumbotron
|
||||||
|
.row
|
||||||
|
.col-xs-2(style='position: relative; top: 50%; -webkit-transform: translateY(50%); -ms-transform: translateY(50%);transform: translateY(50%);')
|
||||||
|
h3#storyRank= rank
|
||||||
|
.col-xs-10.text-center
|
||||||
h1= title
|
h1= title
|
||||||
|
.row
|
||||||
|
.col-xs-2
|
||||||
|
h3
|
||||||
|
a#upvote
|
||||||
|
i.ion-arrow-up-b
|
||||||
|
.col-xs-10.text-center
|
||||||
h3= body
|
h3= body
|
||||||
h5= rank
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user