Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 00ad479

Browse files
adding filtering on flags; add to grid links
1 parent 7a07535 commit 00ad479

File tree

5 files changed

+74
-58
lines changed

5 files changed

+74
-58
lines changed

‎mpeds_coder.py‎

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,7 @@ def adj():
587587
## TODO: Base this off EventMetadata for now. Eventually, we want to get rid of this.
588588
filter_fields = EventMetadata.__table__.columns.keys()
589589
filter_fields.remove('id')
590+
filter_fields.append('flag')
590591

591592
## TODO: Do some checks in the template which don't force us to enter in empty variables
592593
## which will be initialized by load_adj_grid
@@ -657,25 +658,27 @@ def do_search():
657658
filter_compare = request.form['adj_filter_compare_{}'.format(i)]
658659

659660
if filter_field and filter_value and filter_compare:
661+
_model = EventMetadata if filter_field != 'flag' else EventFlag
662+
660663
## Translate the filter compare to a SQLAlchemy expression.
661664
if filter_compare == 'eq':
662-
_filter = getattr(getattr(EventMetadata, filter_field), '__eq__')(filter_value)
665+
_filter = getattr(getattr(_model, filter_field), '__eq__')(filter_value)
663666
elif filter_compare == 'ne':
664-
_filter = getattr(getattr(EventMetadata, filter_field), '__ne__')(filter_value)
667+
_filter = getattr(getattr(_model, filter_field), '__ne__')(filter_value)
665668
elif filter_compare == 'lt':
666-
_filter = getattr(getattr(EventMetadata, filter_field), '__lt__')(filter_value)
669+
_filter = getattr(getattr(_model, filter_field), '__lt__')(filter_value)
667670
elif filter_compare == 'le':
668-
_filter = getattr(getattr(EventMetadata, filter_field), '__le__')(filter_value)
671+
_filter = getattr(getattr(_model, filter_field), '__le__')(filter_value)
669672
elif filter_compare == 'gt':
670-
_filter = getattr(getattr(EventMetadata, filter_field), '__gt__')(filter_value)
673+
_filter = getattr(getattr(_model, filter_field), '__gt__')(filter_value)
671674
elif filter_compare == 'ge':
672-
_filter = getattr(getattr(EventMetadata, filter_field), '__ge__')(filter_value)
675+
_filter = getattr(getattr(_model, filter_field), '__ge__')(filter_value)
673676
elif filter_compare == 'contains':
674-
_filter = getattr(getattr(EventMetadata, filter_field), 'like')(u'%{}%'.format(filter_value))
677+
_filter = getattr(getattr(_model, filter_field), 'like')(u'%{}%'.format(filter_value))
675678
elif filter_compare == 'startswith':
676-
_filter = getattr(getattr(EventMetadata, filter_field), 'like')(u'{}%'.format(filter_value))
679+
_filter = getattr(getattr(_model, filter_field), 'like')(u'{}%'.format(filter_value))
677680
elif filter_compare == 'endswith':
678-
_filter = getattr(getattr(EventMetadata, filter_field), 'like')(u'%{}'.format(filter_value))
681+
_filter = getattr(getattr(_model, filter_field), 'like')(u'%{}'.format(filter_value))
679682
else:
680683
raise Exception('Invalid filter compare: {}'.format(filter_compare))
681684

@@ -686,7 +689,9 @@ def do_search():
686689

687690
## Sort by the specified field.
688691
if sort_field and sort_order:
689-
_sort = getattr(getattr(EventMetadata, sort_field), sort_order)()
692+
_model = EventMetadata if sort_field != 'flag' else EventFlag
693+
694+
_sort = getattr(getattr(_model, sort_field), sort_order)()
690695
sorts.append(_sort)
691696

692697
## AND all the filters together
@@ -733,19 +738,24 @@ def do_search():
733738
else:
734739
return make_response("Please enter a search term or a filter.", 400)
735740

