aboutsummaryrefslogtreecommitdiff
path: root/src/web/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/js')
-rw-r--r--src/web/js/actions/RightPanelActions.js8
-rw-r--r--src/web/js/components/MainApp.react.js2
-rw-r--r--src/web/js/components/Menu.react.js8
-rw-r--r--src/web/js/components/MiddlePanel.react.js8
-rw-r--r--src/web/js/components/RightPanel.react.js30
-rw-r--r--src/web/js/stores/MenuStore.js6
6 files changed, 44 insertions, 18 deletions
diff --git a/src/web/js/actions/RightPanelActions.js b/src/web/js/actions/RightPanelActions.js
index 47adad79..5d78e001 100644
--- a/src/web/js/actions/RightPanelActions.js
+++ b/src/web/js/actions/RightPanelActions.js
@@ -4,8 +4,12 @@ var ActionTypes = require('../constants/JarrConstants');
var MenuActions = require('../actions/MenuActions');
var RightPanelActions = {
- loadArticle: function(article_id, was_read_before) {
- jquery.getJSON('/getart/' + article_id,
+ loadArticle: function(article_id, was_read_before, to_parse) {
+ var suffix = '';
+ if(to_parse) {
+ suffix = '/parse';
+ }
+ jquery.getJSON('/getart/' + article_id + suffix,
function(payload) {
JarrDispatcher.dispatch({
type: ActionTypes.LOAD_ARTICLE,
diff --git a/src/web/js/components/MainApp.react.js b/src/web/js/components/MainApp.react.js
index cbdc5833..ffb14589 100644
--- a/src/web/js/components/MainApp.react.js
+++ b/src/web/js/components/MainApp.react.js
@@ -15,7 +15,7 @@ var MainApp = React.createClass({
<Grid fluid id="jarr-container">
<Menu />
<Col id="middle-panel" mdOffset={3} lgOffset={2}
- xs={4} sm={4} md={4} lg={4}>
+ xs={12} sm={4} md={4} lg={4}>
<MiddlePanel.MiddlePanelFilter />
<MiddlePanel.MiddlePanel />
</Col>
diff --git a/src/web/js/components/Menu.react.js b/src/web/js/components/Menu.react.js
index 60578f8a..f4ad76d0 100644
--- a/src/web/js/components/Menu.react.js
+++ b/src/web/js/components/Menu.react.js
@@ -84,13 +84,15 @@ var CategoryGroup = React.createClass({
name: React.PropTypes.string.isRequired,
feeds: React.PropTypes.array.isRequired,
unread: React.PropTypes.number.isRequired,
- folded: React.PropTypes.bool.isRequired,
+ folded: React.PropTypes.bool,
},
getInitialState: function() {
- return {folded: this.props.folded};
+ return {folded: false};
},
componentWillReceiveProps: function(nextProps) {
- this.setState({folded: nextProps.folded});
+ if(nextProps.folded != null) {
+ this.setState({folded: nextProps.folded});
+ }
},
render: function() {
// hidden the no category if empty
diff --git a/src/web/js/components/MiddlePanel.react.js b/src/web/js/components/MiddlePanel.react.js
index dad33acc..cb5be92d 100644
--- a/src/web/js/components/MiddlePanel.react.js
+++ b/src/web/js/components/MiddlePanel.react.js
@@ -35,7 +35,7 @@ var TableLine = React.createClass({
icon = <Glyphicon glyph="ban-circle" />;
}
var title = (<a href={'/article/redirect/' + this.props.article_id}
- onClick={this.openRedirectLink}>
+ onClick={this.openRedirectLink} target="_blank">
{icon} {this.props.feed_title}
</a>);
var read = (<Glyphicon glyph={this.state.read?"check":"unchecked"}
@@ -43,10 +43,6 @@ var TableLine = React.createClass({
var liked = (<Glyphicon glyph={this.state.liked?"star":"star-empty"}
onClick={this.toogleLike} />);
icon = <Glyphicon glyph={"new-window"} />;
- var newTab = (<a href={'/article/redirect/' + this.props.article_id}
- onClick={this.openRedirectLink} target="_blank">
- {icon}
- </a>);
var clsses = "list-group-item";
if(this.props.selected) {
clsses += " active";
@@ -57,7 +53,7 @@ var TableLine = React.createClass({
<h5><strong>{title}</strong></h5>
<JarrTime text={this.props.date}
stamp={this.props.timestamp} />
- <div>{read} {liked} {newTab} {this.props.title}</div>
+ <div>{read} {liked} {this.props.title}</div>
</div>
);
},
diff --git a/src/web/js/components/RightPanel.react.js b/src/web/js/components/RightPanel.react.js
index 39b06f38..6005e954 100644
--- a/src/web/js/components/RightPanel.react.js
+++ b/src/web/js/components/RightPanel.react.js
@@ -35,6 +35,7 @@ var PanelMixin = {
</Button>);
}
btn_grp = (<ButtonGroup bsSize="small">
+ {this.getExtraButton()}
{edit_button}
{rem_button}
</ButtonGroup>);
@@ -169,13 +170,28 @@ var Article = React.createClass({
],
obj_type: 'article',
getTitle: function() {return this.props.obj.title;},
+ getExtraButton: function() {
+ if(!this.props.obj.readability_available) {
+ return null;
+ }
+ return (<Button id="readability-reload" onClick={this.reloadParsed}
+ active={this.props.obj.readability_parsed}>
+ <img src="/static/img/readability.png" />
+ </Button>);
+ },
getBody: function() {
return (<div className="panel-body">
{this.getCore()}
- <div dangerouslySetInnerHTML={
+ <div id="article-content" dangerouslySetInnerHTML={
{__html: this.props.obj.content}} />
</div>);
},
+ reloadParsed: function() {
+ if(this.props.obj.readability_available
+ && !this.props.obj.readability_parsed) {
+ RightPanelActions.loadArticle(this.props.obj.id, true, true);
+ }
+ },
});
var Feed = React.createClass({
@@ -188,10 +204,13 @@ var Feed = React.createClass({
{'title': 'Feed link', 'type': 'link', 'key': 'link'},
{'title': 'Site link', 'type': 'link', 'key': 'site_link'},
{'title': 'Enabled', 'type': 'bool', 'key': 'enabled'},
+ {'title': 'Auto Readability',
+ 'type': 'bool', 'key': 'readability_auto_parse'},
{'title': 'Filters', 'type': 'ignore', 'key': 'filters'},
{'title': 'Category', 'type': 'ignore', 'key': 'category_id'},
],
getTitle: function() {return this.props.obj.title;},
+ getExtraButton: function() {return null;},
getFilterRow: function(i, filter) {
return (<dd key={'d' + i + '-' + this.props.obj.id}
className="input-group filter-row">
@@ -317,8 +336,6 @@ var Feed = React.createClass({
<dd><JarrTime stamp={this.props.obj.last_stamp}
text={this.props.obj.last_retrieved} />
</dd>
- <dt>Number of articles</dt>
- <dd>{this.props.obj.nb_articles}</dd>
</dl>
{this.getErrorFields()}
{this.getCategorySelect()}
@@ -353,6 +370,7 @@ var Category = React.createClass({
if(this.props.obj.id != 0) {return true;}
else {return false;}
},
+ getExtraButton: function () {return null;},
isRemovable: function() {return this.isEditable();},
obj_type: 'category',
fields: [{'title': 'Category name', 'type': 'string', 'key': 'name'}],
@@ -423,9 +441,9 @@ var RightPanel = React.createClass({
key={this.state.category.id} />);
}
- return (<Col id="right-panel" xsOffset={4} smOffset={4}
- mdOffset={7} lgOffset={6}
- xs={8} sm={8} md={5} lg={6}>
+ return (<Col id="right-panel" xsHidden
+ smOffset={4} mdOffset={7} lgOffset={6}
+ sm={8} md={5} lg={6}>
{breadcrum}
{cntnt}
</Col>
diff --git a/src/web/js/stores/MenuStore.js b/src/web/js/stores/MenuStore.js
index 49c61bc1..9686ff4a 100644
--- a/src/web/js/stores/MenuStore.js
+++ b/src/web/js/stores/MenuStore.js
@@ -17,6 +17,7 @@ var MenuStore = assign({}, EventEmitter.prototype, {
setFilter: function(value) {
if(this._datas.filter != value) {
this._datas.filter = value;
+ this._datas.all_folded = null;
this.emitChange();
}
},
@@ -24,6 +25,7 @@ var MenuStore = assign({}, EventEmitter.prototype, {
if(this._datas.active_id != value || this._datas.active_type != type) {
this._datas.active_type = type;
this._datas.active_id = value;
+ this._datas.all_folded = null;
this.emitChange();
}
},
@@ -53,6 +55,7 @@ MenuStore.dispatchToken = JarrDispatcher.register(function(action) {
MenuStore._datas['error_threshold'] = action.error_threshold;
MenuStore._datas['crawling_method'] = action.crawling_method;
MenuStore._datas['all_unread_count'] = action.all_unread_count;
+ MenuStore._datas.all_folded = null;
MenuStore.emitChange();
break;
case ActionTypes.PARENT_FILTER:
@@ -81,6 +84,7 @@ MenuStore.dispatchToken = JarrDispatcher.register(function(action) {
MenuStore._datas.categories[cat_id].unread += new_unread[feed_id];
}
if(changed) {
+ MenuStore._datas.all_folded = null;
MenuStore.emitChange();
}
}
@@ -98,12 +102,14 @@ MenuStore.dispatchToken = JarrDispatcher.register(function(action) {
MenuStore._datas.categories[article.category_id].unread += val;
MenuStore._datas.feeds[article.feed_id].unread += val;
});
+ MenuStore._datas.all_folded = null;
MenuStore.emitChange();
break;
case ActionTypes.LOAD_ARTICLE:
if(!action.was_read_before) {
MenuStore._datas.categories[action.article.category_id].unread -= 1;
MenuStore._datas.feeds[action.article.feed_id].unread -= 1;
+ MenuStore._datas.all_folded = null;
MenuStore.emitChange();
}
break;
bgstack15