chg: dev: title rank

This commit is contained in:
rachmadaniHaryono 2018-04-26 20:47:04 +08:00
parent c66b25d774
commit d2c7ad0cc0
2 changed files with 136 additions and 0 deletions

View File

@ -440,16 +440,20 @@ def view_statistic():
for tags in tag_set:
tag_items.extend([x.strip() for x in tags.split(',') if x.strip()])
tag_counter = Counter(tag_items)
title_items = [x[2] for x in all_bookmarks]
title_counter = Counter(title_items)
statistic_datetime = arrow.now()
STATISTIC_DATA = {
'datetime': statistic_datetime,
'netloc': netloc,
'tag_counter': tag_counter,
'title_counter': title_counter,
}
else:
netloc = statistic_data['netloc']
statistic_datetime = statistic_data['datetime']
tag_counter = statistic_data['tag_counter']
title_counter = statistic_data['title_counter']
netloc_counter = Counter(netloc)
unique_netloc_len = len(set(netloc))
@ -482,6 +486,19 @@ def view_statistic():
most_common_tags = [
[val[0], val[1], tag_colors[idx]] for idx, val in enumerate(most_common_tags)]
unique_title_len = len(title_counter)
show_title_rank_table = False
if unique_title_len > len(colors):
max_title_item = len(colors)
title_colors = colors
show_title_rank_table = True
else:
title_colors = colors[:unique_title_len]
max_title_item = unique_title_len
most_common_titles = title_counter.most_common(max_title_item)
most_common_titles = [
[val[0], val[1], title_colors[idx]] for idx, val in enumerate(most_common_titles)]
return render_template(
'bukuserver/statistic.html',
most_common_netlocs=most_common_netlocs,
@ -490,6 +507,9 @@ def view_statistic():
most_common_tags=most_common_tags,
tag_counter=tag_counter,
show_tag_rank_table=show_tag_rank_table,
most_common_titles=most_common_titles,
title_counter=title_counter,
show_title_rank_table=show_title_rank_table,
datetime=statistic_datetime,
datetime_text=statistic_datetime.humanize(arrow.now(), granularity='second'),
)

View File

@ -140,6 +140,81 @@
</div>
{% endif %}
<h3>Title</h3>
{% if most_common_titles %}
<div class="col-md-6">
<canvas id="mostCommonTitleChart" width="500" height="500"></canvas>
</div>
<div class="col-md-6">
{% if show_title_rank_table %}
<button type="button" class="btn btn-primary btn-xs" data-toggle="modal" data-target="#titleModal">
View all
</button>
{% endif %}
<table class="table">
<tr>
<th>Rank</th>
<th>Title</th>
<th>Number</th>
</tr>
{% for item, number, _ in most_common_titles %}
<tr>
<td>{{loop.index}}</td>
<td>
{% if item %}
<a href="{{url_for('search_bookmarks-html')}}?keywords-0={{item}}">{{item}}</a>
{% else %}
(No Title)
{% endif %}
</td>
<td>{{number}}</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<span> No Title found.</span>
{% endif %}
{% if show_title_rank_table %}
<div class="modal fade" id="titleModal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="myModalLabel">Title ranking</h4>
</div>
<div class="modal-body">
<table class="table table-condensed">
<tr>
<th>Rank</th>
<th>Title</th>
<th>Number</th>
</tr>
{% for item, number in title_counter.most_common() %}
{% if number > 1 %}
<tr>
<td>{{loop.index}}</td>
<td style="word-break:break-all;">
{% if item %}
<a href="{{url_for('search_bookmarks-html')}}?keywords-0={{item}}">{{item}}</a>
{% else %}
<span class="btn btn-default" disabled="disabled">(No Title)</span>
{% endif %}
</td>
<td class="text-right">{{number}}</td>
</tr>
{% endif %}
{% endfor %}
</table>
</div>
</div>
</div>
</div>
{% endif %}
<script>
var ctx = document.getElementById("mostCommonChart").getContext('2d');
var netlocChart = new Chart(ctx, {
@ -206,6 +281,47 @@
}
}
});
var ctx = document.getElementById("mostCommonTitleChart").getContext('2d');
var netlocChart = new Chart(ctx, {
type: 'pie',
data: {
datasets: [{
data: [
{% for val in most_common_titles %} {{val.1}}, {% endfor %}
],
backgroundColor: [
{% for val in most_common_titles %} "{{val.2}}", {% endfor %}
],
}],
// These labels appear in the legend and in the tooltips when hovering different arcs
labels: [
{% for val in most_common_titles %} "{{val.0}}", {% endfor %}
]
},
options: {
'onClick' : function (evt, item) {
var value = this.data.labels[item[0]._index];
var form = $('<form></form>');
form.attr("method", "get");
form.attr("action", "{{url_for('search_bookmarks-html')}}");
var field = $('<input></input>');
field.attr("type", "hidden");
field.attr("name", "keywords-0");
field.attr("value", value);
form.append(field);
// The form needs to be a part of the document in
// order for us to be able to submit it.
$(document.body).append(form);
form.submit();
}
}
});
netlocChart.canvas.parentNode.style.height = '128px';
</script>