diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less
index 3d031b871..7ef02bd98 100644
--- a/client/homebrew/homebrew.less
+++ b/client/homebrew/homebrew.less
@@ -8,9 +8,10 @@
background-color : @steel;
flex-direction : column;
.content{
- position : relative;
- height : calc(~"100% - 29px"); //Navbar height
- flex : auto;
+ position : relative;
+ overflow-y : hidden;
+ height : calc(~"100% - 29px"); //Navbar height
+ flex : auto;
}
}
-}
\ No newline at end of file
+}
diff --git a/client/homebrew/navbar/recent.navitem.jsx b/client/homebrew/navbar/recent.navitem.jsx
index 0e3daa7e7..37fece907 100644
--- a/client/homebrew/navbar/recent.navitem.jsx
+++ b/client/homebrew/navbar/recent.navitem.jsx
@@ -1,51 +1,72 @@
const React = require('react');
const createClass = require('create-react-class');
const _ = require('lodash');
-const cx = require('classnames');
const Moment = require('moment');
const Nav = require('naturalcrit/nav/nav.jsx');
-const VIEW_KEY = 'homebrewery-recently-viewed';
const EDIT_KEY = 'homebrewery-recently-edited';
+const VIEW_KEY = 'homebrewery-recently-viewed';
+
+
+const RecentItems = createClass({
-const BaseItem = createClass({
getDefaultProps : function() {
return {
- storageKey : '',
- text : '',
- currentBrew : {
- title : '',
- id : '',
- url : ''
- }
+ storageKey : '',
+ showEdit : false,
+ showView : false
};
},
+
getInitialState : function() {
return {
showDropdown : false,
- brews : []
+ edit : [],
+ view : []
};
},
componentDidMount : function() {
- let brews = JSON.parse(localStorage.getItem(this.props.storageKey) || '[]');
- brews = _.filter(brews, (brew)=>{
- return brew.id !== this.props.currentBrew.id;
- });
- if(this.props.currentBrew.id){
- brews.unshift({
- id : this.props.currentBrew.id,
- url : this.props.currentBrew.url,
- title : this.props.currentBrew.title,
+ //== Load recent items list ==//
+ let edited = JSON.parse(localStorage.getItem(EDIT_KEY) || '[]');
+ let viewed = JSON.parse(localStorage.getItem(VIEW_KEY) || '[]');
+
+ //== Add current brew to appropriate recent items list (depending on storageKey) ==//
+ if(this.props.storageKey == 'edit'){
+ edited = _.filter(edited, (brew)=>{
+ return brew.id !== this.props.brew.editId;
+ });
+ edited.unshift({
+ id : this.props.brew.editId,
+ title : this.props.brew.title,
+ url : `/edit/${this.props.brew.editId}`,
ts : Date.now()
});
}
- brews = _.slice(brews, 0, 8);
- localStorage.setItem(this.props.storageKey, JSON.stringify(brews));
+ if(this.props.storageKey == 'view'){
+ viewed = _.filter(viewed, (brew)=>{
+ return brew.id !== this.props.brew.shareId;
+ });
+ viewed.unshift({
+ id : this.props.brew.shareId,
+ title : this.props.brew.title,
+ url : `/share/${this.props.brew.shareId}`,
+ ts : Date.now()
+ });
+ }
+
+ //== Store the updated lists (up to 8 items each) ==//
+ edited = _.slice(edited, 0, 8);
+ viewed = _.slice(viewed, 0, 8);
+
+ localStorage.setItem(EDIT_KEY, JSON.stringify(edited));
+ localStorage.setItem(VIEW_KEY, JSON.stringify(viewed));
+
this.setState({
- brews : brews
+ edit : edited,
+ view : viewed
});
},
@@ -58,14 +79,25 @@ const BaseItem = createClass({
renderDropdown : function(){
if(!this.state.showDropdown) return null;
- const items = _.map(this.state.brews, (brew)=>{
- return
- {brew.title}
- {Moment(brew.ts).fromNow()}
- ;
- });
+ const makeItems = (brews)=>{
+ return _.map(brews, (brew)=>{
+ return
+ {brew.title || '[ no title ]'}
+ {Moment(brew.ts).fromNow()}
+ ;
+ });
+ };
- return
{items}
;
+ return
+ {(this.props.showEdit && this.props.showView) ?
+
edited
: null }
+ {this.props.showEdit ?
+ makeItems(this.state.edit) : null }
+ {(this.props.showEdit && this.props.showView) ?
+ viewed
: null }
+ {this.props.showView ?
+ makeItems(this.state.view) : null }
+ ;
},
render : function(){
@@ -75,126 +107,37 @@ const BaseItem = createClass({
{this.props.text}
{this.renderDropdown()}
;
- },
+ }
});
-
-
module.exports = {
- viewed : createClass({
- getDefaultProps : function() {
- return {
- brew : {
- title : '',
- shareId : ''
- }
- };
- },
- render : function(){
- return ;
- },
- }),
- edited : createClass({
- getDefaultProps : function() {
- return {
- brew : {
- title : '',
- editId : ''
- }
- };
- },
- render : function(){
- return ;
- },
- }),
+ edited : (props)=>{
+ return ;
+ },
- both : createClass({
- getDefaultProps : function() {
- return {
- errorId : null
- };
- },
+ viewed : (props)=>{
+ return ;
+ },
- getInitialState : function() {
- return {
- showDropdown : false,
- edit : [],
- view : []
- };
- },
-
- componentDidMount : function() {
-
- let edited = JSON.parse(localStorage.getItem(EDIT_KEY) || '[]');
- let viewed = JSON.parse(localStorage.getItem(VIEW_KEY) || '[]');
-
- if(this.props.errorId){
- edited = _.filter(edited, (edit)=>{
- return edit.id !== this.props.errorId;
- });
- viewed = _.filter(viewed, (view)=>{
- return view.id !== this.props.errorId;
- });
-
- localStorage.setItem(EDIT_KEY, JSON.stringify(edited));
- localStorage.setItem(VIEW_KEY, JSON.stringify(viewed));
- }
-
-
- this.setState({
- edit : edited,
- view : viewed
- });
- },
-
- handleDropdown : function(show){
- this.setState({
- showDropdown : show
- });
- },
-
- renderDropdown : function(){
- if(!this.state.showDropdown) return null;
-
- const makeItems = (brews)=>{
- return _.map(brews, (brew)=>{
- return
- {brew.title}
- {Moment(brew.ts).fromNow()}
- ;
- });
- };
-
- return
-
edited
- {makeItems(this.state.edit)}
- viewed
- {makeItems(this.state.view)}
- ;
- },
-
- render : function(){
- return this.handleDropdown(true)}
- onMouseLeave={()=>this.handleDropdown(false)}>
- Recent brews
- {this.renderDropdown()}
- ;
- }
-
- })
+ both : (props)=>{
+ return ;
+ }
};
\ No newline at end of file
diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx
index 1b3b7a808..db7789b88 100644
--- a/client/homebrew/pages/editPage/editPage.jsx
+++ b/client/homebrew/pages/editPage/editPage.jsx
@@ -10,7 +10,7 @@ const Navbar = require('../../navbar/navbar.jsx');
const ReportIssue = require('../../navbar/issue.navitem.jsx');
const PrintLink = require('../../navbar/print.navitem.jsx');
const Account = require('../../navbar/account.navitem.jsx');
-//const RecentlyEdited = require('../../navbar/recent.navitem.jsx').edited;
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
const Editor = require('../../editor/editor.jsx');
@@ -186,14 +186,15 @@ const EditPage = createClass({
{this.state.brew.title}
+
{this.renderSaveButton()}
- {/**/}
Share
+
;
diff --git a/client/homebrew/pages/errorPage/errorPage.jsx b/client/homebrew/pages/errorPage/errorPage.jsx
index 42fb8a60a..9faaa479c 100644
--- a/client/homebrew/pages/errorPage/errorPage.jsx
+++ b/client/homebrew/pages/errorPage/errorPage.jsx
@@ -7,7 +7,7 @@ const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const PatreonNavItem = require('../../navbar/patreon.navitem.jsx');
const IssueNavItem = require('../../navbar/issue.navitem.jsx');
-const RecentNavItem = require('../../navbar/recent.navitem.jsx');
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx');
@@ -33,7 +33,7 @@ const ErrorPage = createClass({
-
+
diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx
index a62b68dd4..aca5a5e35 100644
--- a/client/homebrew/pages/homePage/homePage.jsx
+++ b/client/homebrew/pages/homePage/homePage.jsx
@@ -8,7 +8,7 @@ const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const PatreonNavItem = require('../../navbar/patreon.navitem.jsx');
const IssueNavItem = require('../../navbar/issue.navitem.jsx');
-const RecentNavItem = require('../../navbar/recent.navitem.jsx');
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const AccountNavItem = require('../../navbar/account.navitem.jsx');
@@ -59,7 +59,7 @@ const HomePage = createClass({
Changelog
-
+
{/*}
diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx
index 169265f3b..739925be5 100644
--- a/client/homebrew/pages/newPage/newPage.jsx
+++ b/client/homebrew/pages/newPage/newPage.jsx
@@ -9,6 +9,7 @@ const Markdown = require('naturalcrit/markdown.js');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const AccountNavItem = require('../../navbar/account.navitem.jsx');
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const IssueNavItem = require('../../navbar/issue.navitem.jsx');
const SplitPane = require('naturalcrit/splitPane/splitPane.jsx');
@@ -135,6 +136,7 @@ const NewPage = createClass({
{this.renderSaveButton()}
{this.renderLocalPrintButton()}
+
;
diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx
index b9c07a9ff..2774bf339 100644
--- a/client/homebrew/pages/sharePage/sharePage.jsx
+++ b/client/homebrew/pages/sharePage/sharePage.jsx
@@ -7,7 +7,7 @@ const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
const PrintLink = require('../../navbar/print.navitem.jsx');
const ReportIssue = require('../../navbar/issue.navitem.jsx');
-//const RecentlyViewed = require('../../navbar/recent.navitem.jsx').viewed;
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const Account = require('../../navbar/account.navitem.jsx');
@@ -53,11 +53,11 @@ const SharePage = createClass({
- {/**/}
source
+
diff --git a/client/homebrew/pages/userPage/userPage.jsx b/client/homebrew/pages/userPage/userPage.jsx
index 3b7cd7d40..fd48007c2 100644
--- a/client/homebrew/pages/userPage/userPage.jsx
+++ b/client/homebrew/pages/userPage/userPage.jsx
@@ -6,7 +6,7 @@ const cx = require('classnames');
const Nav = require('naturalcrit/nav/nav.jsx');
const Navbar = require('../../navbar/navbar.jsx');
-const RecentNavItem = require('../../navbar/recent.navitem.jsx');
+const RecentNavItem = require('../../navbar/recent.navitem.jsx').both;
const Account = require('../../navbar/account.navitem.jsx');
const BrewItem = require('./brewItem/brewItem.jsx');
@@ -57,7 +57,7 @@ const UserPage = createClass({
return
-
+
diff --git a/server/forcessl.mw.js b/server/forcessl.mw.js
index 1a34e41bc..b84c20f27 100644
--- a/server/forcessl.mw.js
+++ b/server/forcessl.mw.js
@@ -1,7 +1,7 @@
-module.exports = (req, res, next) => {
+module.exports = (req, res, next)=>{
if(process.env.NODE_ENV === 'local') return next();
if(req.header('x-forwarded-proto') !== 'https') {
return res.redirect(302, `https://${req.get('Host')}${req.url}`);
}
return next();
-};
\ No newline at end of file
+};