diff --git a/packages/base-components/lib/categories/list/CategoriesList.jsx b/packages/base-components/lib/categories/list/CategoriesList.jsx index 73c9a10cf..0bbb550d3 100644 --- a/packages/base-components/lib/categories/list/CategoriesList.jsx +++ b/packages/base-components/lib/categories/list/CategoriesList.jsx @@ -1,15 +1,23 @@ import Router from "../../router.js" +import { DropdownButton, MenuItem } from 'react-bootstrap'; -const CategoriesList = (props) => { +const CategoriesList = ({categories}) => { return (
-

Categories

- +
) diff --git a/packages/base-components/lib/common/Flash.jsx b/packages/base-components/lib/common/Flash.jsx index a231ac79f..d30458855 100644 --- a/packages/base-components/lib/common/Flash.jsx +++ b/packages/base-components/lib/common/Flash.jsx @@ -1,4 +1,5 @@ import React, { PropTypes, Component } from 'react'; +import { Alert } from 'react-bootstrap'; import Core from "meteor/nova:core"; const Messages = Core.Messages; @@ -10,10 +11,14 @@ class Flash extends Component{ } render() { + + let type = this.props.message.type; + type = type === "error" ? "danger" : type; // if type is "error", use "danger" instead + return ( -
-
{this.props.message.content}
-
+ + {this.props.message.content} + ) } } diff --git a/packages/base-components/lib/common/Header.jsx b/packages/base-components/lib/common/Header.jsx index f485f37b0..6ce9ea038 100644 --- a/packages/base-components/lib/common/Header.jsx +++ b/packages/base-components/lib/common/Header.jsx @@ -1,52 +1,33 @@ import NoSSR from 'react-no-ssr'; import Router from '../router.js' import Core from "meteor/nova:core"; -import { Button } from 'react-bootstrap'; const Messages = Core.Messages; const Header = ({currentUser}) => { - ({Logo, ListContainer, CategoriesList, FlashContainer, FlashMessages, ModalTrigger, NewDocContainer, CanCreatePost, CurrentUserContainer, NewsletterForm, SearchForm} = Telescope.components); + ({Logo, ListContainer, CategoriesList, NewPostButton} = Telescope.components); const logoUrl = Telescope.settings.get("logoUrl"); const siteTitle = Telescope.settings.get("title", "Telescope"); const tagline = Telescope.settings.get("tagline"); return ( -
-
- - {tagline ?

{tagline}

: "" } -
+
+
+
+ + {tagline ?

{tagline}

: "" } +
+ + + + {currentUser ?

My Account

: ""} + + - - - {currentUser ?

My Account

: ""} - - - New Post}> - { - Messages.flash("Post created.", "success"); - Router.go('posts.single', post); - }} - /> - - - - - - - -
- -
- -
+
+ ) } diff --git a/packages/base-components/lib/common/Layout.jsx b/packages/base-components/lib/common/Layout.jsx index a93741ce9..ebcadc318 100644 --- a/packages/base-components/lib/common/Layout.jsx +++ b/packages/base-components/lib/common/Layout.jsx @@ -1,14 +1,24 @@ const Layout = props => { - ({Header, Footer} = Telescope.components); + ({Header, Footer, FlashContainer, FlashMessages, NewsletterForm} = Telescope.components); return (
+
+ + +
+ + + {props.children} +
+
) } diff --git a/packages/base-components/lib/common/NewPostButton.jsx b/packages/base-components/lib/common/NewPostButton.jsx new file mode 100644 index 000000000..ec2457f2e --- /dev/null +++ b/packages/base-components/lib/common/NewPostButton.jsx @@ -0,0 +1,30 @@ +import React, { PropTypes, Component } from 'react'; +import { Button } from 'react-bootstrap'; + +const NewPostButton = (props, context) => { + + ({ModalTrigger, NewDocContainer, CanCreatePost} = Telescope.components); + + return ( + New Post}> + + { + Messages.flash("Post created.", "success"); + Router.go('posts.single', post); + }} + /> + + + ) +} + +NewPostButton.contextTypes = { + currentUser: React.PropTypes.object +}; + +module.exports = NewPostButton; +export default NewPostButton; \ No newline at end of file diff --git a/packages/base-components/lib/common/NewsletterForm.jsx b/packages/base-components/lib/common/NewsletterForm.jsx index b209c93df..cd1f1f88e 100644 --- a/packages/base-components/lib/common/NewsletterForm.jsx +++ b/packages/base-components/lib/common/NewsletterForm.jsx @@ -42,12 +42,13 @@ class NewsletterForm extends Component { renderForm() { return ( - + @@ -56,7 +57,7 @@ class NewsletterForm extends Component { renderButton() { return ( - + ) } @@ -64,8 +65,8 @@ class NewsletterForm extends Component { if (Telescope.settings.get("showBanner", true)) { return (
-

{this.props.headerText}

- {this.props.currentUser ? this.renderButton() : this.renderForm()} +

{this.props.headerText}

+ {this.context.currentUser ? this.renderButton() : this.renderForm()}
) } else { @@ -75,7 +76,6 @@ class NewsletterForm extends Component { } NewsletterForm.propTypes = { - currentUser: React.PropTypes.object, headerText: React.PropTypes.string, labelText: React.PropTypes.string, buttonText: React.PropTypes.string, @@ -89,5 +89,9 @@ NewsletterForm.defaultProps = { successMessage: "Thanks for subscribing!" }; +NewsletterForm.contextTypes = { + currentUser: React.PropTypes.object +}; + module.exports = NewsletterForm; export default NewsletterForm; \ No newline at end of file diff --git a/packages/base-components/lib/components.js b/packages/base-components/lib/components.js index 62e3882e9..0f3801ab1 100644 --- a/packages/base-components/lib/components.js +++ b/packages/base-components/lib/components.js @@ -9,6 +9,7 @@ Telescope.registerComponent("FlashMessages", require('./common/FlashMessages.jsx Telescope.registerComponent("NewsletterForm", require('./common/NewsletterForm.jsx')); Telescope.registerComponent("Icon", require('./common/Icon.jsx')); Telescope.registerComponent("SearchForm", require('./common/SearchForm.jsx')); +Telescope.registerComponent("NewPostButton", require('./common/NewPostButton.jsx')); // posts diff --git a/packages/base-components/lib/posts/PostStats.jsx b/packages/base-components/lib/posts/PostStats.jsx index d5d3a19df..0d6b39e44 100644 --- a/packages/base-components/lib/posts/PostStats.jsx +++ b/packages/base-components/lib/posts/PostStats.jsx @@ -4,10 +4,10 @@ const PostStats = ({post}) => { return (
- {post.score ? {Math.floor(post.score*10000)/10000} Score : ""} - {post.upvotes} Upvotes - {post.clickCount} Clicks - {post.viewCount} Views + {post.score ? {Math.floor(post.score*10000)/10000} Score : ""} + {post.upvotes} Upvotes + {post.clickCount} Clicks + {post.viewCount} Views
) } diff --git a/packages/base-components/lib/posts/Vote.jsx b/packages/base-components/lib/posts/Vote.jsx index e168c4f34..eee61846a 100644 --- a/packages/base-components/lib/posts/Vote.jsx +++ b/packages/base-components/lib/posts/Vote.jsx @@ -47,7 +47,7 @@ class Vote extends Component {
Upvote
-
{post.baseScore}
+
{post.baseScore || 0}
) diff --git a/packages/base-components/lib/posts/list/PostItem.jsx b/packages/base-components/lib/posts/list/PostItem.jsx index 1e0cda895..8bfb28bc1 100644 --- a/packages/base-components/lib/posts/list/PostItem.jsx +++ b/packages/base-components/lib/posts/list/PostItem.jsx @@ -69,6 +69,7 @@ class PostItem extends Component {
{moment(post.postedAt).fromNow()}
+
{post.commentCount} comments
{this.renderActions()} diff --git a/packages/base-components/lib/posts/list/PostListHeader.jsx b/packages/base-components/lib/posts/list/PostListHeader.jsx index 65bba5968..65016efc0 100644 --- a/packages/base-components/lib/posts/list/PostListHeader.jsx +++ b/packages/base-components/lib/posts/list/PostListHeader.jsx @@ -1,8 +1,16 @@ const PostListHeader = () => { - ({PostViews, SearchForm} = Telescope.components) + ({PostViews, SearchForm, ListContainer, CategoriesList} = Telescope.components) - return
+ return ( +
+
+ +
+ + +
+ ) } module.exports = PostListHeader; diff --git a/packages/base-components/lib/posts/list/PostViews.jsx b/packages/base-components/lib/posts/list/PostViews.jsx index c010687e9..4ef33a98d 100644 --- a/packages/base-components/lib/posts/list/PostViews.jsx +++ b/packages/base-components/lib/posts/list/PostViews.jsx @@ -12,17 +12,26 @@ const PostViews = (props, context) => { } const currentRoute = context.currentRoute; + const currentView = currentRoute.queryParams.view || props.defaultView; // console.log(currentRoute); return (
- {views.map(view => )} + {views.map(view => )}
) } +PostViews.propTypes = { + defaultView: React.PropTypes.string +} + +PostViews.defaultProps = { + defaultView: "top" +} + PostViews.contextTypes = { currentRoute: React.PropTypes.object }; diff --git a/packages/base-styles/lib/stylesheets/_cheatsheet.scss b/packages/base-styles/lib/stylesheets/_cheatsheet.scss new file mode 100644 index 000000000..f530a0c69 --- /dev/null +++ b/packages/base-styles/lib/stylesheets/_cheatsheet.scss @@ -0,0 +1,35 @@ + +.cheatsheet h1{ + margin-bottom: 20px; +} +.cheatsheet-wrapper{ + display: flex; +} +.cheatsheet-block{ + flex: 1; + margin-right: 20px; +} +.cheatsheet-block:last-of-type{ + margin-right: 0; +} + +.cheatsheet ul{ + list-style-type: none; + margin-bottom: 20px; + padding-left: 0px; +} +.cheatsheet ul li{ + margin-bottom: 10px; +} +.cheatsheet h2{ + margin-bottom: 10px; + padding-bottom: 10px; + border-bottom: 1px solid #ddd; +} +.cheatsheet h3{ + margin-bottom: 10px; + font-weight: bold; +} +.cheatsheet code{ + font-size: 13px; +} \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_common.scss b/packages/base-styles/lib/stylesheets/_common.scss deleted file mode 100644 index ff8fd6b51..000000000 --- a/packages/base-styles/lib/stylesheets/_common.scss +++ /dev/null @@ -1,3 +0,0 @@ -.footer{ - text-align: center; -} \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_global.scss b/packages/base-styles/lib/stylesheets/_global.scss index 99fc3fed9..4fcbf7492 100644 --- a/packages/base-styles/lib/stylesheets/_global.scss +++ b/packages/base-styles/lib/stylesheets/_global.scss @@ -1,3 +1,13 @@ body{ font-family: "Source Sans Pro", "Helvetica Neue", "Helvetica", sans-serif; +} + +.main, .footer, .header{ + margin-left: auto; + margin-right: auto; + max-width: 1200px; +} + +.main{ + margin-bottom: $vmargin; } \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_header.scss b/packages/base-styles/lib/stylesheets/_header.scss new file mode 100644 index 000000000..5b53a9fe4 --- /dev/null +++ b/packages/base-styles/lib/stylesheets/_header.scss @@ -0,0 +1,4 @@ +.header-wrapper{ + background: $light-grey; + margin-bottom: $vmargin; +} \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_newsletter.scss b/packages/base-styles/lib/stylesheets/_newsletter.scss index d3b96d67f..51da88767 100644 --- a/packages/base-styles/lib/stylesheets/_newsletter.scss +++ b/packages/base-styles/lib/stylesheets/_newsletter.scss @@ -2,4 +2,21 @@ background: $white; border: 1px solid $light-border; border-radius: 3px; + @include flex-center; + justify-content: center; + padding: $vmargin $hmargin; + margin-bottom: $vmargin; + .newsletter-tagline{ + margin: 0 $hmargin 0 0; + font-size: 1.35rem; + } + .newsletter-button{ + + } + .newsletter-form{ + @include flex-center; + .form-control{ + margin: 0 5px 0 0; + } + } } \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_other.scss b/packages/base-styles/lib/stylesheets/_other.scss new file mode 100644 index 000000000..fc8014019 --- /dev/null +++ b/packages/base-styles/lib/stylesheets/_other.scss @@ -0,0 +1,10 @@ +.footer{ + text-align: center; + margin-bottom: $vmargin; +} + +.search-form{ + .form-group{ + margin-bottom: 0; + } +} \ No newline at end of file diff --git a/packages/base-styles/lib/stylesheets/_posts.scss b/packages/base-styles/lib/stylesheets/_posts.scss index f7b2e18e7..885fa186c 100644 --- a/packages/base-styles/lib/stylesheets/_posts.scss +++ b/packages/base-styles/lib/stylesheets/_posts.scss @@ -1,15 +1,15 @@ .post-list-header{ - display: flex; - align-items: center; + @include flex-center; justify-content: space-between; + margin-bottom: $vmargin; } .post-views{ a{ - border: 1px solid $light-border; + @include border; @include blueHover; - // border-radius: 3px; + // @include border-radius; // padding: 3px 5px; // margin-right: 5px; &.post-view-active{ @@ -18,16 +18,15 @@ } } .post-list-content{ - border-top: 1px solid $light-border; + border-top: $border; // padding-top: 15px; // margin-top: 15px; margin-bottom: $vmargin; } .post-item{ - display: flex; - align-items: center; - border-bottom: 1px solid $light-border; + @include flex-center; + border-bottom: $border; padding: $vmargin 5px; // margin-bottom: 15px; &.post-sticky{ @@ -41,11 +40,10 @@ } .upvote-button{ - border: 1px solid $light-border; - border-radius: 3px; - display: flex; + @include border; + @include border-radius; + @include flex-center; flex-direction: column; - align-items: center; justify-content: center; padding: 3px 5px; .icon{ @@ -72,8 +70,7 @@ .post-title{ font-size: 1.35rem; margin-bottom: 5px; - display: flex; - align-items: center; + @include flex-center; .post-title-link{ color: $black; &, &:active, &:hover{ @@ -83,14 +80,13 @@ } .post-categories{ - display: flex; - align-items: center; + @include flex-center; margin-left: 5px; a{ display: block; font-size: 0.8rem; - border: 1px solid $light-grey; - border-radius: 3px; + @include border; + @include border-radius; margin-right: 5px; padding: 2px 6px; @include blueHover; @@ -99,23 +95,25 @@ .post-meta{ font-size: 0.9rem; - display: flex; - align-items: center; - .user-avatar, .user-name, .post-date, .post-stats, .post-actions{ + @include flex-center; + .user-avatar{ margin-right: 5px; } + .user-name, .post-date, .post-comments, .post-stats, .post-actions{ + margin-right: $hmargin; + } } -.post-date{ +.post-date, .post-comments{ color: $medium-text; } .post-stats{ - border: 1px solid $light-border; - border-radius: 3px; + @include border; + @include border-radius; font-size: 0.8rem; - >span{ - border-right: 1px solid $light-border; + .post-stat{ + border-right: $border; padding: 2px 5px; display: inline-block; &:last-child{ @@ -125,13 +123,11 @@ } .post-actions{ - display: flex; - align-items: center; + @include flex-center; } .post-comments{ - display: flex; - align-items: center; + @include flex-center; } .post-commenters{ @@ -143,8 +139,8 @@ .post-load-more{ display: block; text-align: center; - border: 1px solid $light-border; - border-radius: 3px; + @include border; + @include border-radius; font-size: 1.25rem; padding: 10px 20px; @include blueHover; diff --git a/packages/base-styles/lib/stylesheets/_variables.scss b/packages/base-styles/lib/stylesheets/_variables.scss index 09fc0de3e..be8f0b1db 100644 --- a/packages/base-styles/lib/stylesheets/_variables.scss +++ b/packages/base-styles/lib/stylesheets/_variables.scss @@ -1,6 +1,8 @@ $hmargin: 10px; $vmargin: 15px; +$border: 1px solid $light-border; + @mixin blueHover{ &:hover{ background: $blue; @@ -8,4 +10,17 @@ $vmargin: 15px; border-color: $blue; text-decoration: none; } -} \ No newline at end of file +} + +@mixin flex-center{ + display: flex; + align-items: center; +} + +@mixin border-radius{ + border-radius: .25rem; +} +@mixin border{ + border: $border; +} + diff --git a/packages/base-styles/lib/stylesheets/main.scss b/packages/base-styles/lib/stylesheets/main.scss index e9f7a07cc..5cef931f1 100644 --- a/packages/base-styles/lib/stylesheets/main.scss +++ b/packages/base-styles/lib/stylesheets/main.scss @@ -4,45 +4,37 @@ @import "global"; @import "categories"; +@import "cheatsheet"; @import "comments"; -@import "common"; +@import "header"; @import "newsletter"; +@import "other"; @import "posts"; body{ - background: #eee; color: $black; } -.wrapper{ - padding: 15px; -} - -.main{ - background: #fff; - padding: 15px; - margin: 10px 0; - border: 1px #ccc solid; -} -.post-views, .logo, .nav, .alt-accounts-log-in-buttons{ - margin-bottom: 15px; -} -.post-views ul, .categories ul, .post-categories ul, .post-commenters ul{ - list-style-type: none; - margin: 0; - padding: 0; -} +// .post-views, .logo, .nav, .alt-accounts-log-in-buttons{ +// margin-bottom: 15px; +// } -.post-views li, .categories li, .post-categories li, .post-commenters li{ - display: inline-block; - margin-right: 5px; - border: 1px solid #ddd; - padding: 3px 5px; - background: #efefef; -} +// .post-views ul, .categories ul, .post-categories ul, .post-commenters ul{ +// list-style-type: none; +// margin: 0; +// padding: 0; +// } + +// .post-views li, .categories li, .post-categories li, .post-commenters li{ +// display: inline-block; +// margin-right: 5px; +// border: 1px solid #ddd; +// padding: 3px 5px; +// background: #efefef; +// } .comment-node{ border-left: 10px #efefef solid; @@ -69,40 +61,6 @@ code{ padding: 3px 6px; } -.cheatsheet h1{ - margin-bottom: 20px; -} -.cheatsheet-wrapper{ - display: flex; -} -.cheatsheet-block{ - flex: 1; - margin-right: 20px; -} -.cheatsheet-block:last-of-type{ - margin-right: 0; -} - -.cheatsheet ul{ - list-style-type: none; - margin-bottom: 20px; - padding-left: 0px; -} -.cheatsheet ul li{ - margin-bottom: 10px; -} -.cheatsheet h2{ - margin-bottom: 10px; - padding-bottom: 10px; - border-bottom: 1px solid #ddd; -} -.cheatsheet h3{ - margin-bottom: 10px; - font-weight: bold; -} -.cheatsheet code{ - font-size: 13px; -} .avatar{ height: 24px; diff --git a/packages/base-styles/package.js b/packages/base-styles/package.js index 0f0953a44..99a52dbd6 100644 --- a/packages/base-styles/package.js +++ b/packages/base-styles/package.js @@ -25,8 +25,10 @@ Package.onUse(function (api) { 'lib/stylesheets/_variables.scss', 'lib/stylesheets/_global.scss', 'lib/stylesheets/_categories.scss', + 'lib/stylesheets/_cheatsheet.scss', 'lib/stylesheets/_comments.scss', - 'lib/stylesheets/_common.scss', + 'lib/stylesheets/_header.scss', + 'lib/stylesheets/_other.scss', 'lib/stylesheets/_posts.scss', 'lib/stylesheets/_newsletter.scss', 'lib/stylesheets/_users.scss',