diff --git a/app/corpora/events.py b/app/corpora/events.py index 2f674028b2497b8706f99bfcd8da4018cd461582..81c184c93d3bbd0171a0c09da6c94b897c11b5dd 100644 --- a/app/corpora/events.py +++ b/app/corpora/events.py @@ -38,7 +38,7 @@ def init_corpus_analysis(corpus_id): corpus_id, request.sid) -@socketio.on('query_event') +@socketio.on('query') @login_required def recv_query(message): logger.warning(message) @@ -80,7 +80,7 @@ def recv_query(message): match['word_list'] = [foo[cpos]['word'] for cpos in match['cpos_list']] match.pop('cpos_list', None) logger.warning(matches) - socketio.emit('query_results', matches, room=request.sid) + socketio.emit('query', matches, room=request.sid) def observe_corpus_analysis_connection(app, corpus_id, session_id): diff --git a/app/templates/corpora/corpus_analysis.html.j2 b/app/templates/corpora/corpus_analysis.html.j2 index b48376503f0ce59fbf5e40dabfbbeb281559a7f3..7185f13dc0083308ce6a6970d2ee6fbe599473b8 100644 --- a/app/templates/corpora/corpus_analysis.html.j2 +++ b/app/templates/corpora/corpus_analysis.html.j2 @@ -1,37 +1,26 @@ {% extends "full_width.html.j2" %} {% block page_content %} -<div class="col s12 m3 l3 sticky"> +<div class="col s12 m3 sticky"> <a class="waves-effect waves-light btn" href="{{ url_for('corpora.corpus', corpus_id=corpus_id) }}"><i class="material-icons left">arrow_back</i>Back to corpus overview</a> <div class="card"> - <form id="query_form" method="POST"> <div class="card-content"> - {{ form.hidden_tag() }} - <span class="card-title">Query and analysis</span> - <br> - <div class="input-field"> + <form id="query-form" method="POST"> + {{ form.hidden_tag() }} + <span class="card-title">Query and analysis</span> + <div class="input-field"> {{ form.query(class='materialize-textarea') }} {{ form.query.label }} - {% for error in form.query.errors %} - <span class="helper-text red-text">{{ error }}</span> - {% endfor %} - </div> - <div class="right-align"> - <button id="sent_query" class="btn" type="submit" name="action">Start Query - <i class="material-icons left">search</i> - </button> - </div> - <br> - <span class="card-title">Help</span> - <ul> - <li> - <a href="http://cwb.sourceforge.net/files/CQP_Tutorial/"> - CQP Query Language Tutorial</a> - </li> - </ul> - <br> - <span class="card-title">Options</span> - <br> + {% for error in form.query.errors %} + <span class="helper-text red-text">{{ error }}</span> + {% endfor %} + </div> + <button class="btn waves-effect waves-light" id="query-form-submit" style="width: 100%;" type="submit">Start Query</button> + <p> </p> + <span class="card-title">Help</span> + <p><a href="http://cwb.sourceforge.net/files/CQP_Tutorial/">CQP Query Language Tutorial</a></p> + <p> </p> + <span class="card-title">Options</span> <div class="input-field"> <i class="material-icons prefix">format_list_numbered</i> {{ form.hits_per_page() }} @@ -40,78 +29,46 @@ <span class="helper-text red-text">{{ error }}</span> {% endfor %} </div> - <br> - <div class="input-field"> - <i class="material-icons prefix">short_text</i> - {{ form.context() }} - {{ form.context.label }} - {% for error in form.context.errors %} - <span class="helper-text red-text">{{ error }}</span> - {% endfor %} - </div> - <br> - </form> - <span class="card-title">Download Results</span> - <p>Downlaod all results of the current query as csv, excel or json file.</p> - <form method="POST"> - {{ form.hidden_tag() }} - <div class="input-field"> - <i class="material-icons prefix">insert_drive_file</i> - {{ dl_form.file_type() }} - {{ dl_form.file_type.label }} - {% for error in dl_form.file_type.errors %} - <span class="helper-text red-text">{{ error }}</span> - {% endfor %} - </div> - <div class="right-align"> - <button class="btn" type="submit" name="action">Download - <i class="material-icons left">file_download</i> - </button> - </div> - </form> + <div class="input-field"> + <i class="material-icons prefix">short_text</i> + {{ form.context() }} + {{ form.context.label }} + {% for error in form.context.errors %} + <span class="helper-text red-text">{{ error }}</span> + {% endfor %} + </div> + </form> + </div> + </div> + + <div class="card"> + <div class="card-content"> + <form id="download-form" method="POST"> + {{ dl_form.hidden_tag() }} + <span class="card-title">Download Results</span> + <p>Downlaod all results of the current query as csv, excel or json file.</p> + <div class="input-field"> + <i class="material-icons prefix">insert_drive_file</i> + {{ dl_form.file_type() }} + {{ dl_form.file_type.label }} + {% for error in dl_form.file_type.errors %} + <span class="helper-text red-text">{{ error }}</span> + {% endfor %} + </div> + <button class="btn waves-effect waves-light" id="download-form-submit" style="width: 100%;" type="submit">Download</button> + </form> </div> </div> </div> -<script> -socket.on('query_results', function(json_results) { - console.log('Results recieved') - console.log(json_results) - var queryResultsElement = document.getElementById("query-results"); - for (let json_result of json_results) { - queryResultsElement.innerHTML += json_result['word_list'] + '<br>'; - } -}); -</script> -<div class="col s12 m9 l9"> + +<div class="col s12 m9"> <div class="card"> <div class="card-content"> <span class="card-title">Query Results</span> - <p id="query-results"></p> + <div id="query-results"></div> </div> </div> </div> -<script> -let queryData = document.forms['query_form'].elements; -console.log(queryData); -var queryBtn = document.getElementById('sent_query'); -queryBtn.addEventListener('click', function(event) { - event.preventDefault(); - sendQueryData(); -}); -function sendQueryData() { - var query_data = {}; - for (element of queryData) { - if (!element.value || element.name == 'csrf_token' || !element.id) { - continue; - } - query_data[element.id] = element.value - } - console.log(query_data) - socket.emit('query_event', query_data); - M.toast({html: 'Query has been sent'}); - console.log('Query data has been sent!'); -} -</script> <div id="loading-modal" class="modal no-autoinit"> <div class="modal-content"> @@ -133,16 +90,37 @@ function sendQueryData() { </div> <script> -var loadingModal; + var loadingModal; -document.addEventListener('DOMContentLoaded', function() { - loadingModal = M.Modal.init(document.getElementById("loading-modal"), {"dismissible": false}); - loadingModal.open(); -}); + document.addEventListener('DOMContentLoaded', function() { + loadingModal = M.Modal.init(document.getElementById("loading-modal"), + {"dismissible": false}); + loadingModal.open(); + }); + socket.emit('init_corpus_analysis', {{ corpus_id }}); -socket.emit('init_corpus_analysis', {{ corpus_id }}); -socket.on('init_corpus_analysis', function(msg) { - if (msg === 'Ready') {loadingModal.close();} -}); + var queryFormElement = document.getElementById("query-form"); + var queryFormSubmitElement = document.getElementById("query-form-submit"); + var queryResultsElement = document.getElementById("query-results"); + + queryFormSubmitElement.addEventListener('click', function(event) { + event.preventDefault(); + let formData = new FormData(queryFormElement); + let queryData = {'context': formData.get('context'), + 'hits_per_page': formData.get('hits_per_page'), + 'query': formData.get('query')}; + socket.emit('query', queryData); + M.toast({html: 'Query has been sent!'}); + }); + + socket.on('init_corpus_analysis', function(msg) { + if (msg === 'Ready') {loadingModal.close();} + }); + socket.on('query', function(results) { + queryResultsElement.innerHTML = ''; + for (let result of results) { + queryResultsElement.innerHTML += '<p>' + result['word_list'] + '</p>'; + } + }); </script> {% endblock %}