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 +};