diff --git a/woodwind/models.py b/woodwind/models.py index 78640e5..5b48653 100644 --- a/woodwind/models.py +++ b/woodwind/models.py @@ -59,6 +59,18 @@ class User(db.Model): def get_id(self): return self.domain + def get_setting(self, key, default=None): + if self.settings is None: + return default + return self.settings.get(key, default) + + def set_setting(self, key, value): + if self.settings is None: + self.settings = {} + else: + self.settings = dict(self.settings) + self.settings[key] = value + def __eq__(self, other): if type(other) is type(self): return self.domain == other.domain diff --git a/woodwind/static/feed.js b/woodwind/static/feed.js index 7206a9b..87a3612 100644 --- a/woodwind/static/feed.js +++ b/woodwind/static/feed.js @@ -11,16 +11,26 @@ $(function(){ function clickShowReplyForm(evt) { var a = $(this); evt.preventDefault(); - $(".reply-form", a.parent()).css('display', 'inherit'); - a.css('display', 'none'); + $(".like-form", a.parent()).hide(); + $(".reply-form", a.parent()).toggle();//css('display', 'inherit'); + //a.css('display', 'none'); + } + + function clickShowLikeForm(evt) { + var a = $(this); + evt.preventDefault(); + $(".reply-form", a.parent()).hide(); + $(".like-form", a.parent()).toggle(); + //a.css('display', 'none'); } function submitMicropubForm(evt) { evt.preventDefault(); var form = $(this); + var replyArea = form.parent(); var endpoint = form.attr('action'); - var responseArea = $('.submit-response', form); + var responseArea = $('.micropub-response', replyArea); $.post( '/_forward', @@ -28,21 +38,26 @@ $(function(){ function(result) { if (Math.floor(result.code / 100) == 2) { responseArea.html('Success!'); + $(".reply-form textarea").val(""); + $(".reply-form", replyArea).hide(); + $(".like-form", replyArea).hide(); } else { responseArea.html('Failure'); } }, 'json' ); + + responseArea.html('Posting…'); } function attachListeners() { - $(".reply-form").css('display', 'none'); - $(".show-reply-form").css('display', 'inline'); + $(".reply-form, .like-form").css('display', 'none'); $("#older-link").off('click').click(clickOlderLink); $(".show-reply-form").off('click').click(clickShowReplyForm); + $(".show-like-form").off('click').click(clickShowLikeForm); $(".like-form, .reply-form").off('submit').submit(submitMicropubForm); } diff --git a/woodwind/static/style.css b/woodwind/static/style.css index 0507ef4..81ee849 100644 --- a/woodwind/static/style.css +++ b/woodwind/static/style.css @@ -433,7 +433,7 @@ textarea, input[type="text"], input[type="url"] { .reply-area { text-align: center; } - .reply-area a { + .reply-area .reply-link { display: inline-block; padding: 0.2em; border: 1px solid #687D77; @@ -450,6 +450,32 @@ button { form { margin: 1em 0; } +.toggle { + font-family: sans-serif; + background-color: #eee; + display: inline-block; + border-radius: 4px; + padding: 0.2em 2em 0.2em 0.2em; } + .toggle input { + display: none; } + .toggle label { + font-weight: inherit; + /* override bootstrap */ + margin: inherit; + /* override bootstrap */ + position: relative; + transition: transform 0.1s; + cursor: pointer; + background-color: #ccc; + color: #666; + display: inline-block; + padding: 0.25em 1em; + border-radius: 3.8px; } + .toggle input:checked + label { + background-color: #337AB7; + color: #fff; + transform: translateX(1.8em); } + @media only screen and (max-width: 800px) { article header img { vertical-align: text-middle; diff --git a/woodwind/static/style.css.map b/woodwind/static/style.css.map index 927427a..9daae98 100644 --- a/woodwind/static/style.css.map +++ b/woodwind/static/style.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "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", +"mappings": "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", "sources": ["normalize.scss","style.scss"], "names": [], "file": "style.css" diff --git a/woodwind/static/style.scss b/woodwind/static/style.scss index 9973cfb..2dffbff 100644 --- a/woodwind/static/style.scss +++ b/woodwind/static/style.scss @@ -116,7 +116,7 @@ textarea, input[type="text"], input[type="url"] { .reply-area { text-align: center; - a { + .reply-link { display: inline-block; padding: 0.2em; border: 1px solid $sirocco; @@ -127,6 +127,9 @@ textarea, input[type="text"], input[type="url"] { min-width: 50px; text-align: center; } + .like-form, .reply-form { + + } } button { @@ -137,6 +140,39 @@ form { margin: 1em 0; } + +.toggle { + font-family: sans-serif; + background-color: #eee; + display: inline-block; + border-radius: 4px; + padding: 0.2em 2em 0.2em 0.2em; + + input { + display: none; + } + + label { + font-weight: inherit; /* override bootstrap */ + margin: inherit; /* override bootstrap */ + position: relative; + transition: transform 0.1s; + cursor: pointer; + background-color: #ccc; + color: #666; + display: inline-block; + padding: 0.25em 1em; + border-radius: 3.8px; + } + + input:checked + label { + background-color: #337AB7; + color: #fff; + transform: translateX(1.8em); + } +} + + @media only screen and (max-width: 800px) { article { header { diff --git a/woodwind/templates/_reply.jinja2 b/woodwind/templates/_reply.jinja2 index 13b0fa4..df4b6b1 100644 --- a/woodwind/templates/_reply.jinja2 +++ b/woodwind/templates/_reply.jinja2 @@ -2,25 +2,51 @@ {% set replyMethod = settings.get('reply-method') %} {% if replyMethod == 'micropub' and current_user.micropub_endpoint %} + + Like + Reply +
+
- - -
- + {% for target in current_user.get_setting('syndicate-to', []) %} + {% set input_id = 'st-like-{}-{}'.format(entry.id, loop.index) %} +
+ + +
+ {% endfor %} + +
+ +
+ + {% for target in current_user.get_setting('syndicate-to', []) %} + {% set input_id = 'st-reply-{}-{}'.format(entry.id, loop.index) %} +
+ + +
+ {% endfor %} +
+ -
+
+
+ {% elif replyMethod == 'indie-config' %} {% for action in settings.get('indie-config-actions', []) %} diff --git a/woodwind/views.py b/woodwind/views.py index a1da3d9..3e595fd 100644 --- a/woodwind/views.py +++ b/woodwind/views.py @@ -159,6 +159,7 @@ def login_callback(resp): user.url = resp.me db.session.commit() flask_login.login_user(user, remember=True) + update_micropub_syndicate_to() return flask.redirect(resp.next_url or flask.url_for('.index')) @@ -187,9 +188,31 @@ def micropub_callback(resp): user.micropub_endpoint = resp.micropub_endpoint user.access_token = resp.access_token db.session.commit() + update_micropub_syndicate_to() return flask.redirect(resp.next_url or flask.url_for('.index')) +@flask_login.login_required +def update_micropub_syndicate_to(): + endpt = flask_login.current_user.micropub_endpoint + token = flask_login.current_user.access_token + if not endpt or not token: + return + resp = requests.get(endpt, params={ + 'q': 'syndicate-to', + }, headers={ + 'Authorization': 'Bearer ' + token, + }) + if resp.status_code // 100 != 2: + flask.current_app.logger.warn( + 'Unexpected response querying micropub endpoint %s: %s', + resp, resp.text) + return + syndicate_tos = urllib.parse.parse_qs(resp.text).get('syndicate-to[]', []) + flask_login.current_user.set_setting('syndicate-to', syndicate_tos) + db.session.commit() + + @views.route('/deauthorize') @flask_login.login_required def deauthorize(): @@ -312,6 +335,14 @@ def find_possible_feeds(origin): return feeds +@views.app_template_filter() +def prettify_url(url): + parsed = urllib.parse.urlparse(url) + if parsed.path: + return parsed.netloc + parsed.path + return parsed.netloc + + @views.app_template_global() def url_for_other_page(page): """http://flask.pocoo.org/snippets/44/#URL+Generation+Helper