diff --git a/client/homebrew/homebrew.less b/client/homebrew/homebrew.less index 7ef02bd98..3d031b871 100644 --- a/client/homebrew/homebrew.less +++ b/client/homebrew/homebrew.less @@ -8,10 +8,9 @@ background-color : @steel; flex-direction : column; .content{ - position : relative; - overflow-y : hidden; - height : calc(~"100% - 29px"); //Navbar height - flex : auto; + position : relative; + 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 37fece907..0e3daa7e7 100644 --- a/client/homebrew/navbar/recent.navitem.jsx +++ b/client/homebrew/navbar/recent.navitem.jsx @@ -1,72 +1,51 @@ 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 EDIT_KEY = 'homebrewery-recently-edited'; const VIEW_KEY = 'homebrewery-recently-viewed'; +const EDIT_KEY = 'homebrewery-recently-edited'; - -const RecentItems = createClass({ - +const BaseItem = createClass({ getDefaultProps : function() { return { - storageKey : '', - showEdit : false, - showView : false + storageKey : '', + text : '', + currentBrew : { + title : '', + id : '', + url : '' + } }; }, - getInitialState : function() { return { showDropdown : false, - edit : [], - view : [] + brews : [] }; }, componentDidMount : function() { + let brews = JSON.parse(localStorage.getItem(this.props.storageKey) || '[]'); - //== 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}`, + 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, ts : Date.now() }); } - 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)); - + brews = _.slice(brews, 0, 8); + localStorage.setItem(this.props.storageKey, JSON.stringify(brews)); this.setState({ - edit : edited, - view : viewed + brews : brews }); }, @@ -79,25 +58,14 @@ const RecentItems = createClass({ renderDropdown : function(){ if(!this.state.showDropdown) return null; - const makeItems = (brews)=>{ - return _.map(brews, (brew)=>{ - return - {brew.title || '[ no title ]'} - {Moment(brew.ts).fromNow()} - ; - }); - }; + const items = _.map(this.state.brews, (brew)=>{ + return + {brew.title} + {Moment(brew.ts).fromNow()} + ; + }); - 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 } -
; + return
{items}
; }, render : function(){ @@ -107,37 +75,126 @@ const RecentItems = createClass({ {this.props.text} {this.renderDropdown()} ; - } + }, }); + + module.exports = { + viewed : createClass({ + getDefaultProps : function() { + return { + brew : { + title : '', + shareId : '' + } + }; + }, + render : function(){ + return ; + }, + }), - edited : (props)=>{ - return ; - }, + edited : createClass({ + getDefaultProps : function() { + return { + brew : { + title : '', + editId : '' + } + }; + }, + render : function(){ + return ; + }, + }), - viewed : (props)=>{ - return ; - }, + both : createClass({ + getDefaultProps : function() { + return { + errorId : null + }; + }, - both : (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()} + ; + } + + }) }; \ No newline at end of file diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index db7789b88..1b3b7a808 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 RecentNavItem = require('../../navbar/recent.navitem.jsx').both; +//const RecentlyEdited = require('../../navbar/recent.navitem.jsx').edited; const SplitPane = require('naturalcrit/splitPane/splitPane.jsx'); const Editor = require('../../editor/editor.jsx'); @@ -186,15 +186,14 @@ 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 9faaa479c..42fb8a60a 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').both; +const RecentNavItem = require('../../navbar/recent.navitem.jsx'); 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 aca5a5e35..a62b68dd4 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').both; +const RecentNavItem = require('../../navbar/recent.navitem.jsx'); 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 739925be5..169265f3b 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -9,7 +9,6 @@ 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'); @@ -136,7 +135,6 @@ const NewPage = createClass({ {this.renderSaveButton()} {this.renderLocalPrintButton()} - ; diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 2774bf339..b9c07a9ff 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 RecentNavItem = require('../../navbar/recent.navitem.jsx').both; +//const RecentlyViewed = require('../../navbar/recent.navitem.jsx').viewed; 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 fd48007c2..3b7cd7d40 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').both; +const RecentNavItem = require('../../navbar/recent.navitem.jsx'); 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 b84c20f27..1a34e41bc 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