1KA_F2F/admin/survey/script/LanguageTechnology_old.js

841 lines
29 KiB
JavaScript
Raw Normal View History

2020-08-14 13:36:36 +02:00
//var languageTechnology = [];
var var_timeout = 60000;
// test
var languageTechnologyResponse = {};
var languageTechnology = {};
var languageTechnologySettings = {};
var languageTechnologyWordCache = {};
var languageTechnologyWordCustom = {};
function cleanLanguageTechnology() {
//languageTechnology = [];
$('div#branching').find('.spremenljivka_content').each(function(){
var spremenljivka = $(this).attr('spr_id');
var $divContainer = $('li#branching_'+spremenljivka);
$('#lt_'+spremenljivka).remove();
$divContainer.find('span.highlight').tagRemover();
$divContainer.fadeTo(500, 1);
});
}
function runLanguageTechnology() {
$('div#branching').find('.spremenljivka_content').each(function(){
var spremenljivka = $(this).attr('spr_id');
var request = {
spremenljivka: spremenljivka,
anketa: srv_meta_anketa_id,
lt_language: $("#lt_language").val(),
lt_min_FWD: $("#lt_min_FWD").val(),
lt_min_nNoM: $("#lt_min_nNoM").val(),
lt_min_vNoM: $("#lt_min_vNoM").val()
};
// nardimo ajax klic
$.ajax({
cache: false,
timeout: var_timeout,
xhrFields: { withCredentials: true },
url: 'ajax.php?a=runLanguageTechnology',
type: 'post',
//dataType: 'json',
data: request,
spremenljivka: spremenljivka,
container: $('li#branching_'+spremenljivka),
beforeSend: function() {
// odstranimo morebitne predhodne higlighte
cleanLanguageTechnology()
this.container.fadeTo(500, 0.4);
},
success: function (response) {
if (response['error'] != undefined) {
if (response['error']['hasError'] == true) {
alert(response['error']['msg']);
// cleanUpAndReturn();
return false;
}
delete response['error'];
}
if (response['setting'] != undefined) {
languageTechnologySettings = response['setting'];
delete response['setting'];
}
// shranimo celoten response spremenljivke da potem lovimo shranjene podatke
languageTechnologyResponse[this.spremenljivka] = response;
displayProblematicWords(this.spremenljivka);
return true;
},
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert('Prišlo je do neznane napake.');
}
},
complete: function() {
this.container.fadeTo(500, 1);
}
});
});
}
function displayProblematicWords(spremenljivka) {
var $divContainer = $('li#branching_'+spremenljivka);
// pobrišemo obstoječe dive
$('#lt_'+spremenljivka).remove();
// narišemo vse nove potrebne dive
$divContainer.after(
$("<div/>", {
id: 'lt_'+spremenljivka,
class: 'lt_div'
})
.append(
$("<div/>", {class: 'lt_word_data'})
.append(
$("<div/>", {
id: 'lt_words_'+spremenljivka,
class: 'lt_words',
})
.on('click', 'ul li', function() {
wordIndex = $(this).index();
displayProblematicWord(spremenljivka, wordIndex)
})
.append( $('<div/>', {
text: lang['srv_language_technology_flagged_wordings'],
class: 'lt_header'
}))
.append(
$("<ul/>", {
id: 'lt_words_ul_' + spremenljivka,
class: 'lt_word_list',
})
)
)
).append( $("<div/>", { class: 'clr' })) // clear;
.append( $("<div/>", { class: 'lt_word_synonym' }))
);
// dodamo seznam vseh besed
var words = languageTechnologyResponse[spremenljivka];
$.each(words, function(wi, $wordData) {
var $word = $wordData.word.toLowerCase();
// obarvamo besedo
$divContainer.find("*").highlight($word);
$LTWord = $("<li/>")
.append($('<span/>', {class: 'sprites'}))
// .append($('<input/>', {type: 'radio'}))
.append($('<span/>', {text: $word}))
.appendTo($("#lt_words_ul_" + spremenljivka));
});
}
function displayProblematicWord(spremenljivka, wordIndex) {
// odstranimo podatke o besedi
$("#lt_word_hypernym_div_"+spremenljivka).remove();
$("#lt_word_detail_div_"+spremenljivka).remove();
// holder ul =
$ul = $("#lt_words_ul_"+spremenljivka);
// deaktiviramo ostale checkboxe in liste
$ul.find('li').removeClass('active');
$ul.find('li span:first-child').removeClass('arrow_small2_r');
// aktiviramo izbran list in checkbox
$ul.find('li').eq(wordIndex).addClass('active');
$ul.find('li').eq(wordIndex).find('span:first-child').addClass('arrow_small2_r');
//$ul.find('li').eq(wordIndex).addClass('active');
/*
wordHasSynonim = wordHasSynonims(spremenljivka, wordIndex);
if (wordHasSynonim) {
} else {
$ul.find('li').eq(wordIndex).removeClass('active');
}
*/
// prikažemo podatke besede
var word = languageTechnologyResponse[spremenljivka][wordIndex]['word'];
var fwd = languageTechnologyResponse[spremenljivka][wordIndex]['FWD'];
var nom = languageTechnologyResponse[spremenljivka][wordIndex]['NoM'];
var tag = languageTechnologyResponse[spremenljivka][wordIndex]['Tag'];
var tag_lang = "";
switch(tag) {
case 'n':
tag_lang = lang['srv_language_technology_noun'];
break;
case 'v':
tag_lang = lang['srv_language_technology_verb'];
break;
case 'a':
tag_lang = lang['srv_language_technology_adjective'];
break;
case 'ad':
tag_lang = lang['srv_language_technology_adverb'];
break;
case 'e':
tag_lang = lang['srv_language_technology_existential'];
break;
}
$LTWordDetailDiv = $("<div/>", {
id: 'lt_word_detail_div_'+spremenljivka,
class: 'lt_word_detail_div',
})
.append( $('<div/>', {
text: lang['srv_language_technology_wording_properites'],
class: 'lt_header no_padding'}
)
)
.append($("<div/>").append($('<span/>', { text: 'Beseda: ' })).append($('<span/>', { text: word, class: 'strong' })))
.append($("<div/>").append($('<span/>', { text: 'FWD: ' })).append($('<span/>', { text: fwd })))
.append($("<div/>").append($('<span/>', { text: 'Tag: ' })).append(
// dodamo dropdown
$('<span/>').append($("<select/>", {'data-word': word})
.append($("<option/>", {value: 'n', text: lang['srv_language_technology_noun']}))
.append($("<option/>", {value: 'v', text: lang['srv_language_technology_verb']}))
.append($("<option/>", {value: 'a', text: lang['srv_language_technology_adjective']}))
.append($("<option/>", {value: 'adv', text: lang['srv_language_technology_adverb']}))
.append($("<option/>", {value: 'e', text: lang['srv_language_technology_existential']}))
.on('change', function() {
var word =$(this).data('word');
var wordType = $(this).val();
changeWordType(spremenljivka, wordIndex, word, wordType);
})
)
)
)
.append($("<div/>").append($('<span/>', { text: 'NoM: ' })).append($('<span/>', { text: nom })))
.appendTo($("#lt_"+spremenljivka+" div.lt_word_data"));
// izberemo pravilno opcijo
$("#lt_word_detail_div_"+spremenljivka).find("select").val(tag);
// prikažemo sopomenke besede
displayWordSynonyms(spremenljivka, wordIndex);
}
function displayWordSynonyms(spremenljivka, wordIndex) {
// če že obstaja izbrišemo
$("#lt_words_synonyms_" + spremenljivka).remove();
// naredimo div
$LTWordSynonyms = $("<div/>", {
id: 'lt_words_synonyms_' + spremenljivka,
class: 'lt_words_synonyms',
}).appendTo($("#lt_"+spremenljivka+" div.lt_word_synonym"))
.append( $('<div/>', {
text: lang['srv_language_technology_relevant_meanings'],
class: 'lt_header'
}));
var synsets = languageTechnologyResponse[spremenljivka][wordIndex]['Synset'];
// izrišemo sopomenke - synonyms
$SynsetUl = $("<ul/>", {
class: 'lt_word_synset'
})
.appendTo($("#lt_words_synonyms_" + spremenljivka))
.on('click', 'li input', function(event ) {
event.stopPropagation();
synonymIndex = $(this).closest('li').index();
checked = $(this).is(':checked') == true;
displaySynonimHypernim(spremenljivka, wordIndex, synonymIndex, checked);
})
.on('click', 'li:not(input)', function(event ) {
event.stopPropagation();
synonymIndex = $(this).index();
// change input
checked = $(this).find('input').is(':checked') != true;
$(this).find('input').prop("checked", checked);
displaySynonimHypernim(spremenljivka, wordIndex, synonymIndex, checked);
});
var index = 0;
if (synsets.length) {
var selectedSynonim = undefined;
$.each(synsets, function(si, $synset) {
index = si;
// če imamo izbrano besedo, jo izrišemo wordIndex = selectedWordIndex
isSet = isSetSynonim(spremenljivka, wordIndex, si);
selectedClass = '';
if (isSet) {
selectedClass = 'selectedWord';
}
/*
* "synonyms":"karakteristika, znacilnost, posebnost",
* "FWDNoM":"karakteristika NoM: 3 Frek: 707, znacilnost NoM: 6 Frek: 7846, posebnost NoM: 8 Frek: 4549"},
*/
$SynsetLi = $("<li/>", {class: selectedClass})
.append($('<span/>').append($('<input/>', {type: 'checkbox'})))
.append($('<span/>', {text: $synset.synonyms,}))
.appendTo($SynsetUl);
if (isSet) {
$SynsetLi.find('input').prop('checked', true);
}
});
index++;
}
//if (!synsets.length) {
isSet = isSetSynonim(spremenljivka, wordIndex, index);
selectedClass = '';
if (isSet) {
selectedClass = 'selectedWord';
}
$SynsetLi = $("<li/>", {class: selectedClass})
.append($('<span/>').append($('<input/>', {type: 'checkbox'})))
.append($('<span/>').append(
$('<input/>', {type:'text', value:getCustomWording(spremenljivka, wordIndex)})
.on('change', function() {
words = $(this).val();
addCustomWording(spremenljivka, wordIndex, words);
})
))
.appendTo($SynsetUl)
if (isSet) {
$SynsetLi.find('input').prop('checked', true);
}
// no wording
//$("#lt_words_synonyms_" + spremenljivka).html('<p>' + lang['srv_language_technology_no_alternative'] + '</p>');
//}
displayWordHypernym(spremenljivka, wordIndex);
}
function displaySynonimHypernim(spremenljivka, wordIndex, synonymIndex) {
changeWordHypernym(spremenljivka, wordIndex, synonymIndex, checked);
displayWordHypernym(spremenljivka, wordIndex);
}
function displayWordHypernym(spremenljivka, wordIndex) {
// odstranimo stare podatke
$("#lt_word_hypernym_div_"+spremenljivka).remove();
// div za hypernime
$LTWordHypernymDiv = $("<div/>", {
id: 'lt_word_hypernym_div_'+spremenljivka,
class: 'lt_word_hypernym_div',
});
// polovimo vse hypernyme
hypernyms = getWordHypernyms(spremenljivka, wordIndex);
if (!$.isEmptyObject(hypernyms)) {
$LTWordHypernymDiv
.empty()
.append(
$("<div/>", {class: 'hypernym_header'})
.append($('<span/>', { text: lang['srv_language_technology_alternative_wordings'] }))
.append($('<span/>', { text: 'WF*'}))
.append($('<span/>', { text: 'NoM'}))
);
$.each(hypernyms, function(i, Synset) {
$LTWordHypernymDiv.append($("<div/>", {class: 'hypernym_details'})
.append($('<span/>', { text: Synset['word'] }))
.append($('<span/>', { text: Synset['freq']}))
.append($('<span/>', { text: Synset['nom']}))
);
});
} else {
// ni hyperninov
$LTWordHypernymDiv
.empty()
.append(
$("<div/>", {class:'lt_padding', text: lang['srv_language_technology_no_alternative_selected']})
);
}
$("#lt_words_synonyms_"+spremenljivka).after($LTWordHypernymDiv);
return true;
// odstranimo stare podatke
$("#lt_word_hypernym_div_"+spremenljivka).remove();
// div za hypernime
$LTWordHypernymDiv = $("<div/>", {
id: 'lt_word_hypernym_div_'+spremenljivka,
class: 'lt_word_hypernym_div',
})
.empty()
.append(
$("<div/>", {class: 'hypernym_header'})
.append($('<span/>', { text: lang['srv_language_technology_alternative_wordings'] }))
.append($('<span/>', { text: 'WF*'}))
.append($('<span/>', { text: 'NoM'}))
);
$("#lt_words_synonyms_"+spremenljivka).after($LTWordHypernymDiv);
}
function changeWordHypernym(spremenljivka, wordIndex, synonymIndex, checked) {
if (checked) {
setSynonim(spremenljivka, wordIndex, synonymIndex);
} else {
unsetSynonim(spremenljivka, wordIndex, synonymIndex);
}
// holder ul =
$ul = $("#lt_words_synonyms_"+spremenljivka+" ul");
isSet = isSetSynonim(spremenljivka, wordIndex, synonymIndex);
if (isSet) {
$ul.find('li').eq(synonymIndex).addClass('selectedWord');
} else {
$ul.find('li').eq(synonymIndex).removeClass('selectedWord');
}
changeWordSynonym(spremenljivka, wordIndex);
}
function changeWordSynonym(spremenljivka, wordIndex){
wordHasSynonim = wordHasSynonims(spremenljivka, wordIndex);
if (wordHasSynonim ) {
$("#lt_words_ul_" + spremenljivka).find("li").eq(wordIndex).addClass('selectedWord');
} else {
$("#lt_words_ul_" + spremenljivka).find("li").eq(wordIndex).removeClass('selectedWord');
}
}
function parseHypernyms(synsetsText, language) {
synsetWords = [];
// angleščina
if (language.toLowerCase() == 'eng') {
synsetArray = synsetsText.split(";");
$.each(synsetArray, function(i, synsetText) {
if (synsetText.trim() != '' && synsetText != undefined) {
// linguistic: FW = 2457, NoM = 2; lingual: FW <800 , NoM = 2;
tmp = synsetText.split(':');
word = tmp[0].trim();
tmp = tmp[1].trim().split(',');
freq = tmp[0].replace('FW','').replace('= ', '').replace(';', '').trim();
nom = tmp[1].replace('NoM','').replace('= ', '').replace(';', '').trim();
synsetWords.push({word:word, nom:nom, freq:freq});
}
});
// slovenščina
} else {
synsetArray = synsetsText.split(";");
$.each(synsetArray, function(i, synsetText) {
if (synsetText.trim() != '' && synsetText != undefined) {
tmp = synsetText.split(':');
word = tmp[0].trim();
tmp = tmp[1].trim().split(',');
freq = tmp[0].replace('FW','').replace('= ', '').replace(';', '').trim();
nom = tmp[1].replace('NoM','').replace('= ', '').replace(';', '').trim();
synsetWords.push({word:word, nom:nom, freq:freq});
}
});
}
return synsetWords;
}
function getCustomWording(spremenljivka, wordIndex) {
result = '';
if (languageTechnologyWordCustom['sp_'+spremenljivka] != undefined) {
if (languageTechnologyWordCustom['sp_'+spremenljivka]['wi_'+wordIndex] != undefined) {
result = languageTechnologyWordCustom['sp_'+spremenljivka]['wi_'+wordIndex];
}
}
//if (languageTechnologyWordCustom[spremenljivka+'_'+wordIndex] != undefined) {
// result = languageTechnologyWordCustom[spremenljivka+'_'+wordIndex];
//}
return result;
}
function addCustomWording(spremenljivka, wordIndex, words) {
if (languageTechnologyWordCustom['sp_'+spremenljivka] == undefined) {
languageTechnologyWordCustom['sp_'+spremenljivka] = {};
}
if (languageTechnologyWordCustom['sp_'+spremenljivka]['wi_'+wordIndex] == undefined) {
languageTechnologyWordCustom['sp_'+spremenljivka]['wi_'+wordIndex] = words;
}
//languageTechnologyWordCustom[spremenljivka+'_'+wordIndex] = words;
}
function setSynonim(spremenljivka, wordIndex, synonymIndex) {
if (languageTechnology['sp_'+spremenljivka] == undefined) {
languageTechnology['sp_'+spremenljivka] = {};
}
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] == undefined) {
languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] = {};
}
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]['si_'+synonymIndex] == undefined) {
languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]['si_'+synonymIndex] = '1';
}
enableDisableExcelExport();
}
function unsetSynonim(spremenljivka, wordIndex, synonymIndex) {
if (languageTechnology['sp_'+spremenljivka] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]['si_'+synonymIndex] != undefined ) {
delete languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]['si_'+synonymIndex];
}
if ($.isEmptyObject(languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex])) {
delete languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex];
}
}
if ($.isEmptyObject(languageTechnology['sp_'+spremenljivka])) {
delete languageTechnology['sp_'+spremenljivka];
}
}
enableDisableExcelExport();
}
function resetWordSynonyms(spremenljivka, wordIndex) {
if (languageTechnology['sp_'+spremenljivka] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] != undefined) {
wordHasSynonim = $.isEmptyObject(languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]) == false;
if (wordHasSynonim) {
$.each(languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex], function(si, synonymIndex) {
unsetSynonim(spremenljivka, wordIndex, si.replace('si_',''))
});
}
}
}
}
function isSetSynonim(spremenljivka, wordIndex, synonymIndex) {
isSet = false;
if (languageTechnology['sp_'+spremenljivka] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]['si_'+synonymIndex] != undefined) {
isSet = true;
}
}
}
return isSet;
}
function wordHasSynonims(spremenljivka, wordIndex) {
wordHasSynonim = false;
if (languageTechnology['sp_'+spremenljivka] != undefined) {
if (languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex] != undefined) {
wordHasSynonim = $.isEmptyObject(languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex]) == false;
}
}
return wordHasSynonim;
}
function getWordHypernyms(spremenljivka, wordIndex) {
result = {};
var synsetArray = languageTechnologyResponse[spremenljivka][wordIndex]['Synset'];
izbrani = [];
if (wordHasSynonims(spremenljivka, wordIndex)) {
izbrani = languageTechnology['sp_'+spremenljivka]['wi_'+wordIndex];
}
// jezik
if (languageTechnologySettings['lt_language'] != undefined) {
var language = languageTechnologySettings['lt_language'];
} else {
var language = $("#lt_language").val()
}
$.each(synsetArray, function(i, synsetText) {
if (izbrani['si_'+i] != undefined) {
hypernyms = parseHypernyms(synsetText['FWDNoM'], language);
$.each (hypernyms, function (i, hypernym) {
word = hypernym['word'];
if (result[word] == undefined) {
result[word] = hypernym;
}
})
//hypernyms.push();
}
});
return result;
}
function enableDisableExcelExport() {
// preverimo ali imamp kak synonym
var has = false;
$.each(languageTechnology, function(spremenljvkaKey, spremenljivkaData) {
$.each(spremenljivkaData, function(wordKey, wordData) {
$.each(wordData, function(synsetKey, synsetData) {
has = true;
return false; // break
});
if (has) {
return false; // break
}
})
if (has) {
return false; // break
}
});
if (has) {
$("#lt_export_excel span").removeClass("xls_grey_16 xls_16").addClass("xls_16");
} else {
$("#lt_export_excel span").removeClass("xls_grey_16 xls_16").addClass("xls_grey_16");
}
return has;
}
function prepareExcelData() {
result = [];
izbrani = languageTechnology;
// naredimo kopijo mustang responsa, drugače so težave z referencami
var response = jQuery.extend(true, {}, languageTechnologyResponse);
$.each(izbrani, function(spremenljvkaKey, spremenljivkaData) {
spremenljivka = spremenljvkaKey.replace('sp_','');
$.each(spremenljivkaData, function(wordKey, wordData) {
word = wordKey.replace('wi_','');
var wordSynonyms = [];
$.each(wordData, function(synsetKey, synsetData) {
sysnset = synsetKey.replace('si_','');
wordSynonyms.push(response[spremenljivka][word]['Synset'][sysnset]);
});
var wd = jQuery.extend(true, {}, response[spremenljivka][word]);
delete wd['Synset'];
wd['synonyms'] = wordSynonyms;
result.push({spremenljivka:spremenljivka, data:wd});
})
});
return result;
}
function lt_export_excel() {
if (!enableDisableExcelExport()) {
// return false;
}
var request = {
anketa: srv_meta_anketa_id,
mustangData: prepareExcelData(),
language: $("#lt_language").val()
};
$.ajax({
timeout: var_timeout,
cache: false,
xhrFields: { withCredentials: true },
url: 'ajax.php?a=exportLanguageTechnology',
type: 'post',
data: request,
success: function (response) {
if (response['error'] == true) {
alert(response['msg']);
return false;
}
window.open(response['url']);
},
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert('Prišlo je do neznane napake.');
}
},
complete: function() {
}
});
}
function changeWordType(spremenljivka, wordIndex, word, wordType) {
var wkey = spremenljivka +'_'+ wordIndex+'_' + word + '_' + wordType;
// preverimo cachež
if (languageTechnologyWordCache[wkey] == undefined) {
console.log('2');
// nardimo request
var request = {
spremenljivka: spremenljivka,
anketa: srv_meta_anketa_id,
lt_word: word,
lt_tag: wordType,
lt_language: $("#lt_language").val(),
lt_min_FWD: $("#lt_min_FWD").val(),
lt_min_nNoM: $("#lt_min_nNoM").val(),
lt_min_vNoM: $("#lt_min_vNoM").val()
};
// nardimo ajax klic
$.ajax({
cache: false,
timeout: var_timeout,
xhrFields: { withCredentials: true },
url: 'ajax.php?a=runLanguageTechnologyWord',
type: 'post',
//dataType: 'json',
data: request,
spremenljivka: spremenljivka,
wordIndex: wordIndex,
container: $('li#branching_'+spremenljivka),
beforeSend: function() {
},
success: function (response) {
if (response['error'] != undefined) {
if (response['error']['hasError'] == true) {
alert(response['error']['msg']);
// cleanUpAndReturn();
return false;
}
delete response['error'];
}
if (response['setting'] != undefined) {
languageTechnologySettings = response['setting'];
delete response['setting'];
}
// zamenjamo besedo v responsu
languageTechnologyResponse[this.spremenljivka][this.wordIndex] = response[0];
// TODO počistimo morebitne izbrane indexe za to besedo
resetWordSynonyms(spremenljivka, wordIndex);
// prikažemo na novo
changeWordSynonym(this.spremenljivka, this.wordIndex);
displayWordSynonyms(this.spremenljivka, this.wordIndex);
return true;
},
error: function(x, t, m) {
if(t==="timeout") {
alert("got timeout");
} else {
alert('Prišlo je do neznane napake.');
}
},
complete: function() {
}
});
}
}
function stripAccents(str) {
var rExps=[
{re:/[\xC0-\xC6]/g, ch:'A'},
{re:/[\xE0-\xE6]/g, ch:'a'},
{re:/[\xC8-\xCB]/g, ch:'E'},
{re:/[\xE8-\xEB]/g, ch:'e'},
{re:/[\xCC-\xCF]/g, ch:'I'},
{re:/[\xEC-\xEF]/g, ch:'i'},
{re:/[\xD2-\xD6]/g, ch:'O'},
{re:/[\xF2-\xF6]/g, ch:'o'},
{re:/[\xD9-\xDC]/g, ch:'U'},
{re:/[\xF9-\xFC]/g, ch:'u'},
{re:/[\xD1]/g, ch:'N'},
{re:/[\xF1]/g, ch:'n'} ];
for(var i=0, len=rExps.length; i<len; i++)
str=str.replace(rExps[i].re, rExps[i].ch);
return str;
};
jQuery.extend({
highlight: function (node, re, nodeName, className) {
if (node.nodeType === 3) {
//var match = node.data.match(re);
var match = stripAccents(node.data).match(re);
if (match) {
var highlight = document.createElement(nodeName || 'span');
highlight.className = className || 'highlight';
var wordNode = node.splitText(match.index);
wordNode.splitText(match[0].length);
var wordClone = wordNode.cloneNode(true);
highlight.appendChild(wordClone);
wordNode.parentNode.replaceChild(highlight, wordNode);
return 1; //skip added node in parent
}
} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
!/(script|style)/i.test(node.tagName) && // ignore script and style nodes
!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
for (var i = 0; i < node.childNodes.length; i++) {
i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
}
}
return 0;
}
});
jQuery.fn.unhighlight = function (options) {
var settings = { className: 'highlight', element: 'span' };
jQuery.extend(settings, options);
return this.find(settings.element + "." + settings.className).each(function () {
var parent = this.parentNode;
parent.replaceChild(this.firstChild, this);
parent.normalize();
}).end();
};
jQuery.fn.highlight = function (words, options) {
var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
jQuery.extend(settings, options);
if (words.constructor === String) {
words = [words];
}
words = jQuery.map(words, function(word, i) {
return stripAccents(word);
});
var flag = settings.caseSensitive ? "" : "i";
var pattern = "(" + words.join("|") + ")";
if (settings.wordsOnly) {
pattern = "\\b" + pattern + "\\b";
}
var re = new RegExp(pattern, flag);
return this.each(function () {
jQuery.highlight(this, re, settings.element, settings.className);
});
};
/** Tag remover
* $('div span').tagRemover();
*
*/
(function($) {
$.fn.tagRemover = function() {
return this.each(function() {
var $this = $(this);
var text = $this.text();
$this.replaceWith(text);
});
}
})(jQuery);