User:Jts1882/taxonomybrowser.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Jts1882/taxonomybrowser. |
var nLevels = 3; // this determines how many levels are show in each iteration
var nListLevels = 3;
var nInteractiveLevels = 1;
var debug = false;
var nRun = 1;
var ntt = false; // enable create new taxonomy template tool
/**
* This script adds a tool and dialog using code modified from the following tutorial script
*
* Tutorial script: QuickRC ("Quick Recent Changes")
*
* A tutorial user script which adds a "Quick changelog" link to the page skin's
* toolbox, and when clicked it pops up a dialog with up to 25 recent edits.
*
* Demonstrates:
* - Use of the API
* - Use of jQuery
* - Use of ResourceLoader and some of the default modules that come with it
* - Use of localization
*
* (Be bold and improve it!)
*
* Authors:
* Erik Moeller, 2011, public domain
* Brion Vibber, 2012, public domain
*/
messages = {
'en': {
'taxonomy-title': 'Taxonomy template browser',
'taxonomy-greeting': 'Welcome, $1!',
'taxonomy-intro': 'The following templates are children of this taxon taxonomy template:',
'taxonomy-link': 'Taxonomy browser',
'taxonomy-link2': 'Taxonomy (test)',
'taxonomy-tooltip': 'Get children for particular taxonomy template',
'ntt-link': 'Create new template',
'ntt-tooltip': 'Create new taxonomy template'
}
};
mw.messages.set(messages.en);
var lang = mw.config.get('wgUserLanguage');
if (lang && lang != 'en' && lang in messages) {
mw.messages.set(messages[lang]);
}
// Import the jQuery dialog plugin before starting the rest of this script
mw.loader.using(['jquery.ui.dialog'], function() {
function openTaxonBrowserDialog( taxon ) {
taxon = getDefaultTaxonName(taxon);
var $dialog = $( '<div id="dialog" ></div>' )
.html( showTaxonomyBrowserForm(taxon)
// + '<div id="output" class="taxonomy-browser" style="align:left">Tree will appear here</div>'
// + showNewTaxonomyTemplateForm(taxon)
)
.dialog({
autoOpen: true,
title: mw.message('taxonomy-title').plain(),
width: '60%',
modal: true
});
}
function openCreateTaxonomyTemplateDialog( taxon ) {
taxon = getDefaultTaxonName(taxon);
var $dialog = $( '<div></div>' )
.html( showNewTaxonomyTemplateForm(taxon) )
.dialog({
autoOpen: true,
title: mw.message('taxonomy-title').plain(),
width: '60%',
modal: true
});
}
function renderTaxonomyDialog( output ) {
var $dialog = $( '<div></div>' )
.html(
'<strong>' + mw.message('taxonomy-greeting', mw.user.getName()).escaped() + '</strong> '
+ mw.message('taxonomy-intro').escaped()
+ output
)
.dialog({
autoOpen: true,
title: mw.message('taxonomy-title').plain(),
width: '60%',
modal: true
});
}
//------------------------------------ the dialog functions ---------------------------
function showTaxonomyBrowserForm(taxon) {
var text = "";
text += '<div id="tb" class="taxonomy-browser" style="background-color:#f8f9fa;">';
text += '<div style="border:1px;padding:0.2em;margin:0.5em;" >'
+ 'Taxon name: <input id="taxonId" type="text" name="taxonname" style="width:200px;" value="'+taxon+'">'
+ ' <input id="gettree" type="submit" value="Get taxonomic tree">'
//+ ' <button id="gettree2" >Test</button>'
+ '</div>\n';
text += '<div style="width:13em;float:left;border:1px solid #dddddd;padding:0.2em;margin:0.5em;" >'
+ '<div style="width:100%;float:left;" title="number of levels in hierarchical tree" >'
+ 'Levels to display: <input id="levelsId" type="text" name="levels" value="1" style="width:20px;text-align:right;float:right;" ></div>'
+ '<div style="width:100%;float:left;" title="do not show extinct taxa" >'
+ 'Hide extinct taxa: <input id="extinctId" type="checkbox" name="extinct" value="no" style="float:right;"></div>'
+ '<div style="width:100%;float:left;" title="bold taxa that would be displayed in automatic taxobox" >'
+ 'Bold displayed taxa: <input id="bolddisplayId" type="checkbox" name="bolddisplay" value="no" style="float:right;"></div>'
+ '<div style="width:100%;float:left;" title="do not show taxa with no children" >'
+ 'Hide childless taxa: <input id="childlessId" type="checkbox" name="childless" value="no" style="float:right;" ></div>'
+ '</div>\n';
text += '<div style="width:9em;float:left;border:1px solid #dddddd;padding:0.2em;margin:0.5em;">'
+ 'Output mode: '
+ '<div style="width:100%;float:left;" title="simple listing of set number of levels in taxonomic tree" >'
+ '<input id="mode-list" type="radio" name="mode" value="list" >List</div>'
+ '<div style="width:100%;float:left;" title="interactive traversing of taxonomic tree" >'
+ '<input id="mode-interactive" type="radio" name="mode" value="interactive" checked >Interactive</div>'
+ '</div>\n';
text += '<div style="width:10em;float:left;border:1px solid #dddddd;padding:0.2em;margin:0.5em;">'
+ 'Show parameters:'
+ '<div style="width:100%;float:left;" title="show rank and show template parameters in tooltip" >'
+ '<input id="params-show" type="radio" name="parammode" value="show" checked >Yes</div>'
+ '<div style="width:100%;float:left;" title="" >'
+ '<input id="params-hide" type="radio" name="parammode" value="hide" >No</div>'
+ '</div>\n';
text += '<div style="width:8em;float:left;border:1px solid #dddddd;padding:0.2em;margin:0.5em;">' //visibility:hidden;">'
+ 'Search:'
+ '<div style="width:100%;float:left;" title="strict matching of parent taxa (excludes variant templates)" >'
+ '<input id="search-strict" type="radio" name="searchtype" value="strict" checked >Strict</div>'
+ '<div style="width:100%;float:left;" title="loose matching of parent taxa (includes variant templates as children)" >'
+ '<input id="search-loose" type="radio" name="searchtype" value="loose" >Loose</div>'
+ '<div style="width:100%;float:left;" title="uses same_as= to assign parent templates when parent not set (slow)" >'
+ '<input id="search-sameas" type="radio" name="searchtype" value="sameas" >Same as</div>'
+ '</div>\n';
text += '<div style="clear:both;"> </div>';
text += '</div>\n' ;
//text += '<div style="clear:both;"> </div>';
// add container for tree
text += '<div id="output" class="taxonomy-browser" style="clear:both;"> </div>';
return text;
}
function showNewTaxonomyTemplateForm(taxon) {
return '<form id="ntt" class="taxonomy-browser">'
+ 'Taxon name:<input id="ntt-taxon" type="text" name="taxonname" value="'+taxon+'">'
+ '<button id="nnt-createtemplate" >Create new taxonomy template</button><br/>'
+ 'Rank: <input id="ntt-rank" type="text" name="rank" value=""><br/>'
+ 'Parent: <input id="ntt-parent" type="text" name="parent" value=""><br/>'
+ '<fieldset>'
+ ' Extinct: <input type="checkbox" name="extinct" value="no" >'
+ ' Always display: <input type="checkbox" name="alwaysdisplay" value="no" >'
+ '</fieldset>'
+ '</form>' ;
// $('.myCheckbox').prop('checked', true);
}
function createNewTemplate (taxon) {
//taxon = prompt("Enter taxon name for new taxonomy template:", getDefaultTaxonName(taxon));
var url = 'https://en.wikipedia.org/w/index.php?action=edit&title=Template:taxonomy/'
+ $('#ntt-taxon').val()
+ '&preload=User:Jts1882/Taxonomy/preload'
+ '&preloadparams%5b%5d=' + $('#ntt-taxon').val() // link=$1 use taxon
+ '&preloadparams%5b%5d=' + $('#ntt-parent').val() // parent=$2
+ '&preloadparams%5b%5d=' + $('#ntt-rank').val() // rank=$3
+ '&preloadparams%5b%5d=' + "" // extinct=$4
+ '&preloadparams%5b%5d=' + "" // display_always=$5
+ '&preloadparams%5b%5d=' + "" // refs=$6
+ '&preloadparams%5b%5d=' + ""; // same_as=$7
//window.location = url; //"www.example.com/index.php?id=" + this.id;
window.open(url, 'window name', 'window settings');
// target="_blank">
}
function getTree(taxon) {
cleanUpAfterPreviousRuns();
var level = nListLevels;
var depth = 1;
//taxon = prompt("Enter the parent taxon:", getDefaultTaxonName(taxon));
taxon = $('#taxonId').val();
level =$('#levelsId').val(); // can be changed in getTaxonName
var mode = "LIST";
if ($("#mode-interactive").prop("checked")) {
mode = "INTERACTIVE";
}
nInteractiveLevels=level; // TODO remove multiple level parameters when two methods combined
var taxonId = encodeID(taxon, depth, 1); // + '-li';
var output = '<br/><ul>'
+ '<li class="taxon_identifier" id="' + taxonId + '"><b>' + taxon + '</b>'
+ '<span class="tree-info"></span>'
+ '</li>'
+ '<br/></ul>';
$('#output').html(output);
//addChildrenList(taxon, level ); // get data jQuery's AJAX
//addChildrenInteractive(taxon, level, "LIST" );
addChildrenInteractive(taxon, level, mode , depth, taxonId);
//renderTaxonomyDialog( output ); // open dialog
nRun += 1;
}
// ----------------------------- utlity functions -------------------------------
function escapeSeq(taxon) {
// Special Regex Characters: ., +*?^$()[]{}|
// Only these four characters require escape sequence inside the bracket list: ^-]\
taxon = taxon.replace(" ("," \\(");
taxon = taxon.replace(")","\\)");
taxon = taxon.replace("?","\\?");
taxon = taxon.replace("/","\\/");
taxon = taxon.replace(".","\\.");
return taxon;
}
function encodeID(taxon, depth, count) {
//taxon = taxon.replace("/","_X_");
//taxon = taxon.replace("(","_Y_");
//taxon = taxon.replace(")","_Z_");
//taxon = taxon.replace(" ","_S_");
//taxon = taxon.replace("?","_Q_");
taxon = taxon.replace(/\//g, "_X_");
taxon = taxon.replace(/\(/g, "_Y_");
taxon = taxon.replace(/\)/g, "_Z_");
taxon = taxon.replace(/ /g, "_S_");
taxon = taxon.replace(/\?/g, "_Q_");
taxon = taxon.replace(/\./g, "_D_");
return taxon+'-'+depth.toString()+'-'+count.toString();
//return encodeURIComponent(taxon);
}
function decodeID(taxon) {
//taxon = taxon.replace("_X_","/");
//taxon = taxon.replace("_Y_","(");
//taxon = taxon.replace("_Z_",")");
//taxon = taxon.replace("_S_"," ");
//taxon = taxon.replace("_Q_","?");
taxon = taxon.replace(/_X_/g, "/");
taxon = taxon.replace(/_Y_/g, "(");
taxon = taxon.replace(/_Z_/g, ")");
taxon = taxon.replace(/_S_/g, " ");
taxon = taxon.replace(/_Q_/g, "?");
taxon = taxon.replace(/_D_/g, ".");
return taxon;
//return encodeURIComponent(taxon);
}
function getTaxonName(taxon) {
taxon = prompt("Enter the parent taxon:", getDefaultTaxonName(taxon));
var split = taxon.split(" ");
if (split[1]) {
var number = parseInt(split[1]);
//if (number != NaN) nLevels = number;
if (!isNaN(number)) {
nLevels = number;
nInteractiveLevels= number; // TODO make decision on level parameters
nListLevels= number;
}
taxon = split[0];
}
return taxon;
}
function getDefaultTaxonName(taxon) { // get default from page name
var page = mw.config.get( 'wgPageName' ) ;
if (page.includes("Template:Taxonomy/") ) {
var res = page.split("Template:Taxonomy/");
taxon = res[1];
}
else {
var title = new mw.Title ( page );
var ns = title.getNamespaceId();
if ( ns === 0 && !page.includes(" ") ) taxon = page;
}
return taxon;
}
function getParameterString(index , sr) {
var paramString = "parameters: "; //" [extra info] ";
var snippet =sr.snippet; // this contains the template code
if (snippet.includes("rank")) {
//var rank = templateData.match(/rank[\s]*=[\s]*[a-zA-Z]*/); //gets "rank%s=%sclassis"
var rank = snippet.match(/rank[\s]*=[\s]*([a-zA-Z ]*)/);
//if (rank && rank[0] ) extraInfo = ' ['+rank[0]+']';
if (rank && rank[0] ) paramString += rank[0];
}
if (snippet.includes("parent")) {
var parent = snippet.match(/parent[\s]*=[\s]*([a-zA-Z\._ \/\?]*)/);
if (parent && parent[0] ) paramString += ' ' + parent[0];
}
if (snippet.includes("link")) {
var link = snippet.match(/link[\s]*=[\s]*([a-zA-Z\|#\.\(\)"'&; ]*)/);
//if (snippet.includes("Ichthyostegalia")) alert(link[0] + '_' + link[1] + '_');
if (link && link[0] ) paramString += ' ' + link[0];
}
if (snippet.includes("extinct")) {
var extinct = snippet.match(/extinct[\s]*=[\s]*([a-zA-Z ]*)/);
if (extinct && extinct[0] ) paramString += ' ' + extinct[0];
}
if (snippet.includes("always_display")) {
var extinct = snippet.match(/always_display[\s]*=[\s]*([a-zA-Z ]*)/);
if (extinct && extinct[0] ) paramString += ' ' + extinct[0];
}
if (snippet.includes("same_as") || snippet.includes("same as") ) {
var sameas = snippet.match(/same[ _]as[\s]*=[\s]*([a-zA-Z]*)/);
if (sameas && sameas[0] ) paramString += ' ' + sameas[0];
}
if (snippet.includes("refs")) {
var refs = snippet.match(/refs[\s]*=[\s]*([a-zA-Z0-9{}| ]*)/);
var refText = 'refs=[empty]';
if (refs && refs[1] ) refText = 'refs=[...]';
paramString += ' ' + refText;
}
//paramString = paramString.replace(/\"/g, '\\\"'); // " already replaced by " in snippet
return 'title="' + paramString + '" ';
}
function getSameAs(index , sr) {
var snippet =sr.snippet; // this contains the template code
if (snippet.includes("same_as") || snippet.includes("same as") ) {
var sameas = snippet.match(/same[ _]as[\s]*=[\s]*([a-zA-Z]*)/);
if (sameas && sameas[0] )
return ' [same_as=<a href="/wiki/Template:Taxonomy/' + sameas[1] + '">' + sameas[1] + '</a>]';
}
return false;
}
function getExtinct(index , sr) {
var snippet =sr.snippet; // this contains the template code
if (snippet.includes("extinct")) {
var extinct = snippet.match(/extinct[\s]*=[\s]*([a-zA-Z ]*)/);
if (extinct && extinct[1] ) {
var value = extinct[1].toLowerCase();
if (value=="yes" || value=="true") return true;
}
}
return false;
}
function getAlwaysDisplay(index , sr) {
if (!$("#bolddisplayId").prop("checked")) return false;
var snippet =sr.snippet; // this contains the template code
if (snippet.includes("always_display")) {
var alwaysDisplay = snippet.match(/always_display[\s]*=[\s]*([a-zA-Z ]*)/);
if (alwaysDisplay && alwaysDisplay[1] ) {
var value = alwaysDisplay[1].toLowerCase();
if (value=="yes" || value=="true") return true;
}
}
if (snippet.includes("rank")) {
var rank = snippet.match(/rank[\s]*=[\s]*([a-zA-Z ]*)/);
if (rank && rank[1] ) {
var value = rank[1].toLowerCase();
if (value == 'ordo' || value == 'order' || value == 'classis' || value == 'class'
|| value == 'kingdom' || value == 'phylum' || value == 'divisio' || value == 'division'
|| value == 'familia' || value == 'family' || value == 'classis' || value == 'class'
) return true;
}
}
return false;
}
function getParent(index , sr) {
var snippet = sr.snippet; // this contains the template code
if (snippet.includes("parent")) {
//if (snippet.includes("Vaccinium")) alert(snippet);
// snippet contains "<span class=\"searchmatch\">parent=Reptiliomorpha</span>" (not with regex search)
//snippet = snippet.replace("</span>","");
var parent = snippet.match(/parent[\s]*=[\s]*([a-zA-Z\._ \/\?]*)/);
if (parent && parent[1] ) {
return parent[1];
}
}
return false;
}
function getSnippet(index , sr) {
var snippet =sr.snippet; // this contains the template code
snippet = snippet.replace('<span class=\"searchmatch\">', "");
snippet = snippet.replace("</span>","");
return snippet;
}
function getRank(index , sr) {
var snippet =sr.snippet; // this contains the template code
if (snippet.includes("rank")) {
var rank = snippet.match(/rank[\s]*=[\s]*([a-zA-Z ]*)/);
if (rank && rank[1] ) return rank[1];
}
/* if (snippet.includes("same_as") || snippet.includes("same as") ) {
var sameas = snippet.match(/same[ _]as[\s]*=[\s]*([a-zA-Z]*)/);
if (sameas && sameas[0] ) return sameas[0];
}*/
return false; //"unknown rank";
}
function formatByRank(name, rank) {
// check for genus and species; inlcude should pick up subgenus, species group, etc
if ( rank && (rank.includes("genus") || rank.includes("species")) ) {
name = '<i>' + name + '</i>';
}
return name;
}
function cleanUpAfterPreviousRuns() {
if (nRun > 1) {
//if (debug) alert ("run number = "+ nRun);
$('.taxon_identifier').remove();
}
}
///------------------------------- interactive function --------------------------------
function getTreeInteractive(taxon) {
cleanUpAfterPreviousRuns();
//taxon = prompt("Enter the parent taxon:", getDefaultTaxonName(taxon));
taxon = getTaxonName(taxon);
var output= '<br/><ul><li class="taxon_identifier" id="' + encodeID(taxon) + '-li"><b>' + taxon + '</b></li><br/></ul>';
//var output= '<br/><ul><li class="taxon_identifier" id="' + taxon + '-li"><b>' + taxon + '</b></li><br/></ul>';
var level = nInteractiveLevels; // nLevels is globally set at top
addChildrenInteractive(taxon, level , "INTERACTIVE");
renderTaxonomyDialog( output );
nRun += 1;
}
function addChildrenInteractive(taxon, level, mode, depth, taxonId) {
if (level == 0) return;
level -= 1;
depth +=1;
// perform search using API with one of jQuery's AJAX functions
//var search = 'insource:/parent[ ]*=[ ]*' + escapeSeq(taxon) + '[\\s]*/ prefix:Template:Taxonomy/';
// strict search using RegEx /search terms/
var search = 'insource:/parent[ ]*=[ ]*'; // search for parent
if ($("#search-sameas").prop("checked")) { // else search for parent or same as
// insource: /[ps]a[rm]e[n ][ta][s]*[ ]*=[ ]*Archaeplastida/ prefix:Template:Taxonomy/
search = 'insource: /[ps]a[rm]e[n _][ta][s]*[ ]*=[ ]*';
}
search += escapeSeq(taxon)
+ '[a-zA-Z0-9 \\.\\/\\?\\\s]*/' // regex expression for search - we want the name and variants
+ ' prefix:Template:Taxonomy/'; // restrict search to taxonomy templates
// looser search with "search terms"
// -- this gives 9 children for Reptilomorpha and Reptilomorpha/? instead of 9 and 2
// -- but the issue is handling the variant templates (see parent match code below)
// if ($("#search-loose").prop("checked")) {
// search = 'insource:"parent[ ]+=[ ]+' + escapeSeq(taxon) + '" prefix:Template:Taxonomy/';
// alert("loose search");
// }
// not what is wanted: the search wants to retrieve the full name, then decide how to handle it
var showParameters = true;
if ($("#params-hide").prop("checked")) showParameters = false;
var hideExtinct = false;
if ($("#extinctId").prop("checked")) hideExtinct = true;
var hideChildless = false;
if ($("#childlessId").prop("checked")) hideChildless = true;
//TODO Ass [a-zA-Z\/\?\s]*
//alert(search);
//search ="insource:/parent[ ]*=[ ]*Reptiliomorpha\\/\\?[\\s]*/ prefix:Template:Taxonomy/";
jQuery.getJSON(
mw.util.wikiScript( 'api' ),
{
'format': 'json',
'action': 'query',
'list': 'search',
'srnamespace' :10, // search in template namespace
'srlimit' : 500,
// 'srqiprofile' : 'classic',
'srsearch' : search // uses /regex/
},
function( data ) {
var output = "";
var nResults = data.query.searchinfo.totalhits;
//alert ("nResults="+nResults);
var count = 0;
if (nResults === 0) {
output = ' [no children]'; // "zero hits: " + taxon;
if (hideChildless) {
$('#'+taxonId).hide(); // hide taxon
}
else {
if (showParameters) $('#'+taxonId+' span.tree-info').append(output);
$('#'+taxonId+'-collapse').hide(); // hide collapse button
}
}
else { // so we have some results
if (debug && showParameters) $('#'+taxonId+' span.tree-info').append(" [" + nResults + "]"); // number of results; includes variants
$('#'+taxonId).append('<ul></ul>'); // add ul element to contain children
//output = '<ul>';
$.each ( data.query.search , function( index , sr ) {
var child = sr.title.replace("Template:Taxonomy/", "");
var rank = getRank(index , sr);
var extinct = getExtinct(index , sr);
var parent = getParent(index , sr);
var alwaysDisplay = getAlwaysDisplay(index , sr);
var sameAs = getSameAs(index , sr);
var titleString = ""; // alt text to display on mouse over
if (showParameters) {
//titleString = 'title="rank='+rank+'; parent='+parent+'; always_display='+alwaysDisplay+'" ';
titleString = getParameterString(index , sr);
}
if (hideExtinct && extinct) return true; // don't show extinct taxa
// select taxa to display
// the search results for Template:Taxonomy/TAXON will also contain variant templates;
// we normally (strict search) don't want to include those under base template name
if (1==1 && (!parent || parent!=taxon )) {
if (debug && parent && parent.includes("Vaccinium")) {
alert("parent not matching for child "+child+"\nparent="+parent+"\ntaxon="+taxon);
}
var accept = false; // we have a parent mismatch
if ($("#search-loose").prop("checked")) { // if loose match allowed
if (parent && parent.includes(taxon+"/")) {
accept = true; //accept variants - "taxon/variant"
var variant = ' [parent='+parent+']';
}
}
//if (!parent && sameAs) { // accept if no parent but sameas (any or =taxon)
if ( sameAs && $("#search-sameas").prop("checked")) { // accept if sameas (any or =taxon)
accept = true;
if (debug) alert('child='+child+': no parent, same_as='+sameAs);
}
if (accept == false) return true; // skip to next in each loop (equivalent of continue;
} // check parents loop
// if ($("#search-loose").prop("checked")) { // if loose match (testing)
// // can we exlude reptilomorpha/? if sister reptilomorpha
// // skip variant if element at base name exists (unreliable as requires base name before variants)
// if (child.includes("/")) {
// var value = child.split("/");
// if (value[1] && $('#'+encodeID(value[0],depth)+'-li').length ) {
// //alert('child='+child+'; value1='+value[0]);
// return true;
// }
// }
// }
// display the selected child taxa (either matched parents or allowed loose match)
count += 1;
var name = formatByRank(child, rank); // italicise if genus or species rank
if (alwaysDisplay) name = '<b>' + name + '</b>';
var childId = encodeID(child, depth, count); // + '-li';
output = '<li id="' + childId + '" class="taxon_identifier" >';
if (extinct) output += '†';
output += '<a href="/wiki/' + sr.title + '" ' + titleString + '>' + name + '</a>';
output += '<span class="tree-info">'; // span for add information
if (showParameters) {
if (rank) output += ' ['+rank+']';
if (sameAs) output += sameAs;
if (variant) output += variant;
}
if (debug) {
//output += extraText(index , sr);
//output += " [child="+child+"; parent="+parent+"; taxon="+taxon+ "]";
}
output += '</span>'; // close info span
if (level === 0 && mode=="INTERACTIVE") {
output += ' <span class="childbutton" id="' + childId + '-load" style="font-size:120%;"> ⊞ </span>'; // +/- in square ⊞/⊟ +/-/x in circle ⊕/⊖/⊗
output += ' <span class="childbutton" id="' + childId + '-collapse" style="font-size:120%;display: none;"> ⊟ </span>'; // +/- in square ⊞/⊟ +/-/x in circle ⊕/⊖/⊗
output += ' <span class="childbutton" id="' + childId + '-expand" style="font-size:120%;display: none;"> ⊞ </span>'; // +/- in square ⊞/⊟ +/-/x in circle ⊕/⊖/⊗
}
output += '</li>' ;
$('#'+taxonId+' > ul').append(output); // append child li element
// code for interactive loading, collapsing and expanding tree
if (level === 0 && mode=="INTERACTIVE") {
// load children, hide load icon, show collapse icon
$('#'+childId+'-load').click(function (e) {
e.preventDefault();
addChildrenInteractive(child, nInteractiveLevels, mode, depth , childId); // trigger new run
$(this).hide();
$('#'+childId+'-collapse').show();
});
// hide children of node; show expand icon
$('#'+childId+'-collapse').click(function (e) {
$('#'+childId+' > ul').hide();
$(this).hide();
$('#'+childId+'-expand').show();
});
// show children of node, show collapse icon
$('#'+childId+'-expand').click(function (e) {
$('#'+childId+' > ul').show();
$(this).hide();
$('#'+childId+'-collapse').show();
});
}
if (level > 0) addChildrenInteractive(child, level, mode, depth , childId);
});
output += '</ul>'; // TODO check if still used/needed
if (showParameters) {
$('#'+taxonId+' > span.tree-info').append(" [" + count + "]"); // number of results; excludes variants
}
}
} // end processing function (data)
);
} // end function addChildrenInteractive()
// ----------------- document ready - add functions to tool menu ------------------
$(document).ready( function() {
// alert("hello") // my test that the page is loading
// mw.util.addPortletLink( portletId, href, text, id, tooltip, accesskey, nextnode );
// Add a link to the toolbox
var link = mw.util.addPortletLink(
'p-tb',
'#',
mw.message('taxonomy-link').plain(),
't-prettylinkwidget',
mw.message('taxonomy-tooltip').plain(),
'/'
//'#t-whatlinkshere' // this places it at the top of the tools
);
if (debug) {
var link2 = mw.util.addPortletLink('p-tb', '#', mw.message('taxonomy-link2').plain(), 't-prettylinkwidget', mw.message('taxonomy-tooltip').plain());
}
if (ntt) {
var link3 = mw.util.addPortletLink('p-tb', '#', mw.message('ntt-link').plain(), 't-prettylinkwidget', mw.message('ntt-tooltip').plain() );
}
// Create a jQuery object for this link so that we get to use jQuery awesomeness
// like .click() for binding functions to events and methods like e.preventDefault();
$(link).click( function( e ) {
e.preventDefault(); // Avoid the browser going to '#'
//getChildren("Felidae"); // get children for prompted taxon
//getTreeList("Plantae"); // get more than one level of tree
if (nRun >1 ) {
$('.taxonomy-browser').remove(); // remove previous instances of form and output divs (prevents multiple IDs)
}
openTaxonBrowserDialog( "Plantae" );
$('#gettree').click( function( e ) {
e.preventDefault();
getTree("Plantae");
});
});
if (debug) {
$(link2).click( function( e ) {
e.preventDefault();// Avoid the browser going to '#'
//getTreeInteractive("Carnivora"); // get more than one level of tree
getTreeInteractive("Tetrapoda"); // get more than one level of tree
});
}
if (ntt) {
$(link3).click( function( e ) {
e.preventDefault();// Avoid the browser going to '#'
openCreateTaxonomyTemplateDialog( "Miodocus" );
$('#nnt-createtemplate').click( function( e ) {
e.preventDefault();
createNewTemplate("Miodocus");
});
});
}
});
});