var api = '//tools.wmflabs.org/anagrimes/api.php';
var devapi = '//tools.wmflabs.org/anagrimes/dev/api.php';
var wikturl = '//fr.wiktionary.orghttps://dictious.com/fr/';
$throbber = $("<img src='//upload.wikimedia.org/wikipedia/commons/d/d2/Spinning_wheel_throbber.gif' id='throbber'>");
var fnames = {
'title' : 'Mot',
'pron' : 'Prononciation',
'type' : 'Type de mot',
'genre' : 'Genre',
'lang' : 'Langue',
};
var searchs = {
'search' : 'Graphie',
'pron' : 'Prononciation',
'anagram' : 'Anagrammes',
};
var langs = {
// FRANÇAIS
'fr' : 'français',
'*' : '*',
'fro' : 'ancien français',
// ALPHABET LATIN
'af' : 'afrikaans',
'en' : 'anglais',
'de' : 'allemand',
'br' : 'breton',
'bg' : 'bulgare', // ALPHABET CYRILLIQUE
'ca' : 'catalan',
'zh' : 'chinois', // AUTRES SYSTÈMES D'ÉCRITURE
'co' : 'corse',
'da' : 'danois',
'es' : 'espagnol',
'fi' : 'finnois',
'fy' : 'frison',
'el' : 'grec', // ALPHABET GREC
'eo' : 'espéranto',
'grc' : 'grec ancien', // ALPHABET GREC
'hbo' : 'hébreu ancien', // AUTRES SYSTÈMES D'ÉCRITURE
'hu' : 'hongrois',
'id' : 'indonésien',
'is' : 'islandais',
'it' : 'italien',
'ja' : 'japonais', // AUTRES SYSTÈMES D'ÉCRITURE
'ko' : 'coréen', // AUTRES SYSTÈMES D'ÉCRITURE
'la' : 'latin',
'ln' : 'lingala',
'mn' : 'mongol', // ALPHABET CYRILLIQUE
'nl' : 'néerlandais',
'no' : 'norvégien',
'oc' : 'occitan',
'pap' : 'papiamento',
'fa' : 'persan',
'pl' : 'polonais',
'pt' : 'portugais',
'ro' : 'roumain',
'ru' : 'russe', // ALPHABET CYRILLIQUE
'se' : 'same du Nord',
'sl' : 'slovène',
'sv' : 'suédois',
'tl' : 'tagalog',
'cs' : 'tchèque',
'tr' : 'turc',
'vi' : 'vietnamien',
};
var types = {
'*' : '*',
'nom' : 'nom commun',
'nom-pr' : 'nom propre',
'nom-fam' : 'nom de famille',
'verb' : 'verbe',
'adv' : 'adverbe',
'adj' : 'adjectif',
'adj-num' : 'adjectif numéral',
'adj-pos' : 'adjectif possessif',
'adv-int' : 'adverbe interrogatif',
'conj' : 'conjonction',
'conj-coord' : 'conjonction de coordination',
'interj' : 'interjection',
'prep' : 'préposition',
'pronom-pers' : 'pronom personnel',
'pronom-inter' : 'pronom interrogatif',
'pronom-rel' : 'pronom relatif',
'prov' : 'proverbe',
'prenom' : 'prénom',
'onoma' : 'onomatopée',
'part' : 'particule',
'symb' : 'symbole',
};
var genres = {
'*' : '*',
'm' : 'masculin',
'msing' : 'masculin singulier',
'mplur' : 'masculin pluriel',
'f' : 'féminin',
'fsing' : 'féminin singulier',
'fplur' : 'féminin pluriel',
'mf' : 'masculin et féminin',
'mf?' : 'masculin et féminin, hésitant',
'n' : 'neutre',
'c' : 'commun',
'sp' : 'singulier et pluriel identiques',
};
var rows = {
'string' : {
'description': 'Recherche',
'type': 'text',
},
'search_type' : {
'description': 'Méthode',
'list': searchs
},
'lang' : {
'description': 'Langue',
'list': langs
},
'advanced' : {
'description': 'Options...',
'type': 'advanced_button',
},
'type' : {
'description': 'Type',
'list': types,
'advanced': true,
},
'genre' : {
'description': 'Genre',
'list': genres,
'advanced': true,
},
'flex' : {
'description': 'Inclure flexions',
'advanced': true,
},
'loc' : {
'description': 'Inclure locutions',
'advanced': true,
},
'nom-pr' : {
'description': 'Inclure noms propres',
'advanced': true,
},
'gent' : {
'description': 'Inclure gentilés',
'advanced': true,
},
'noflat' : {
'description': 'Accents/majuscules',
'advanced': true,
},
'without_pron' : {
'description': 'Sans prononciation',
'advanced': true,
},
'wikilist' : {
'description': 'Format wikitexte',
'advanced': true,
},
};
function print_form() {
// Create the form
var form = $("<form action='' id='anag_form' />");
var tab = $("<div class='table' />");
form.append(tab);
for (var name in rows) {
tab.append( add_row(name, rows) );
}
var submit = $("<input type='submit' value='Chercher' id='search_button' />");
form.append(submit)
.append( $("<div id='error'>") );
$("#anag_search")
.empty()
.append(form)
.append( $("<div id='results'>") );
$("#results")
.append( $("<div id='results_num'>") )
.append( $("<div id='list'>") );
}
function add_row(name, pars) {
var description = pars.description;
var row = $("<div class='row' />");
var title;
var input_cell;
// Create advanced menu button
if (pars.type == 'advanced_button') {
var goback = $('<span class="arrow">←</span>');
var gotow = $('<span class="arrow">→</span>');
goback.hide();
row.attr('id', 'advanced_button');
title = $("<div class='cell' />")
.append( description + " " );
input_cell = $("<div class='cell' />")
.append( gotow )
.append( goback );
row.on("click", function() {
$(".advanced").toggle();
goback.toggle();
gotow.toggle();
});
// Create inputs
} else {
title = $("<div class='cell' />")
.append( description + ' :' );
var input;
// Text inputs
if (pars.type && pars.type == 'text') {
input = $("<input type='text' name='" + name + "' id='" + name + "' />");
}
// List selection inputs
else if (pars.list) {
input = $("<select name='" + name + "' id='" + name + "'></select>");
selector(input, pars.list);
// Checkbox inputs (default if no type)
} else {
input = $("<input type='checkbox' name='" + name + "' id='" + name + "' />");
}
input_cell = $("<div class='cell' />")
.append( input );
}
// Advanced options are hidden by default
if (pars.advanced) {
row.addClass('advanced');
row.hide();
}
row.append(title).append(input_cell);
return row;
}
function selector(sel, list) {
for (var k in list) {
var opt = $("<option>");
opt.val(k);
opt.html(list);
sel.append(opt);
}
}
function anagrimes() {
var pars = get_form_pars();
var url = pars.dev ? devapi : api;
url = url + "?callback=?";
console.log(url + '?' + $.param(pars));
console.log(pars);
if (!pars.string || pars.string === '') {
print_error({'status' : "Empty search"});
} else {
var xhr = $.getJSON(url, pars, function(data) {
search_ended();
if (data.status == 'success') {
console.log("Success");
if (pars.wikilist) {
print_wikilist(data.list);
} else {
print_table(data.list);
}
console.log(data);
} else {
console.log("Error...");
print_error(data);
}
}).fail(function(e) {
search_ended();
$('#error').html("Désolé, le serveur qui envoie les données semble avoir des problèmes :(");
console.log("Failed");
});
search_started(xhr);
}
}
function search_started(xhr) {
$("#results_num").empty();
$("#list").empty();
$("#error").empty();
$("#search_button")
.attr("value", "Interrompre")
.after($throbber);
$("#anag_form").off().on("submit", function(e) {
e.preventDefault();
console.log("ABORT");
xhr.abort();
console.log("ABORTED");
search_ended();
});
}
function search_ended() {
$throbber.detach();
$("#search_button").attr( "value", "Chercher");
$("#anag_form").off().on("submit", function(e) {
$("#anag_form input").blur();
e.preventDefault();
anagrimes();
});
}
function define_fields() {
var fpars = get_form_pars();
var flist = ;
var fields = ;
for (var i = 0; i < flist.length; i++) {
if (!fpars ]) {
fields.push(flist);
}
}
return fields;
}
function print_error(data) {
var stat = 'Unknown error';
if (data.status) {
stat = data.status;
}
$('#error').html(stat);
console.log(data);
}
function print_table(list) {
var num = list.length;
if (num === 0) {
$("#results_num").html("Pas de résultat");
return;
}
$res = num == 1 ? " résultat" : " résultats";
$("#results_num").html(num + $res);
list = prepare_list(list);
var fields = define_fields();
var tab = $("#list");
if (tab.length === 0) {
tab = $("<table id='list'>");
$("#results").append(tab);
} else {
tab.empty();
}
// Vraie table
var restable = $("<table>");
tab.append(restable);
// Header
var thead = $("<thead>");
var header = $("<tr>");
for (var i = 0; i < fields.length; i++) {
var fname = fnames ];
var head = $("<th>").html(fname);
header.append(head);
}
thead.append(header);
restable.append(thead);
// Content
var tbody = $("<tbody>");
for (var i=0; i < list.length; i++) {
var row = $("<tr>");
for (var j=0; j < fields.length; j++) {
var f = list ];
var cell = $("<td>");
cell.html(f);
row.append(cell);
}
tbody.append(row);
}
restable.append(tbody);
// restable.tablesorter();
}
function print_wikilist(list) {
var num = list.length;
if (num === 0) {
$("#results_num").html("Pas de résultat");
return;
}
$res = num == 1 ? " résultat" : " résultats";
$("#results_num").html(num + $res);
var wikitext = $("#list");
if (wikitext.length === 0) {
wikitext = $("<pre id='list'>");
$("#results").append(wikitext);
} else {
wikitext.empty();
}
// Content
var text = ;
for (var i=0; i < list.length; i++) {
var l = list;
line = '';
pron = '';
if (l.p_pron) {
line = "* ] {{pron|" + l.p_pron + "|" + l.l_lang + "}}";
} else {
line = "* ]";
}
text.push(line);
}
wikitext.html(text.join("\n<br>"))
}
function prepare_list(list) {
for (var i = 0; i < list.length; i++) {
var l = list;
l.title = wikilink(l);
if (l.p_pron) {
l.pron = "\\" + l.pront.join("\\ <small>ou</small> \\") + "\\";
} else {
l.pron = "";
}
l.lang = langs;
if (!l.lang) {
l.lang = "<span class='ulang'>" + l.l_lang + "</span>";
}
l.type = types;
if (!l.type) {
l.type = "<span class='utype'>" + l.l_type + "</span>";
}
l.genre = genres;
if (!l.genre) {
l.genre = "<span class='ugenre'>" + l.l_genre + "</span>";
}
if (l.l_num > 0) {
l.type += " " + l.l_num;
}
if (l.l_is_flexion == 1) {
l.type += " (flexion)";
}
list = l;
}
return list;
}
function wikilink(w) {
var link = $("<a />");
link.text(w.a_title);
var anchor_elts = ;
if (w.l_num > 0) {
anchor_elts.push(w.l_num);
}
var anchor = "#" + anchor_elts.join('-');
link.attr("href", wikturl + w.a_title + anchor);
return link;
}
function get_form_pars() {
var fpars = {
'string' : $("input#string").val(),
'action' : $("#search_type").val(),
'lang' : $("#lang").val(),
'type' : $("#type").val(),
'genre' : $("#genre").val(),
'flex' : $("#flex").is(':checked'),
'loc' : $("#loc").is(':checked'),
'gent' : $("#gent").is(':checked'),
'nom-pr' : $("#nom-pr").is(':checked'),
'noflat' : $("#noflat").is(':checked'),
'without_pron' : $("#without_pron").is(':checked'),
'wikilist' : $("#wikilist").is(':checked'),
'dev' : $("#dev").is(':checked'),
};
fpars = remove_all(fpars);
return fpars;
}
function remove_all(pars) {
for (var k in pars) {
if (pars == '*') {
delete pars;
}
}
return pars;
}
$(function() {
if ( $("#anag_search") ) {
print_form();
$("#anag_form").on("submit", function(e) {
$("#anag_form input").blur();
e.preventDefault();
anagrimes();
});
}
});