aboutsummaryrefslogtreecommitdiff
path: root/src/web/js
diff options
context:
space:
mode:
Diffstat (limited to 'src/web/js')
-rw-r--r--src/web/js/actions/MenuActions.js5
-rw-r--r--src/web/js/actions/MiddlePanelActions.js5
-rw-r--r--src/web/js/components/Menu.react.js17
-rw-r--r--src/web/js/components/MiddlePanel.react.js8
-rw-r--r--src/web/js/components/RightPanel.react.js11
-rw-r--r--src/web/js/constants/JarrConstants.js22
-rw-r--r--src/web/js/stores/MenuStore.js19
-rw-r--r--src/web/js/stores/MiddlePanelStore.js46
8 files changed, 72 insertions, 61 deletions
diff --git a/src/web/js/actions/MenuActions.js b/src/web/js/actions/MenuActions.js
index b9154581..824610d8 100644
--- a/src/web/js/actions/MenuActions.js
+++ b/src/web/js/actions/MenuActions.js
@@ -5,7 +5,7 @@ var jquery = require('jquery');
var MenuActions = {
// PARENT FILTERS
- reload: function() {
+ reload: function(setFilterFunc, id) {
jquery.getJSON('/menu', function(payload) {
JarrDispatcher.dispatch({
type: ActionTypes.RELOAD_MENU,
@@ -18,6 +18,9 @@ var MenuActions = {
crawling_method: payload.crawling_method,
all_unread_count: payload.all_unread_count,
});
+ if(setFilterFunc && id) {
+ setFilterFunc(id);
+ }
});
},
setFilter: function(filter) {
diff --git a/src/web/js/actions/MiddlePanelActions.js b/src/web/js/actions/MiddlePanelActions.js
index f805b7b1..efae516a 100644
--- a/src/web/js/actions/MiddlePanelActions.js
+++ b/src/web/js/actions/MiddlePanelActions.js
@@ -141,10 +141,7 @@ var MiddlePanelActions = {
url: "/mark_all_as_read",
success: function (payload) {
JarrDispatcher.dispatch({
- type: ActionTypes.CHANGE_ATTR,
- attribute: 'read',
- value_num: -1,
- value_bool: true,
+ type: ActionTypes.MARK_ALL_AS_READ,
articles: payload.articles,
});
},
diff --git a/src/web/js/components/Menu.react.js b/src/web/js/components/Menu.react.js
index f4ad76d0..4537ee81 100644
--- a/src/web/js/components/Menu.react.js
+++ b/src/web/js/components/Menu.react.js
@@ -267,7 +267,22 @@ var Menu = React.createClass({
);
},
componentDidMount: function() {
- MenuActions.reload();
+ var setFilterFunc = null;
+ var id = null;
+ if(window.location.search.substring(1)) {
+ var args = window.location.search.substring(1).split('&');
+ args.map(function(arg) {
+ if (arg.split('=')[0] == 'at' && arg.split('=')[1] == 'c') {
+ setFilterFunc = MiddlePanelActions.setCategoryFilter;
+ } else if (arg.split('=')[0] == 'at' && arg.split('=')[1] == 'f') {
+ setFilterFunc = MiddlePanelActions.setFeedFilter;
+
+ } else if (arg.split('=')[0] == 'ai') {
+ id = parseInt(arg.split('=')[1]);
+ }
+ });
+ }
+ MenuActions.reload(setFilterFunc, id);
MenuStore.addChangeListener(this._onChange);
},
componentWillUnmount: function() {
diff --git a/src/web/js/components/MiddlePanel.react.js b/src/web/js/components/MiddlePanel.react.js
index cb5be92d..561802aa 100644
--- a/src/web/js/components/MiddlePanel.react.js
+++ b/src/web/js/components/MiddlePanel.react.js
@@ -77,7 +77,7 @@ var TableLine = React.createClass({
evnt.stopPropagation();
},
loadArticle: function() {
- this.setState({active: true, read: true}, function() {
+ this.setState({selected: true, read: true}, function() {
RightPanelActions.loadArticle(
this.props.article_id, this.props.read);
}.bind(this));
@@ -228,7 +228,11 @@ var MiddlePanel = React.createClass({
return (<Row className="show-grid">
<div className="list-group">
{this.state.articles.map(function(article){
- return (<TableLine key={"a" + article.article_id}
+ var key = "a" + article.article_id;
+ if(article.read) {key+="r";}
+ if(article.liked) {key+="l";}
+ if(article.selected) {key+="s";}
+ return (<TableLine key={key}
title={article.title}
icon_url={article.icon_url}
read={article.read}
diff --git a/src/web/js/components/RightPanel.react.js b/src/web/js/components/RightPanel.react.js
index 275bcfb3..f765607a 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>);
@@ -175,13 +176,7 @@ var Article = React.createClass({
<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({
@@ -198,6 +193,7 @@ var Feed = React.createClass({
{'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">
@@ -357,6 +353,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'}],
diff --git a/src/web/js/constants/JarrConstants.js b/src/web/js/constants/JarrConstants.js
index 0ea42aad..78e8bf04 100644
--- a/src/web/js/constants/JarrConstants.js
+++ b/src/web/js/constants/JarrConstants.js
@@ -1,23 +1,13 @@
-/*
- * Copyright (c) 2014-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- * TodoConstants
- */
-
var keyMirror = require('keymirror');
module.exports = keyMirror({
TOGGLE_MENU_FOLD: null,
RELOAD_MENU: null,
- PARENT_FILTER: null,
- MENU_FILTER: null,
- CHANGE_ATTR: null,
+ PARENT_FILTER: null, // set a feed or a category as filter in menu
+ MENU_FILTER: null, // change displayed feed in the menu
+ CHANGE_ATTR: null, // edit an attr on an article (like / read)
RELOAD_MIDDLE_PANEL: null,
- MIDDLE_PANEL_FILTER: null,
- LOAD_ARTICLE: null,
+ MIDDLE_PANEL_FILTER: null, // set a filter (read/like/all)
+ LOAD_ARTICLE: null, // load a single article in right panel
+ MARK_ALL_AS_READ: null,
});
diff --git a/src/web/js/stores/MenuStore.js b/src/web/js/stores/MenuStore.js
index 9686ff4a..1cbbbda7 100644
--- a/src/web/js/stores/MenuStore.js
+++ b/src/web/js/stores/MenuStore.js
@@ -29,9 +29,6 @@ var MenuStore = assign({}, EventEmitter.prototype, {
this.emitChange();
}
},
- readFeedArticle: function(feed_id) {
- // TODO
- },
emitChange: function() {
this.emit(CHANGE_EVENT);
},
@@ -88,7 +85,6 @@ MenuStore.dispatchToken = JarrDispatcher.register(function(action) {
MenuStore.emitChange();
}
}
-
break;
case ActionTypes.MENU_FILTER:
MenuStore.setFilter(action.filter);
@@ -116,6 +112,21 @@ MenuStore.dispatchToken = JarrDispatcher.register(function(action) {
case ActionTypes.TOGGLE_MENU_FOLD:
MenuStore._datas.all_folded = action.all_folded;
MenuStore.emitChange();
+ break;
+ case ActionTypes.MARK_ALL_AS_READ:
+ action.articles.map(function(art) {
+ if(!art.read) {
+ MenuStore._datas.feeds[art.feed_id].unread -= 1;
+ if(art.category_id) {
+ MenuStore._datas.categories[art.category_id].unread -= 1;
+
+ }
+ }
+ });
+
+ MenuStore._datas.all_folded = null;
+ MenuStore.emitChange();
+ break;
default:
// do nothing
}
diff --git a/src/web/js/stores/MiddlePanelStore.js b/src/web/js/stores/MiddlePanelStore.js
index 4a5efd00..c554f929 100644
--- a/src/web/js/stores/MiddlePanelStore.js
+++ b/src/web/js/stores/MiddlePanelStore.js
@@ -82,20 +82,18 @@ var MiddlePanelStore = assign({}, EventEmitter.prototype, {
MiddlePanelStore.dispatchToken = JarrDispatcher.register(function(action) {
var changed = false;
- switch(action.type) {
- case ActionTypes.RELOAD_MIDDLE_PANEL:
- changed = MiddlePanelStore.registerFilter(action);
- changed = MiddlePanelStore.setArticles(action.articles) || changed;
- break;
- case ActionTypes.PARENT_FILTER:
- changed = MiddlePanelStore.registerFilter(action);
- changed = MiddlePanelStore.setArticles(action.articles) || changed;
- break;
- case ActionTypes.MIDDLE_PANEL_FILTER:
- changed = MiddlePanelStore.registerFilter(action);
- changed = MiddlePanelStore.setArticles(action.articles) || changed;
- break;
- case ActionTypes.CHANGE_ATTR:
+ if (action.type == ActionTypes.RELOAD_MIDDLE_PANEL
+ || action.type == ActionTypes.PARENT_FILTER
+ || action.type == ActionTypes.MIDDLE_PANEL_FILTER) {
+ changed = MiddlePanelStore.registerFilter(action);
+ changed = MiddlePanelStore.setArticles(action.articles) || changed;
+ } else if (action.type == ActionTypes.MARK_ALL_AS_READ) {
+ changed = MiddlePanelStore.registerFilter(action);
+ for(var i in action.articles) {
+ action.articles[i].read = true;
+ }
+ changed = MiddlePanelStore.setArticles(action.articles) || changed;
+ } else if (action.type == ActionTypes.CHANGE_ATTR) {
var attr = action.attribute;
var val = action.value_bool;
action.articles.map(function(article) {
@@ -112,19 +110,15 @@ MiddlePanelStore.dispatchToken = JarrDispatcher.register(function(action) {
}
}
});
- break;
- case ActionTypes.LOAD_ARTICLE:
- changed = true;
- MiddlePanelStore._datas.selected_article = action.article.id;
- for (var i in MiddlePanelStore._datas.articles) {
- if(MiddlePanelStore._datas.articles[i].article_id == action.article.id) {
- MiddlePanelStore._datas.articles[i].read = true;
- break;
- }
+ } else if (action.type == ActionTypes.LOAD_ARTICLE) {
+ changed = true;
+ MiddlePanelStore._datas.selected_article = action.article.id;
+ for (var i in MiddlePanelStore._datas.articles) {
+ if(MiddlePanelStore._datas.articles[i].article_id == action.article.id) {
+ MiddlePanelStore._datas.articles[i].read = true;
+ break;
}
- break;
- default:
- // pass
+ }
}
if(changed) {MiddlePanelStore.emitChange();}
});
bgstack15