diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 0967e05e2..1f77d785c 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -196,11 +196,14 @@ const EditPage = createClass({ const transfer = this.state.saveGoogle == _.isNil(this.state.brew.googleId); + const brew = this.state.brew; + brew.pageCount = ((brew.renderer=='legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^\\page/gm)) || []).length + 1; + if(this.state.saveGoogle) { if(transfer) { const res = await request .post('/api/newGoogle/') - .send(this.state.brew) + .send(brew) .catch((err)=>{ console.log(err.status === 401 ? 'Not signed in!' @@ -211,7 +214,7 @@ const EditPage = createClass({ if(!res) { return; } console.log('Deleting Local Copy'); - await request.delete(`/api/${this.state.brew.editId}`) + await request.delete(`/api/${brew.editId}`) .send() .catch((err)=>{ console.log('Error deleting Local Copy'); @@ -221,8 +224,8 @@ const EditPage = createClass({ history.replaceState(null, null, `/edit/${this.savedBrew.googleId}${this.savedBrew.editId}`); //update URL to match doc ID } else { const res = await request - .put(`/api/updateGoogle/${this.state.brew.editId}`) - .send(this.state.brew) + .put(`/api/updateGoogle/${brew.editId}`) + .send(brew) .catch((err)=>{ console.log(err.status === 401 ? 'Not signed in!' @@ -236,14 +239,14 @@ const EditPage = createClass({ } else { if(transfer) { const res = await request.post('/api') - .send(this.state.brew) + .send(brew) .catch((err)=>{ console.log('Error creating Local Copy'); this.setState({ errors: err }); return; }); - await request.get(`/api/removeGoogle/${this.state.brew.googleId}${this.state.brew.editId}`) + await request.get(`/api/removeGoogle/${brew.googleId}${brew.editId}`) .send() .catch((err)=>{ console.log('Error Deleting Google Brew'); @@ -253,8 +256,8 @@ const EditPage = createClass({ history.replaceState(null, null, `/edit/${this.savedBrew.editId}`); //update URL to match doc ID } else { const res = await request - .put(`/api/update/${this.state.brew.editId}`) - .send(this.state.brew) + .put(`/api/update/${brew.editId}`) + .send(brew) .catch((err)=>{ console.log('Error Updating Local Brew'); this.setState({ errors: err }); diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index e77fbc987..cebfed133 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -161,6 +161,8 @@ const NewPage = createClass({ brew.text = brew.text.slice(index + 5); }; + brew.pageCount=((brew.renderer=='legacy' ? brew.text.match(/\\page/g) : brew.text.match(/^\\page/gm)) || []).length + 1; + if(this.state.saveGoogle) { const res = await request .post('/api/newGoogle/') diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.jsx b/client/homebrew/pages/userPage/brewItem/brewItem.jsx index 50ab397c3..be0583f88 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.jsx +++ b/client/homebrew/pages/userPage/brewItem/brewItem.jsx @@ -104,26 +104,28 @@ const BrewItem = createClass({ const dateFormatString = 'YYYY-MM-DD HH:mm:ss'; return
-

{brew.title}

-

{brew.description}

+
+

{brew.title}

+

{brew.description}

+

-
- - {brew.authors.join(', ')} - {brew.views} - - - {moment(brew.updatedAt).fromNow()} + {brew.pageCount && + + {brew.pageCount} + + } + + {moment(brew.updatedAt).fromNow()} {this.renderGoogleDriveIcon()} +
+ + {brew.authors.join(', ')} +
diff --git a/client/homebrew/pages/userPage/brewItem/brewItem.less b/client/homebrew/pages/userPage/brewItem/brewItem.less index efae9d8d3..b5250ae8c 100644 --- a/client/homebrew/pages/userPage/brewItem/brewItem.less +++ b/client/homebrew/pages/userPage/brewItem/brewItem.less @@ -10,24 +10,28 @@ min-height : 105px; margin-right : 15px; margin-bottom : 15px; - padding : 5px 15px 5px 8px; + padding : 5px 15px 2px 8px; padding-right : 15px; border : 1px solid #c9ad6a; border-radius : 5px; -webkit-column-break-inside : avoid; page-break-inside : avoid; break-inside : avoid; - h4{ - margin-bottom : 5px; - font-size : 2.2em; + .text { + min-height : 54px; + h4{ + margin-bottom : 5px; + font-size : 2.2em; + } } .info{ - position: absolute; - bottom: 0px; + position: initial; + bottom: 2px; margin-bottom: 4px; font-family : ScalySans; font-size : 1.2em; &>span{ + display : float; margin-right : 12px; } } diff --git a/server/googleActions.js b/server/googleActions.js index eab6babf3..04cda42a9 100644 --- a/server/googleActions.js +++ b/server/googleActions.js @@ -109,24 +109,23 @@ GoogleActions = { const brews = obj.data.files.map((file)=>{ return { - text : '', - shareId : file.properties.shareId, - editId : file.properties.editId, - createdAt : file.createdTime, - updatedAt : file.modifiedTime, - gDrive : true, - googleId : file.id, - - title : file.properties.title, - description : file.description, + text : '', + shareId : file.properties.shareId, + editId : file.properties.editId, + createdAt : file.createdTime, + updatedAt : file.modifiedTime, + gDrive : true, + googleId : file.id, + pageCount : file.properties.pageCount, + title : file.properties.title, + description : file.description, views : file.properties.views, - tags : '', - published : file.properties.published ? file.properties.published == 'true' : false, - authors : [req.account.username], //TODO: properly save and load authors to google drive - systems : [] - }; - }); - + tags : '', + published : file.properties.published ? file.properties.published == 'true' : false, + authors : [req.account.username], //TODO: properly save and load authors to google drive + systems : [] + }; + }); return brews; }, @@ -154,13 +153,15 @@ GoogleActions = { resource : { name : `${brew.title}.txt`, description : `${brew.description}`, properties : { title : brew.title, - published : brew.published, - lastViewed : brew.lastViewed, - views : brew.views, - version : brew.version, - renderer : brew.renderer, - tags : brew.tags, - systems : brew.systems.join() } + published : brew.published, + lastViewed : brew.lastViewed, + views : brew.views, + version : brew.version, + renderer : brew.renderer, + tags : brew.tags, + systems : brew.systems.join(), + pageCount : brew.pageCount + } }, media : { mimeType : 'text/plain', body : brew.text } @@ -191,11 +192,12 @@ GoogleActions = { 'description' : `${brew.description}`, 'parents' : [folderId], 'properties' : { //AppProperties is not accessible - 'shareId' : nanoid(12), - 'editId' : nanoid(12), - 'title' : brew.title, - 'views' : '0', - 'renderer' : brew.renderer || 'legacy' + 'shareId' : nanoid(12), + 'editId' : nanoid(12), + 'title' : brew.title, + 'views' : '0', + 'pageCount' : brew.pageCount, + 'renderer' : brew.renderer || 'legacy' } }; @@ -230,6 +232,7 @@ GoogleActions = { updatedAt : new Date(), gDrive : true, googleId : obj.data.id, + pageCount : fileMetadata.properties.pageCount, title : brew.title, description : brew.description, @@ -301,6 +304,7 @@ GoogleActions = { createdAt : obj.data.createdTime, updatedAt : obj.data.modifiedTime, lastViewed : obj.data.properties.lastViewed, + pageCount : obj.data.properties.pageCount, views : parseInt(obj.data.properties.views) || 0, //brews with no view parameter will return undefined version : parseInt(obj.data.properties.version) || 0, renderer : obj.data.properties.renderer ? obj.data.properties.renderer : 'legacy', diff --git a/server/homebrew.model.js b/server/homebrew.model.js index c2abdf199..acc78a624 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -4,11 +4,12 @@ const _ = require('lodash'); const zlib = require('zlib'); const HomebrewSchema = mongoose.Schema({ - shareId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } }, - editId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } }, - title : { type: String, default: '' }, - text : { type: String, default: '' }, - textBin : { type: Buffer }, + shareId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } }, + editId : { type: String, default: ()=>{return nanoid(12);}, index: { unique: true } }, + title : { type: String, default: '' }, + text : { type: String, default: '' }, + textBin : { type: Buffer }, + pageCount : { type: Number, default: 1 }, description : { type: String, default: '' }, tags : { type: String, default: '' },