741+
## Perform the search on a left join to get all the candidate events.
736742
search_events = db_session.query(EventMetadata).\
743+
join(EventFlag, EventMetadata.event_id == EventFlag.event_id, isouter = True).\
737744
filter(a_filter_expr).\
738745
order_by(sort_expr).all()
739746

747+
## get all flags for these events
748+
flags = _load_event_flags([x.event_id for x in search_events])
749+
740750
## TODO: Eventually need to load current candidate events.
741751
## Will probably end up doing this in JavaScript with the button initializers.
742752
response = make_response(
743753
render_template('adj-search-block.html',
744-
search_events = search_events,
754+
events = search_events,
755+
flags = flags,
745756
cand_events = {})
746757
)
747758

748-
## TODO: eventually can add multiple values for the same key by coercing to dict.
749759
url_params = {k: v for k, v in request.form.iteritems()}
750760

751761
## make and return results. add in the number of results to update the button.

‎static/adj.js‎

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11

2+
var MAX_CAND_EVENTS = 4;
3+
24
/**
35
*
46
* @param {*} e - Event
@@ -293,6 +295,35 @@ var makeError = function(msg) {
293295
*/
294296
var initializeSearchListeners = function() {
295297
// listeners for current search results
298+
$('.cande-makeactive').click(function(e) {
299+
var event_desc = $(e.target).closest('.event-desc');
300+
var event_id = event_desc.attr('data-event');
301+
let search_params = new URLSearchParams(window.location.search);
302+
var cand_events = search_params.get('cand_events').split(',');
303+
304+
// remove last event from the list if full
305+
if (cand_events.length == MAX_CAND_EVENTS) {
306+
cand_events.pop();
307+
}
308+
309+
// add this event to the list
310+
cand_events.push(event_id);
311+
312+
loadGrid(
313+
canonical_event_key = search_params.get('canonical_event_key'),
314+
cand_events_str = cand_events.join(',')
315+
);
316+
317+
// hide link to add to grid, show cande-isactive
318+
$(e.target).hide();
319+
event_desc.find('.cande-isactive').show();
320+
321+
console.log(event_desc.find('.cande-isactive'));
322+
323+
return true;
324+
});
325+
326+
// listener for canonical event.
296327
$('b.ce-makeactive').each(function () {
297328
$(this).click(function () {
298329
// get key and id from event-desc
@@ -634,8 +665,8 @@ $(function () {
634665
for(var i = 0; i < search_ids.length; i++) {
635666
$('#' + search_ids[i]).val(search_params.get(search_ids[i]));
636667
}
668+
637669
loadSearch();
638-
639670
loadGrid(
640671
search_params.get('canonical_event_key'),
641672
search_params.get('cand_events')

‎templates/adj-grid.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
data-coder="{{ cand_events[event_id]['metadata']['coder_id'] }}">
1717
<label>Event {{ event_id }}<br/>
1818
<i>Actions:</i>
19-
<a class="glyphicon glyphicon-plus-sign add-all-val" title="Add all values" ></a>
19+
<!-- <a title="Add all values" ></a> -->
2020
{% set article_id = cand_events[event_id]['metadata']['article_id'] -%}
2121
{% if article_id in links %}
2222
<a class="glyphicon glyphicon-link text-danger remove-link"

‎templates/adj-search-block.html‎

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
<div class="cand-event-group">
2-
{% for e in search_events %}
3-
<div class="event-desc" id="cand-event_{{ e.event_id }}">
2+
{% for e in events %}
3+
<div class="event-desc" id="cand-event_{{ e.event_id }}"data-event="{{ e.event_id }}">
44
<div class="row">
55
<div class="col-sm-6">
6-
<b>start_date:</b> {{e.start_date}}</br>
7-
<b>location:</b> {{e.location | safe }}<br/>
6+
<b>start_date:</b> {{e.start_date}}</br>
7+
<b>location:</b> {{e.location | safe }}<br/>
88
<b>title:</b> {{e.title | safe }}<br/>
99
</div>
1010
<div class="col-sm-3">
@@ -16,18 +16,21 @@
1616
<b>coder:</b> {{ e.coder_id }} <br/>
1717
</div>
1818
<div class="col-sm-3">
19-
{% if e.event_id in cand_events.keys() %}
20-
<b class="text-muted">In the expanded view</b> <br/>
21-
{% else %}
22-
<b><a href="#">Add to Expand <span class="glyphicon glyphicon-plus"></span></a></b><br/>
23-
{% endif %}
19+
<p class="flags">
2420
{% if e.event_id in flags %}
2521
{% if flags[e.event_id] == 'for-review' %}
26-
<b class="text-danger">Flagged</b>
22+
Flag: <b class="text-danger">for-review</b>
2723
{% elif flags[e.event_id] == 'completed' %}
28-
<b class="text-success">Completed</b>
24+
Flag: <b class="text-success">completed</b>
2925
{% endif %}
26+
{% else %}
27+
No flags
3028
{% endif %}
29+
</p>
30+
<a href="#" class="cande-makeactive">
31+
<b>Add to grid <span class="glyphicon glyphicon-export"></span></b>
32+
</a>
33+
<b class="cande-isactive text-muted" style="display:none;">In the expanded view</b>
3134
</div>
3235
</div>
3336
<div class="row">
@@ -38,7 +41,7 @@
3841
</div>
3942
{% endfor %}
4043
</div>
41-
<nav aria-label="cand-event-pagination">
44+
<!-- <nav aria-label="cand-event-pagination">
4245
<ul class="pagination">
4346
<li class="page-item">
4447
<a class="page-link" href="#" aria-label="Previous">
@@ -56,4 +59,4 @@
5659
</a>
5760
</li>
5861
</ul>
59-
</nav>
62+
</nav> -->

‎templates/adj.html‎

Lines changed: 3 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -82,40 +82,12 @@ <h5>Sort</h5>
8282
</li>
8383
</ul>
8484
<div class="subtab-pane" id="cand-search_block">
85+
{% set events = search_events %}
8586
{% include 'adj-search-block.html' %}
8687
</div>
8788
<div class="subtab-pane" id="cand-recent_block" style="display:none;">
88-
<div class="cand-event-group">
89-
{% for e in recent_events %}
90-
<div class="event-desc" id="recent-cand-event_{{ e.event_id }}">
91-
<div class="row">
92-
<div class="col-sm-6">
93-
<b>start_date:</b> {{e.start_date}}</br>
94-
<b>location:</b> {{e.location | safe }}<br/>
95-
<b>title:</b> {{e.title | safe }}<br/>
96-
</div>
97-
<div class="col-sm-3">
98-
<b>event_id:</b> {{ e.event_id }}<br/>
99-
<b>article_id:</b>
100-
<a href="{{ url_for('eventCreator', aid = e.article_id) }}"
101-
target="_blank"
102-
title="{{ e.publication }} ({{ e.pub_date }}) --- {{ e.article_desc|safe }}">{{e.article_id}}</a><br/>
103-
<b>coder:</b> {{ e.coder_id }} <br/>
104-
</div>
105-
<div class="col-sm-3">
106-
<!-- TODO: Logic which chooses the correct one to display upon load. -->
107-
<b class="cande-isactive text-muted">In the expanded view</b><br/>
108-
<b class="cande-makeactive" style="display:none;"></b><a href="#">Add to grid <span class="glyphicon glyphicon-export"></span></a></b>
109-
</div>
110-
</div>
111-
<div class="row">
112-
<div class="col-sm-12">
113-
<b>desc:</b> {{ e.desc | safe }}<br/>
114-
</div>
115-
</div>
116-
</div>
117-
{% endfor %}
118-
</div>
89+
{% set events = recent_events %}
90+
{% include 'adj-search-block.html' %}
11991
</div>
12092
</div>
12193
<div class="tab-pane" id="canon_block">

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /