diff --git a/app/experiment/templates/add_embody.html b/app/experiment/templates/add_embody.html index 535fb830e4340b5cacaa79a2e660ec0002b141a4..b7bdc332f86ac5db4d4857a3bc31e90c7ba6e718 100644 --- a/app/experiment/templates/add_embody.html +++ b/app/experiment/templates/add_embody.html @@ -3,8 +3,7 @@ <h1 class="container mt-5 display-4 text-center"><br>Add new embody picture:</h1> <br> -<p class="lead"> -Upload new embody image... instructions here for admins.. +<p class="lead"> Upload new embody image. Submit without choosing file if you want to use default embody picture. </p> {% from "_formhelpers.html" import render_field %} @@ -12,8 +11,8 @@ Upload new embody image... instructions here for admins.. <form method="post" enctype="multipart/form-data"> <div class="form-group"> - <label for="Background questions">image question/explanation:</label> - <textarea class="form-control" rows="5" id="embody_picture_text" name="question"></textarea> + <label for="Background questions">Image question/explanation:</label> + <textarea class="form-control" rows="5" id="embody_picture_text" name="question">Color the regions whose activity you feel increasing or getting stronger</textarea> </div> <div class="custom-file"> @@ -23,7 +22,7 @@ Upload new embody image... instructions here for admins.. <hr> - <button type="submit" class="btn btn-primary submit-file" disabled>Submit</button> + <button type="submit" class="btn btn-primary">Submit</button> <a class="btn btn-primary" href="{{ request.referrer }}" role="button">Cancel</a> </form> diff --git a/app/experiment/templates/view_experiment.html b/app/experiment/templates/view_experiment.html index b3ee1a19262734852c5b61c91df1b477fd603e86..c0aee71c6757b95a426568161e9234cf3fac8779 100644 --- a/app/experiment/templates/view_experiment.html +++ b/app/experiment/templates/view_experiment.html @@ -211,7 +211,6 @@ </table> - <h1 class="container mt-5 display-4 text-left"><br>Add embody tool:</h1> <table class="table"> @@ -231,15 +230,13 @@ {% endif %} </td> <td> - <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('experiment.add_embody', exp_id=exp_id, default=true) }}" role="button">Add default</a> <a class="btn btn-primary btn-block btn-sm btn-info" href="{{ url_for('experiment.add_embody', exp_id=exp_id) }}" role="button">Add new picture</a> </td> </tr> {% for embody_picture in embody_pictures %} - <tr> - <td>ID: {{ embody_picture.idembody }} <br> {{ embody_picture.question }}</td> + <td>ID: {{ embody_picture.idembody }} <br> {{ embody_picture.question }}</td> <td><img src="{{ embody_picture.picture }}" class="thumbnail" /></td> <td><a class="btn btn-primary btn-block btn-sm btn-dark" href="{{ url_for('experiment.remove_embody', exp_id=exp_id, idembody=embody_picture.idembody) }}" role="button">Remove</a></td> </tr> diff --git a/app/experiment/views.py b/app/experiment/views.py index e969a1d937096d685d799f8b26232373e812faf7..110dfe95dbc6c92a00ebd032e6a7a81dd06f8e33 100644 --- a/app/experiment/views.py +++ b/app/experiment/views.py @@ -566,17 +566,6 @@ def add_embody(): if exp_info.status != 'Hidden': flash("Experiment is public. Cannot modify structure.") return redirect(url_for('experiment.view', exp_id=exp_id)) - elif default: - - # TODO: check if default image already added - - default_embody = embody_question( - experiment_idexperiment=exp_id, picture=DEFAULT_EMBODY_PICTURE, question=DEFAULT_EMBODY_QUESTION) - db.session.add(default_embody) - exp_info.embody_enabled = 1 - db.session.commit() - return redirect(url_for('experiment.view', exp_id=exp_id)) - else: form = CreateEmbodyForm(request.form) @@ -584,6 +573,14 @@ def add_embody(): picture = request.files.get("picture") question = request.form.get("question") + if not picture: + default_embody = embody_question( + experiment_idexperiment=exp_id, picture=DEFAULT_EMBODY_PICTURE, question=question) + db.session.add(default_embody) + exp_info.embody_enabled = 1 + db.session.commit() + return redirect(url_for('experiment.view', exp_id=exp_id)) + # get filename filename = secure_filename(picture.filename) path = 'static/embody_images/' + str(exp_id) diff --git a/app/static/css/custom.css b/app/static/css/custom.css deleted file mode 100644 index 407f953044adc21af3f22e7b7565a6e864acf6ee..0000000000000000000000000000000000000000 --- a/app/static/css/custom.css +++ /dev/null @@ -1,5 +0,0 @@ -body{ - -background-color: #000000; - -} \ No newline at end of file diff --git a/app/static/css/main.css b/app/static/css/main.css index f0c53e71c9961114b1d8988e1e6df057df6a1454..54685cd436f2eaed95f6280edc034423d1500284 100644 --- a/app/static/css/main.css +++ b/app/static/css/main.css @@ -77,6 +77,11 @@ body { } +.stimulus img { + height: 100%; + object-fit: contain; +} + #export-link-container { margin-top: 20px; diff --git a/app/static/js/canvas.js b/app/static/js/canvas.js index 0f8bf30e0a0979f4382582f4b61dd213899dc957..b456b80e5315f4334ca192bf0d6ad8c5617c8a01 100644 --- a/app/static/js/canvas.js +++ b/app/static/js/canvas.js @@ -59,8 +59,14 @@ $(document).ready(function() { // Click handlers canvas.mousedown(function(e){ - var mouseX = e.pageX - this.offsetLeft; - var mouseY = e.pageY - this.offsetTop; + + //var mouseX = e.pageX - this.offsetLeft; + //var mouseY = e.pageY - this.offsetTop; + + var parentOffset = $(this).offset(); + var mouseX = e.pageX - parentOffset.left; + var mouseY = e.pageY - parentOffset.top; + paint = true; if (pointInsideBaseImage([mouseX, mouseY])) { @@ -70,8 +76,10 @@ $(document).ready(function() { }); canvas.mousemove(function(e){ - var mouseX = e.pageX - this.offsetLeft; - var mouseY = e.pageY - this.offsetTop; + + var parentOffset = $(this).offset(); + var mouseX = e.pageX - parentOffset.left; + var mouseY = e.pageY - parentOffset.top; if (paint && pointInsideBaseImage([mouseX, mouseY])){ addClick(mouseX, mouseY, true); @@ -81,8 +89,13 @@ $(document).ready(function() { canvas.bind('touchmove', function(e){ e.preventDefault() - var mouseX = e.touches[0].pageX - this.offsetLeft; - var mouseY = e.touches[0].pageY - this.offsetTop; + + //var mouseX = e.touches[0].pageX - this.offsetLeft; + //var mouseY = e.touches[0].pageY - this.offsetTop; + + var parentOffset = $(this).offset(); + var mouseX = e.touches[0].pageX - parentOffset.left; + var mouseY = e.touches[0].pageY - parentOffset.top; [mouseX, mouseY] = scaleClickCoordinates($(this)[0], mouseX, mouseY) @@ -94,8 +107,11 @@ $(document).ready(function() { canvas.bind('touchstart', function(e){ e.preventDefault() - var mouseX = e.touches[0].pageX - this.offsetLeft; - var mouseY = e.touches[0].pageY - this.offsetTop; + + var parentOffset = $(this).offset(); + var mouseX = e.touches[0].pageX - parentOffset.left; + var mouseY = e.touches[0].pageY - parentOffset.top; + paint = true; [mouseX, mouseY] = scaleClickCoordinates($(this)[0], mouseX, mouseY) diff --git a/app/task/templates/task.html b/app/task/templates/task.html index 6e322ac105947dda8ac4796a6fa3e6fcf0b086b9..9caa5513056fa067252de3f0fc11ef7456a6439f 100644 --- a/app/task/templates/task.html +++ b/app/task/templates/task.html @@ -1,113 +1,121 @@ {% extends "base.html" %} {% block content %} -<br> -{% if session['randomization']=='Off' %} +<div class="container stimulus"> + <div class="row justify-content-center"> - {% if session['type']=='text' %} - <div class="container text-center mt-5 pt-5"> - {% for page in pages.items %} - <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ page.text }}</h{{ stimulus_size_text }}> - {% endfor %} - </div> - <br><br> - {% endif %} - - {% if session['type']=='picture' %} - <div class="container stimulus col-{{stimulus_size}} mt-5 pt-5"> - {% for page in pages.items %} - <img src="/{{ page.media }}" class="img-fluid"> - {% endfor %} - </div> - {% endif %} - - {% if session['type']=='video' %} - <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> - {% for page in pages.items %} - <div class="embed-responsive embed-responsive-16by9"> - <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe> - </div> - {% endfor %} - </div> - {% endif %} + {% if session['randomization']=='Off' %} - {% if session['type']=='audio' %} - <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> - {% for page in pages.items %} - <div class="embed-responsive embed-responsive-16by9"> - <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe> - </div> - {% endfor %} - </div> - {% endif %} + {% if session['type']=='text' %} + <div class="container text-center mt-5 pt-5"> + {% for page in pages.items %} + <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ page.text }}</h{{ stimulus_size_text }}> + {% endfor %} + </div> + <br><br> + {% endif %} + + {% if session['type']=='picture' %} + <div class="stimulus col-{{stimulus_size}} mt-5 pt-5"> + {% for page in pages.items %} + <img src="/{{ page.media }}" class="img-fluid"> + {% endfor %} + </div> + {% endif %} + + {% if session['type']=='video' %} + <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> + {% for page in pages.items %} + <div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe> + </div> + {% endfor %} + </div> + {% endif %} + + {% if session['type']=='audio' %} + <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> + {% for page in pages.items %} + <div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/{{ page.media }}" allowfullscreen></iframe> + </div> + {% endfor %} + </div> + {% endif %} -{% else %} + {% else %} - {% if session['type']=='text' %} - <div class="container text-center mt-5 pt-5"> - {% for page in pages.items %} - <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ randomized_stimulus.text }}</h{{ stimulus_size_text }}> - {% endfor %} - </div> - <br><br> - {% endif %} - - {% if session['type']=='picture' %} - <div class="container stimulus col-{{stimulus_size}} mt-5 pt-5"> - {% for page in pages.items %} - <img src="/{{ randomized_stimulus.media }}" class="img-fluid"> - {% endfor %} - </div> - {% endif %} - - {% if session['type']=='video' %} - <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> - {% for page in pages.items %} - <div class="embed-responsive embed-responsive-16by9"> - <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe> - </div> - {% endfor %} - </div> - {% endif %} + {% if session['type']=='text' %} + <div class="container text-center mt-5 pt-5"> + {% for page in pages.items %} + <h{{ stimulus_size_text }} class="text-center mt-5"><br>{{ randomized_stimulus.text }}</h{{ stimulus_size_text }}> + {% endfor %} + </div> + <br><br> + {% endif %} + + {% if session['type']=='picture' %} + <div class="stimulus col-{{stimulus_size}} mt-5 pt-5"> + {% for page in pages.items %} + <img src="/{{ randomized_stimulus.media }}" class="img-fluid"> + {% endfor %} + + + </div> + {% endif %} + + {% if session['type']=='video' %} + <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> + {% for page in pages.items %} + <div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe> + </div> + {% endfor %} + </div> + {% endif %} + + {% if session['type']=='audio' %} + <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> + {% for page in pages.items %} + <div class="embed-responsive embed-responsive-16by9"> + <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe> + </div> + {% endfor %} + </div> + {% endif %} - {% if session['type']=='audio' %} - <div class="col-{{stimulus_size}} container stimulus mt-5 pt-5"> - {% for page in pages.items %} - <div class="embed-responsive embed-responsive-16by9"> - <iframe class="embed-responsive-item" src="/{{ randomized_stimulus.media }}" allowfullscreen></iframe> - </div> - {% endfor %} - </div> {% endif %} -{% endif %} - -<br> - - <h4 class="text-center">{{ rating_instruction }}</h4> + {% if form.__name__ == 'embody' %} + <div class="col-4 mt-5 pt-5"> + <div class="canvas-container"> + <span class="canvas-info"></span> + <canvas id="embody-canvas" class="crosshair" width="20" height="20" ></canvas> + </div> - <!-- Select form type --> + {% for embody_question in embody_questions %} + <img id="idembody-{{embody_question.idembody}}" class="embody-image {% if loop.last %}last-embody{% endif %} {% if loop.index != 1 %}hidden{% else %}selected-embody{% endif %}" src={{ embody_question.picture }} /> + {% endfor %} + {% for embody_question in embody_questions %} + <p id="idquestion-{{ embody_question.idembody }}" class="embody-question {% if loop.index != 1 %}hidden{% else %}selected-embody{% endif %}"> {{ embody_question.question }}</p> + {% endfor %} - {% if form.__name__ == 'embody' %} + <img id="baseImageMask" class="hidden" src={{ url_for('static', filename='img/dummy_600_mask.png') }} /> - <div class="canvas-container"> - <span class="canvas-info"></span> - <canvas id="embody-canvas" class="crosshair" width="20" height="20" style="border: 1px solid blue;" ></canvas> + </div> + {% endif %} </div> +</div> +<br> +<h4 class="text-center">{{ rating_instruction }}</h4> - {% for embody_question in embody_questions %} - <img id="idembody-{{embody_question.idembody}}" class="embody-image {% if loop.last %}last-embody{% endif %} {% if loop.index != 1 %}hidden{% else %}selected-embody{% endif %}" src={{ embody_question.picture }} /> - {% endfor %} - {% for embody_question in embody_questions %} - <p id="idquestion-{{ embody_question.idembody }}" class="embody-question {% if loop.index != 1 %}hidden{% else %}selected-embody{% endif %}"> {{ embody_question.question }}</p> - {% endfor %} - - <img id="baseImageMask" class="hidden" src={{ url_for('static', filename='img/dummy_600_mask.png') }} /> + <!-- Select form type --> + {% if form.__name__ == 'embody' %} diff --git a/app/utils.py b/app/utils.py index 1da87b5d2c94e64a6f233e1daea9cf846c3a8f48..a06c23ceda44af401265805c3b9ac94b0600ba34 100644 --- a/app/utils.py +++ b/app/utils.py @@ -291,7 +291,7 @@ def generate_answer_row(participant, pages, questions, embody_questions): try: # for every brush stroke, increment the pixel # value for every brush stroke - coordinates_to_bitmap[point[0]][point[1]] += 0.1 + coordinates_to_bitmap[int(point[0])][int(point[1])] += 0.1 except IndexError: continue