Integrate Twitter into activity log reports

Change-Id: I95721c7a25e60253e9acf244fb7ddc7a557e0ac1
This commit is contained in:
Ilya Shakhat 2016-07-06 16:54:08 +03:00
parent 488df692e7
commit 826e7a9c94
8 changed files with 105 additions and 40 deletions

View File

@ -272,7 +272,7 @@ def company_activity(company):
return result
@blueprint.route('/record/<record_id>')
@blueprint.route('/record/<path:record_id>')
@decorators.templated()
@decorators.exception_handler()
def record(record_id):

View File

@ -266,6 +266,42 @@ function extendWithGravatar(record, image_size) {
});
}
function extendWithTweet(record) {
var tweet = null;
if (record.record_type == "commit") {
tweet = "«" + record.subject + "» is committed by " + record.author_name + " in " + record.module;
} else if (record.record_type == "mark") {
if (record.type == "Workflow" && record.value == 1) {
tweet = record.author_name + " approved «" + record.parent_subject + "» in " + record.module + ":P";
} else if (record.type == "Self-Workflow" && record.value == 1) {
tweet = record.author_name + " self-approved patch in " + record.module;
} else if (record.type == "Workflow" && record.value == -1) {
tweet = record.author_name + " work in progress on patch in " + record.module;
} else if (record.type == "Abandon" || record.type == "Self-Abandon") {
tweet = record.author_name + " abandoned patch in " + record.module;
} else {
var smile = [";(", ":(", "", ":)", ":D"][record.value + 2];
tweet = "Got " + ((record.value > 0)? "+": "") + record.value + " from " + record.author_name + " on patch in " + record.module + smile;
}
} else if (record.record_type == "review") {
tweet = record.status + " change request by " + record.author_name + " in " + record.module;
} else if (record.record_type == "patch") {
tweet = record.author_name + " submitted «" + record.parent_subject + "» in " + record.module;
} else if (record.record_type == "email") {
tweet = record.author_name + " emails about " + record.subject;
} else if (record.record_type == "bpd" || record.record_type == "bpc") {
tweet = "Blueprint «" + record.title + "» in " + record.module;
} else if (record.record_type == "bugf" || record.record_type == "bugr") {
tweet = record.status + " bug «" + record.title + "» in " + record.module + " " + record.web_link;
} else if (record.record_type == "tr") {
tweet = record.author_name + " translated " + record.loc + " words into " + record.language;
}
record.tweet = tweet;
record.tweet_url = "http://stackalytics.com/report/record/" + record.primary_key;
}
function encodeURI(s) {
s = encodeURIComponent(s);
s = s.replace("*", "%2A");

View File

@ -1,5 +1,26 @@
{% macro show_activity_log(user_id=None, company=None, blueprint_id=None,
show_record_type=True, show_user_gravatar=True, gravatar_size=32, show_all=True) -%}
show_record_type=True, show_user_gravatar=True, gravatar_size=32, show_all=True,
show_twitter=False) -%}
{% if show_twitter %}
<script>window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
</script>
{% endif %}
<script type="text/javascript">
var page_size = 10;
@ -34,6 +55,9 @@ show_record_type=True, show_user_gravatar=True, gravatar_size=32, show_all=True)
}
$.each(data["activity"], function() {
extendWithGravatar(this, {{ gravatar_size }});
{% if show_twitter %}
extendWithTweet(this);
{% endif %}
});
$("#activity_template").tmpl(data["activity"]).appendTo("#activity_container");
$('.ext_link').click(function (event) {
@ -44,6 +68,9 @@ show_record_type=True, show_user_gravatar=True, gravatar_size=32, show_all=True)
$(".expand-button").click(function () {
$("#content-" + this.id).slideToggle('fast');
});
if (window.twttr.widgets) {
window.twttr.widgets.load();
}
}
});
}
@ -175,6 +202,12 @@ show_record_type=True, show_user_gravatar=True, gravatar_size=32, show_all=True)
{%elif record_type == "tr" %}
<div class="header">Translated ${loc} words into ${language}</div>
{%/if%}
{%if tweet %}
<div style="margin-top: 1em;">
<a href="https://twitter.com/intent/tweet?text=${tweet}&url=${tweet_url}" class="twitter-share-button" data-via="stackalytics">Tweet</a>
</div>
{%/if%}
</div>
</div>
{% endraw %}

View File

