Skip to content

Commit

Permalink
Merge pull request #166 from naiveaiguy/language-detection
Browse files Browse the repository at this point in the history
CB-271: Automatically detect the language of reviews
  • Loading branch information
paramsingh committed Feb 16, 2018
2 parents 7a4be3a + c101b9a commit abae23a
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 1 deletion.
30 changes: 29 additions & 1 deletion critiquebrainz/frontend/templates/review/modify/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,10 @@
<script src="{{ get_static_path('wysiwyg-editor.js') }}"></script>
<script>
$(document).ready(function() {
new SimpleMDE({ element: $('#review-content')[0] });
reviewContentEditor = new SimpleMDE({
element: $('#review-content')[0],
spellChecker: false
});

// Show warning when leaving review editor without saving changes
var beingSaved = false;
Expand All @@ -72,6 +75,31 @@
return confirmationMessage; // Gecko and WebKit
});

oldReviewLength = reviewContentEditor.value().length
languageSelector = $('#review-language')[0]
// Detect the language of the review on change
// codemirror is the underlying editor behind SimpleMDE.
reviewContentEditor.codemirror.on("change", function() {
const MIN_DIFFERENCE = 10

var currentReviewContent = reviewContentEditor.value()
var currentReviewLength = currentReviewContent.length
if(currentReviewLength == 0) { return; }

// Don't call too often.
var difference = Math.abs(currentReviewLength - oldReviewLength)
if(difference < MIN_DIFFERENCE) { return; }
oldReviewLength = currentReviewLength

$.ajax({
type: "POST",
url: "{{ url_for('review.get_language') }}",
data: {text: currentReviewContent},
success: function(data) { $(languageSelector).val(data) },
error: function() { console.error("Getting language failed"); } // Ignore any failure, won't do any harm
})
});

$("#btn-publish").click(function(){
beingSaved = true;
$("#state").attr('value', 'publish');
Expand Down
8 changes: 8 additions & 0 deletions critiquebrainz/frontend/views/review.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import critiquebrainz.db.review as db_review
import critiquebrainz.db.moderation_log as db_moderation_log
from critiquebrainz.frontend.external.musicbrainz_db.entities import get_multiple_entities, get_entity_by_id
from langdetect import detect


review_bp = Blueprint('review', __name__)
Expand Down Expand Up @@ -309,6 +310,13 @@ def edit(id):
return render_template('review/modify/edit.html', form=form, review=review, entity_type=review["entity_type"])


@review_bp.route('/write/get_language', methods=['POST'])
@login_required
def get_language():
"""Return the most likely language of the text."""
return detect(request.form['text'])


@review_bp.route('/<uuid:id>/delete', methods=['GET', 'POST'])
@login_required
def delete(id):
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,4 @@ requests==2.18.3
SQLAlchemy==1.1.13
transifex-client==0.12.4
WTForms==2.1
langdetect==1.0.7

0 comments on commit abae23a

Please sign in to comment.