mirror of
https://github.com/naturalcrit/homebrewery.git
synced 2025-12-30 13:12:40 +00:00
* Include two versions of Marked.js
* Include two versions of Marked.js
* Working two different render pipelines
Adds stylesheet "styleLegacy.less"
Adds markdownHandler "markdownLegacy.js"
The BrewRenderer will switch between these and the new pipeline dependent on the "version" prop passed in.
* Mustache-style div blocks
* Legacy snippets & columnbreak
* Codemirror styling for Div Blocks
* Lint
* Codemirror highlights for inline Divs as well
These will turn red `{{class Content}}`
Multi-line divs will turn purple
```
{{class,class2
content
}}
```
No real need for these to be different colors. Just for testing.
* More lint
* Update dependencies.
* Adding Button to switch render pipelines
* Update Marked.js
* Popup alert to refresh page when renderer changed
* Don't compress files in Development (very slow)
* Block DIV or inline Span depending on {{ placement
* \column emits a Div instead of Span
* Allow share page to use new renderer
* {{ divs no longer need empty lines. Spans work in lists.
* Typo
* Typo
* Enforce \page must be at start of line. Code cleanup.
* Inject newlines after/before {{/}} to avoid needing blank lines
* Fixes issues with tables.
* Remove console.log
* Fix spacing issue for Spans
* Move things from Brewrenderer to Markdown
Try to keep all custom text fiddling in one spot.
* Rename variables
* Update Font-Awesome to v5.15. Fix style issues on popups.
* Update {{ Divs/Spans, Fix nested hilighting
* Fixed Spans/divs with no tags or just commas
* Use blacklist for {{ to allow more characters
* Update package-lock.json
* Update all icons to Font-awesome 5
* V3 hidden behind config variable
Add "globalThis.enable_v3 = true" in the console to enable.
* lint
119 lines
3.1 KiB
JavaScript
119 lines
3.1 KiB
JavaScript
require('./brewItem.less');
|
|
const React = require('react');
|
|
const createClass = require('create-react-class');
|
|
const _ = require('lodash');
|
|
const cx = require('classnames');
|
|
const moment = require('moment');
|
|
const request = require('superagent');
|
|
|
|
const googleDriveIcon = require('../../../googleDrive.png');
|
|
|
|
const BrewItem = createClass({
|
|
getDefaultProps : function() {
|
|
return {
|
|
brew : {
|
|
title : '',
|
|
description : '',
|
|
|
|
authors : []
|
|
}
|
|
};
|
|
},
|
|
|
|
deleteBrew : function(){
|
|
if(this.props.brew.authors.length <= 1){
|
|
if(!confirm('Are you sure you want to delete this brew? Because you are the only owner of this brew, the document will be deleted permanently.')) return;
|
|
if(!confirm('Are you REALLY sure? You will not be able to recover the document.')) return;
|
|
} else {
|
|
if(!confirm('Are you sure you want to remove this brew from your collection? This will remove you as an editor, but other owners will still be able to access the document.')) return;
|
|
if(!confirm('Are you REALLY sure? You will lose editor access to this document.')) return;
|
|
}
|
|
|
|
if(this.props.brew.googleId) {
|
|
request.get(`/api/removeGoogle/${this.props.brew.googleId}${this.props.brew.editId}`)
|
|
.send()
|
|
.end(function(err, res){
|
|
location.reload();
|
|
});
|
|
} else {
|
|
request.delete(`/api/${this.props.brew.editId}`)
|
|
.send()
|
|
.end(function(err, res){
|
|
location.reload();
|
|
});
|
|
}
|
|
},
|
|
|
|
renderDeleteBrewLink : function(){
|
|
if(!this.props.brew.editId) return;
|
|
|
|
return <a onClick={this.deleteBrew}>
|
|
<i className='fas fa-trash-alt' />
|
|
</a>;
|
|
},
|
|
|
|
renderEditLink : function(){
|
|
if(!this.props.brew.editId) return;
|
|
|
|
let editLink = this.props.brew.editId;
|
|
if(this.props.brew.googleId) {
|
|
editLink = this.props.brew.googleId + editLink;
|
|
}
|
|
|
|
return <a href={`/edit/${editLink}`} target='_blank' rel='noopener noreferrer'>
|
|
<i className='fas fa-pencil-alt' />
|
|
</a>;
|
|
},
|
|
|
|
renderShareLink : function(){
|
|
if(!this.props.brew.shareId) return;
|
|
|
|
let shareLink = this.props.brew.shareId;
|
|
if(this.props.brew.googleId) {
|
|
shareLink = this.props.brew.googleId + shareLink;
|
|
}
|
|
|
|
return <a href={`/share/${shareLink}`} target='_blank' rel='noopener noreferrer'>
|
|
<i className='fas fa-share-alt' />
|
|
</a>;
|
|
},
|
|
|
|
renderGoogleDriveIcon : function(){
|
|
if(!this.props.brew.gDrive) return;
|
|
|
|
return <span>
|
|
<img className='googleDriveIcon' src={googleDriveIcon} alt='googleDriveIcon' />
|
|
</span>;
|
|
},
|
|
|
|
render : function(){
|
|
const brew = this.props.brew;
|
|
return <div className='brewItem'>
|
|
<h2>{brew.title}</h2>
|
|
<p className='description' >{brew.description}</p>
|
|
<hr />
|
|
|
|
<div className='info'>
|
|
<span>
|
|
<i className='fas fa-user' /> {brew.authors.join(', ')}
|
|
</span>
|
|
<span>
|
|
<i className='fas fa-eye' /> {brew.views}
|
|
</span>
|
|
<span>
|
|
<i className='fas fa-sync-alt' /> {moment(brew.updatedAt).fromNow()}
|
|
</span>
|
|
{this.renderGoogleDriveIcon()}
|
|
</div>
|
|
|
|
<div className='links'>
|
|
{this.renderShareLink()}
|
|
{this.renderEditLink()}
|
|
{this.renderDeleteBrewLink()}
|
|
</div>
|
|
</div>;
|
|
}
|
|
});
|
|
|
|
module.exports = BrewItem;
|