@ -27,6 +27,7 @@
{% if module_inst.has_drivers %}
<div><b><a href="/report/ci/{{ module }}/7" target="_blank">Status of drivers testing in {{ module_inst.module_group_name }} during recent 7 days</a></b></div>
{% endif %}
<div><b><a href="/report/activity?module={{ module }}&project_type={{ project_type }}&release={{ release }}" target="_blank">Show activity report for {{ module }}</a></b></div>
{% endif %}
{% if company %}
<div><b><a href="/report/companies/{{ company }}" target="_blank">Show activity report for {{ company_original }}</a></b></div>

View File

@ -2,5 +2,6 @@
{% import '_macros/activity_log.html' as activity_log %}
{% block content %}
{{ activity_log.show_activity_log(gravatar_size=64, show_all=False) }}
{{ activity_log.show_activity_log(gravatar_size=64, show_all=False,
show_twitter=True) }}
{% endblock %}

View File

@ -19,6 +19,7 @@
<div id="punch_card"></div>
{{ activity_log.show_activity_log(company=company_name, gravatar_size=64) }}
{{ activity_log.show_activity_log(company=company_name, gravatar_size=64,
show_twitter=True) }}
{% endblock %}

View File

@ -2,41 +2,36 @@
{% set gravatar_size = 64 %}
{% if record.record_type == "commit" %}
{% set tweet = "Commit by " + record.author + " in " + record.module %}
{% elif record.record_type == "mark" %}
{% if (record.type == "Workflow" and record.value == 1) %}
{% set tweet = record.author_name + " approved patch by " + record.parent_author_name %}
{% elif (record.type == "Self-Workflow" and record.value == 1) %}
{% set tweet = record.author_name + " self-approved patch in " + record.module %}
{% elif (record.type == "Workflow" and record.value == -1) %}
{% set tweet = record.author_name + " works on patch in " + record.module %}
{% elif (record.type == "Abandon" or record.type == "Self-Abandon") %}
{% set tweet = record.author_name + " abandoned patch in " + record.module %}
{% else %}
{% if record.value > 0 %}
{% set v = "+" %}
{% endif %}
{% set v = v ~ record.value %}
{% set tweet = record.parent_author_name + " got " + v + " from " + record.author_name + " on patch in " + record.module %}
{% endif %}
{% elif record.record_type == "review" %}
{% set tweet = record.status + " change request by " + record.author_name + " in " + record.module %}
{% elif record.record_type == "patch" %}
{% set tweet = "New patch by " + record.author_name + " in " + record.module %}
{% elif record.record_type == "tr" %}
{% set tweet = record.author_name + " translated " + record.loc + " words into " + record.language %}
{% endif %}
{% set page_title = tweet %}
{% block scripts %}
<script>window.twttr = (function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0],
t = window.twttr || {};
if (d.getElementById(id)) return t;
js = d.createElement(s);
js.id = id;
js.src = "https://platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
t._e = [];
t.ready = function(f) {
t._e.push(f);
};
return t;
}(document, "script", "twitter-wjs"));
</script>
<script type="text/javascript">
$(document).ready(function () {
var r = {};
r.author_email = "{{ record.author_email }}";
var r = {{ record | tojson | safe}};
extendWithGravatar(r, {{ gravatar_size }});
$("#gravatar").append("<img src=" + r.gravatar + ">")
extendWithTweet(r);
$("#gravatar").append("<img src=" + r.gravatar + ">");
$("#tweet").append("<a href=\"https://twitter.com/intent/tweet?text=" + r.tweet + "\" class=\"twitter-share-button\" data-via=\"stackalytics\">Tweet</a>");
document.title = r.tweet;
if (window.twttr.widgets) {
window.twttr.widgets.load();
}
});
</script>
{% endblock %}
@ -213,10 +208,7 @@
into {{ record.language }}</div>
{% endif %}
<div style="margin-top: 1em;">
<a href="https://twitter.com/intent/tweet?text={{ tweet }}" class="twitter-share-button" data-via="stackalytics">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
</div>
<div style="margin-top: 1em;" id="tweet"></div>
</div>

View File

@ -21,6 +21,7 @@
<div id="punch_card"></div>
{{ activity_log.show_activity_log(user_id=user.user_id, show_user_gravatar=false, gravatar_size=64) }}
{{ activity_log.show_activity_log(user_id=user.user_id,
show_user_gravatar=false, gravatar_size=64, show_twitter=True) }}
{% endblock %}