You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/07/27 15:11:31 UTC
[10/49] allura git commit: [#7685] ticket:825 Add UI feedback for
subscribe/unsubscribe actions
[#7685] ticket:825 Add UI feedback for subscribe/unsubscribe actions
Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/6d0eb69a
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/6d0eb69a
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/6d0eb69a
Branch: refs/heads/ib/7897
Commit: 6d0eb69a33b4118f27617101bf22691f68d60d20
Parents: c89213c
Author: Igor Bondarenko <je...@gmail.com>
Authored: Wed Jul 22 17:10:45 2015 +0300
Committer: Heith Seewald <hs...@slashdotmedia.com>
Committed: Wed Jul 22 11:47:58 2015 -0400
----------------------------------------------------------------------
.../lib/widgets/resources/js/subscriptions.js | 56 ++++++++++++++++----
Allura/allura/templates/widgets/subscribe.html | 1 +
ForgeBlog/forgeblog/main.py | 2 +
.../forgediscussion/controllers/forum.py | 1 +
ForgeTracker/forgetracker/tracker_main.py | 2 +
ForgeWiki/forgewiki/wiki_main.py | 2 +
6 files changed, 53 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/Allura/allura/lib/widgets/resources/js/subscriptions.js
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/widgets/resources/js/subscriptions.js b/Allura/allura/lib/widgets/resources/js/subscriptions.js
index c03bbeb..d5a7648 100644
--- a/Allura/allura/lib/widgets/resources/js/subscriptions.js
+++ b/Allura/allura/lib/widgets/resources/js/subscriptions.js
@@ -23,21 +23,30 @@ var dom = React.createElement;
var state = {
'thing': 'tool',
'subscribed': false,
+ 'subscribed_to_tool': false,
'url': '',
'icon': {}
};
SubscriptionForm = React.createClass({
+ getInitialState: function() {
+ return {tooltip_timeout: null};
+ },
+
render: function() {
var action = this.props.subscribed ? "Unsubscribe from" : "Subscribe to";
var title = action + ' this ' + this.props.thing;
var link_opts = {
+ ref: 'link',
className: this.props.subscribed ? 'active' : '',
href: '#',
title: title,
onClick: this.handleClick
};
+ if (this.props.in_progress) {
+ link_opts.style = {cursor: 'wait'};
+ }
var icon_opts = {
'data-icon': this.props.icon.char,
className: 'ico ' + this.props.icon.css,
@@ -56,23 +65,48 @@ SubscriptionForm = React.createClass({
data.subscribe = true;
}
set_state({in_progress: true});
- /*
- * TODO:
- * - show 'in-progress' status to user somehow
- * - handle errors (show to the user in some kind of popup/flash?)
- * - If user is subscribed to the whole tool and she tries to subsribe to
- * the artifact she will not be subscribed, so nothing will change in the
- * UI and it's confusing. We need to show some information message in
- * such case
- */
$.post(url, data, function(resp) {
if (resp.status == 'ok') {
- set_state({subscribed: resp.subscribed});
+ set_state({
+ subscribed: resp.subscribed,
+ subscribed_to_tool: resp.subscribed_to_tool
+ });
+ var link = this.getLinkNode();
+ var text = null;
+ if (resp.subscribed_to_tool) {
+ text = "You can't subscribe to this ";
+ text += this.props.thing;
+ text += " because you are already subscribed to the entire tool";
+ } else {
+ var action = resp.subscribed ? 'subscribed to' : 'unsubscribed from';
+ text = 'Successfully ' + action + ' this ' + this.props.thing;
+ }
+ $(link).tooltipster('content', text).tooltipster('show');
+ if (this.state.tooltip_timeout) {
+ clearTimeout(this.state.tooltip_timeout);
+ }
+ var t = setTimeout(function() { $(link).tooltipster('hide'); }, 4000);
+ this.setState({tooltip_timeout: t});
}
- }).always(function() {
+ }.bind(this)).always(function() {
set_state({in_progress: false});
});
return false;
+ },
+
+ getLinkNode: function() { return React.findDOMNode(this.refs.link); },
+
+ componentDidMount: function() {
+ var link = this.getLinkNode();
+ $(link).tooltipster({
+ content: '',
+ animation: 'fade',
+ delay: 200,
+ trigger: 'custom',
+ position: 'top',
+ iconCloning: false,
+ maxWidth: 300
+ });
}
});
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/Allura/allura/templates/widgets/subscribe.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/subscribe.html b/Allura/allura/templates/widgets/subscribe.html
index 1361a9c..2b61f71 100644
--- a/Allura/allura/templates/widgets/subscribe.html
+++ b/Allura/allura/templates/widgets/subscribe.html
@@ -31,6 +31,7 @@
document.SUBSCRIPTION_OPTIONS = {
"thing": "{{thing}}",
"subscribed": {{"true" if value else "false"}},
+ "subscribed_to_tool": {{"true" if tool_subscribed else "false"}},
"url": "{{action}}",
"icon": {
"char": "{{g.icons['mail'].char}}",
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/ForgeBlog/forgeblog/main.py
----------------------------------------------------------------------
diff --git a/ForgeBlog/forgeblog/main.py b/ForgeBlog/forgeblog/main.py
index adfc172..b4f4641 100644
--- a/ForgeBlog/forgeblog/main.py
+++ b/ForgeBlog/forgeblog/main.py
@@ -323,6 +323,7 @@ class PostController(BaseController, FeedController):
post = self._get_version(version)
base_post = self.post
subscribed = M.Mailbox.subscribed(artifact=self.post)
+ c.subscribe_form.tool_subscribed = M.Mailbox.subscribed()
return dict(post=post, base_post=base_post,
page=page, limit=limit, count=post_count,
subscribed=subscribed)
@@ -388,6 +389,7 @@ class PostController(BaseController, FeedController):
return {
'status': 'ok',
'subscribed': M.Mailbox.subscribed(artifact=self.post),
+ 'subscribed_to_tool': M.Mailbox.subscribed(),
}
def get_feed(self, project, app, user):
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/ForgeDiscussion/forgediscussion/controllers/forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/controllers/forum.py b/ForgeDiscussion/forgediscussion/controllers/forum.py
index b915823..8d0117d 100644
--- a/ForgeDiscussion/forgediscussion/controllers/forum.py
+++ b/ForgeDiscussion/forgediscussion/controllers/forum.py
@@ -133,6 +133,7 @@ class ForumController(DiscussionController):
return {
'status': 'ok',
'subscribed': M.Mailbox.subscribed(artifact=self.discussion),
+ 'subscribed_to_tool': M.Mailbox.subscribed(),
}
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/ForgeTracker/forgetracker/tracker_main.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tracker_main.py b/ForgeTracker/forgetracker/tracker_main.py
index 0049957..ddf570d 100644
--- a/ForgeTracker/forgetracker/tracker_main.py
+++ b/ForgeTracker/forgetracker/tracker_main.py
@@ -1359,6 +1359,7 @@ class TicketController(BaseController, FeedController):
c.ticket_custom_field = W.ticket_custom_field
c.vote_form = W.vote_form
tool_subscribed = M.Mailbox.subscribed()
+ c.subscribe_form.tool_subscribed = tool_subscribed
if tool_subscribed:
subscribed = False
else:
@@ -1534,6 +1535,7 @@ class TicketController(BaseController, FeedController):
return {
'status': 'ok',
'subscribed': M.Mailbox.subscribed(artifact=self.ticket),
+ 'subscribed_to_tool': M.Mailbox.subscribed(),
}
@expose('json:')
http://git-wip-us.apache.org/repos/asf/allura/blob/6d0eb69a/ForgeWiki/forgewiki/wiki_main.py
----------------------------------------------------------------------
diff --git a/ForgeWiki/forgewiki/wiki_main.py b/ForgeWiki/forgewiki/wiki_main.py
index 9fca1c2..513b1e2 100644
--- a/ForgeWiki/forgewiki/wiki_main.py
+++ b/ForgeWiki/forgewiki/wiki_main.py
@@ -558,6 +558,7 @@ class PageController(BaseController, FeedController):
next = cur + 1
hide_left_bar = not (c.app.show_left_bar)
subscribed_to_page = M.Mailbox.subscribed(artifact=self.page)
+ c.subscribe_form.tool_subscribed = M.Mailbox.subscribed()
return dict(
page=page,
cur=cur, prev=prev, next=next,
@@ -750,6 +751,7 @@ class PageController(BaseController, FeedController):
return {
'status': 'ok',
'subscribed': M.Mailbox.subscribed(artifact=self.page),
+ 'subscribed_to_tool': M.Mailbox.subscribed(),
}