You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
227 lines
5.9 KiB
227 lines
5.9 KiB
/**
|
|
* @license http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
|
|
* @author Francois Merciol <dokuplugin@merciol.fr>
|
|
*
|
|
* Javascript functionality for the glossary plugin
|
|
*/
|
|
|
|
// ========================================
|
|
// Util
|
|
// ========================================
|
|
function trim (str) {
|
|
return str.replace(/^\s+/g,'').replace(/\s+$/g,'') ;
|
|
}
|
|
|
|
function glossaryClearMsgJ (item) {
|
|
// efface le popup
|
|
item.closest ("div").find ("div.popup").each (function () {
|
|
jQuery (this).remove ();
|
|
});
|
|
}
|
|
|
|
function glossaryZebraJ (jTable) {
|
|
// alterne les couleurs des lignes du tableau
|
|
var oddEven = new Array ("odd", "even");
|
|
var even = 0;
|
|
jTable.find ("tr").each (function () {
|
|
var item = jQuery (this);
|
|
if (item.hasClass ("title"))
|
|
return;
|
|
if (item.css ("display") == "none")
|
|
return;
|
|
this.className = oddEven [even];
|
|
even = 1 - even;
|
|
});
|
|
}
|
|
|
|
// ========================================
|
|
// Clear form
|
|
// ========================================
|
|
function glossaryReset (input) {
|
|
|
|
// met à blanc le formulaire
|
|
var jForm = jQuery (input).closest ("form");
|
|
jForm.find ("input[type=text]").each (function () {
|
|
this.defaultValue = "";
|
|
jQuery (this).val ("");
|
|
});
|
|
jForm.find ("input[type=textarea]").each (function () {
|
|
this.defaultValue = "";
|
|
jQuery (this).val ("");
|
|
});
|
|
glossaryClearMsgJ (jForm);
|
|
}
|
|
|
|
function glossaryUpdateProposalLabel (form) {
|
|
form.elements[4].value = LANG["plugins"]["glossary"][form.elements[7].value ? "update" : "proposal"];
|
|
}
|
|
|
|
// ========================================
|
|
// Glossary Util
|
|
// ========================================
|
|
function glossaryComparatorWord (a, b) {
|
|
return glossaryComparator (a, b, "word", false);
|
|
}
|
|
|
|
function glossaryComparatorTranslate (a, b) {
|
|
return glossaryComparator (a, b, "translate", false);
|
|
}
|
|
|
|
function glossaryComparatorDate (a, b) {
|
|
return -glossaryComparator (a, b, "date", false);
|
|
}
|
|
|
|
function glossaryComparatorView (a, b) {
|
|
return -glossaryComparator (a, b, "view", true);
|
|
}
|
|
|
|
function glossaryComparatorScore (a, b) {
|
|
return -glossaryComparator (a, b, "score", false);
|
|
}
|
|
|
|
function glossaryComparator (a, b, name, num) {
|
|
var valA = "";
|
|
for (var i = 0; i < a.attributes.length; i++)
|
|
if (a.attributes [i].name == name) {
|
|
valA = a.attributes [i].nodeValue;
|
|
break;
|
|
}
|
|
var valB = "";
|
|
for (var i = 0; i < b.attributes.length; i++)
|
|
if (b.attributes [i].name == name) {
|
|
valB = b.attributes [i].nodeValue;
|
|
break;
|
|
}
|
|
if (num) {
|
|
if (!valA)
|
|
valA = 0;
|
|
if (!valB)
|
|
valB = 0;
|
|
return parseInt (valA) - parseInt (valB);
|
|
}
|
|
if (valB == valA)
|
|
return 0;
|
|
if (valB > valA)
|
|
return -1;
|
|
return 1;
|
|
}
|
|
|
|
function glossaryGetRowsJ (jTable) {
|
|
// prend les lignes du tableau
|
|
var result = new Array ();
|
|
jTable.find ("tr").each (function () {
|
|
if (jQuery (this).hasClass ("title"))
|
|
return;
|
|
result.push (this);
|
|
});
|
|
return result;
|
|
}
|
|
|
|
function glossarySetRowsJ (jTable, rows) {
|
|
// fixe les lignes du tableau
|
|
var titles = new Array ();
|
|
jTable.children ().not ("tr").each (function () {
|
|
titles.push (this);
|
|
});
|
|
jTable.children (".title").each (function () {
|
|
titles.push (this);
|
|
});
|
|
jTable.empty ();
|
|
for (var i in titles)
|
|
jTable.append (titles [i]);
|
|
for (var i in rows)
|
|
jTable.append (rows [i]);
|
|
}
|
|
|
|
function glossarySort (input, comparator) {
|
|
// trie le tableau
|
|
var jTable = jQuery (input).closest ("tr").parent ();
|
|
var rows = glossaryGetRowsJ (jTable);
|
|
if (rows.length < 2)
|
|
return;
|
|
rows.sort (comparator);
|
|
glossarySetRowsJ (jTable, rows);
|
|
glossaryZebraJ (jTable);
|
|
}
|
|
|
|
// ========================================
|
|
// focus table
|
|
// ========================================
|
|
function glossarySearch (input) {
|
|
// filtre les lignes du tableau
|
|
var jInput = jQuery (input);
|
|
glossaryClearMsgJ (jInput);
|
|
var value = trim (jInput.val ()).toLowerCase ();
|
|
var jTable = jInput.closest ("tr").parent ();
|
|
jTable.find ("tr").each (function () {
|
|
var item = jQuery (this);
|
|
if (item.hasClass ("title"))
|
|
return;
|
|
item.css ("display", "");
|
|
if (!value)
|
|
return;
|
|
var hidden = true;
|
|
item.find ("td.word,td.translate").each (function () {
|
|
if (this.textContent && this.textContent.toLowerCase ().indexOf (value) >= 0)
|
|
hidden = false;
|
|
});
|
|
if (hidden)
|
|
item.css ("display", "none");
|
|
});
|
|
glossaryZebraJ (jTable);
|
|
return false;
|
|
}
|
|
|
|
// ========================================
|
|
// sending form
|
|
// ========================================
|
|
function glossaryPoll (ancor, ticket, opinion, NS) {
|
|
// vote
|
|
var params = "glossary[operation]=poll&glossary[ticket]="+ticket+"&glossary[opinion]="+opinion+"&glossary[ns]="+NS;
|
|
glossarySend (ancor, DOKU_BASE+"lib/plugins/glossary/ajax.php", params);
|
|
}
|
|
|
|
function glossaryAjax (form) {
|
|
var params = "";
|
|
for (var idx = 0; idx < form.elements.length; idx++) {
|
|
var elem = form.elements[idx];
|
|
if (elem.type == "checkbox") {
|
|
if (elem.checked)
|
|
params += "&"+elem.name+"="+elem.value;
|
|
} else
|
|
params += "&"+elem.name+"="+elem.value;
|
|
}
|
|
glossarySend (form, DOKU_BASE+"lib/plugins/glossary/ajax.php", params);
|
|
return false;
|
|
}
|
|
function glossarySendClear (action, ns) {
|
|
jQuery.ajax ({
|
|
type: "POST",
|
|
url: DOKU_BASE+"lib/plugins/glossary/ajax.php",
|
|
cache: false,
|
|
async: true,
|
|
data: "glossary[action]="+action+"&glossary[ns]="+ns,
|
|
});
|
|
}
|
|
|
|
// ========================================
|
|
// Ajax function
|
|
// ========================================
|
|
function glossarySend (sender, uri, params) {
|
|
var jDiv = jQuery (sender).closest ("div");
|
|
glossaryClearMsgJ (jQuery (sender));
|
|
jQuery ('<div class="popup">'+LANG["plugins"]["glossary"]["pleaseWait"]+'</div>').
|
|
insertBefore (jDiv.children ().first ());
|
|
jQuery.ajax ({
|
|
type: "POST",
|
|
url: uri,
|
|
cache: false,
|
|
async: true,
|
|
data: params,
|
|
success: function (response) {
|
|
jDiv.html (trim (response));
|
|
}
|
|
});
|
|
}
|
|
|
|
// ========================================
|
|
|