Widget:PlaceNamesCharts: Difference between revisions
From International Robin Hood Bibliography
mNo edit summary |
m (Text replacement - "/wiki/" to "/w/") |
||
(19 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
<noinclude><div class="no-img">This widget generates charts on landing pages. It takes no parameters.</div></noinclude><includeonly><script>(function() { | <noinclude><div class="no-img">This widget generates charts on landing pages. It takes no parameters.</div></noinclude> | ||
<includeonly><script> | |||
//Timeline widget | |||
(function() { | |||
window.IRHB = window.IRHB || {}; | window.IRHB = window.IRHB || {}; | ||
Line 46: | Line 49: | ||
if (curCentury !== 0) { | if (curCentury !== 0) { | ||
var cntStr = curCentury + (curCentury !== "21" ? "th" : "st") + " Cent."; | var cntStr = curCentury + (curCentury !== "21" ? "th" : "st") + " Cent."; | ||
var cHead = "<div class=' | var cHead = "<div class='tlnCnt' id='c" + curCentury + "'><div>" + cntStr + " (" + cTotal + ")</div>"; | ||
pText += cHead + "<div>" + cText + "</div></div>"; | pText += cHead + "<div>" + cText + "</div></div>"; | ||
} | } | ||
Line 56: | Line 59: | ||
cTotal += nPages; | cTotal += nPages; | ||
var decStr = prop + "–" + String((parseInt(prop) + 9)).substring(2) + " (" + nPages + ")"; | var decStr = prop + "–" + String((parseInt(prop) + 9)).substring(2) + " (" + nPages + ")"; | ||
cText += "<div class=' | cText += "<div class='tlnDec' id='i" + prop + "'><div>" + decStr + "</div><ul>"; | ||
for (var i = 0; i < nPages; i++) { | for (var i = 0; i < nPages; i++) { | ||
cText += "<li class=' | cText += "<li class='tlnItem'><span>" + pages[prop][i].year + " – " + pages[prop][i].page + "</span><div></div></li>"; | ||
} | } | ||
cText += "</ul></div>" | cText += "</ul></div>" | ||
Line 64: | Line 67: | ||
} | } | ||
var cntStr = curCentury + (curCentury !== "21" ? "th" : "st") + " Cent."; | var cntStr = curCentury + (curCentury !== "21" ? "th" : "st") + " Cent."; | ||
var cHead = "<div class=' | var cHead = "<div class='tlnCnt' id='c" + curCentury + "'><div>" + cntStr + " (" + cTotal + ")</div>"; | ||
pText += cHead + "<div>" + cText + "</div></div>"; | pText += cHead + "<div>" + cText + "</div></div>"; | ||
elem.innerHTML = pText; | elem.innerHTML = pText; | ||
var centuries = get("tline").getElementsByClassName(" | var centuries = get("tline").getElementsByClassName("tlnCnt"); | ||
var nCnts = centuries.length; | var nCnts = centuries.length; | ||
for (var i = 0; i < nCnts; i++) { | for (var i = 0; i < nCnts; i++) { | ||
initDiv(centuries[i]); | initDiv(centuries[i]); | ||
} | } | ||
var decades = get("tline").getElementsByClassName(" | var decades = get("tline").getElementsByClassName("tlnDec"); | ||
var nDecs = decades.length; | var nDecs = decades.length; | ||
for (var i = 0; i < nDecs; i++) { | for (var i = 0; i < nDecs; i++) { | ||
initDiv(decades[i]); | initDiv(decades[i]); | ||
} | } | ||
var items = get("tline").getElementsByClassName(" | var items = get("tline").getElementsByClassName("tlnItem"); | ||
var nItems = items.length; | var nItems = items.length; | ||
for (var i = 0; i < nItems; i++) { | for (var i = 0; i < nItems; i++) { | ||
Line 89: | Line 92: | ||
t.getDecade = function(year) { | t.prepareItemCard = function (event) { | ||
var t = event.target; | |||
if (t.tagName != "A") { | |||
var tc = event.currentTarget; | |||
var item = tc.firstChild.innerHTML; | |||
var card = tc.firstChild.nextSibling; | |||
if (card.innerHTML == "") { | |||
var start = item.indexOf(" – ") + " – ".length; | |||
item = encodeURIComponent(item.substring(start)); | |||
var qry = "/w/api.php?action=ask&query=[[" + item + "]]|?Geopoint|?AdministrativeDivision|?FirstRecord|?Image|?PlaceNamesInterest|?PlaceNamesStatus|?PlaceNamesType|?Vicinity|?CenturyOrdinal|?Aka&format=json"; | |||
query(qry, "POST", makeItemCard); | |||
} else { | |||
card.innerHTML = ""; | |||
card.style.display = "none"; | |||
} | |||
} else { | |||
event.stopPropagation(); | |||
} | |||
}; | |||
function makeItemCard(resp) { | |||
var res = JSON.parse(resp).query.results; | |||
res = res[Object.keys(res)[0]]; | |||
var page = res.fulltext; | |||
var firstRec = res.printouts.FirstRecord; | |||
var dec = getDecade(firstRec); | |||
var itemName = firstRec + " – " + page; | |||
var decadeDiv = get("i" + dec); | |||
var lst = decadeDiv.firstChild.nextSibling; | |||
var lstItems = lst.children; | |||
var nItems = lstItems.length; | |||
for (var i = 0; i < nItems; i++) { | |||
if (lstItems[i].firstChild.innerHTML == itemName) { | |||
var card = lstItems[i].firstChild.nextSibling; | |||
var imgId = "img" + dec + "_" + i; | |||
card.innerHTML = ""; | |||
var txt = "<div class='cardText'><table class='itemCard'>"; | |||
var safePage = page.replaceAll("'", "%27"); | |||
txt += "<tr><td colspan='2'><img class='cardImg' id='" + imgId + "'></img></td></tr>"; | |||
txt += "<tr><th>Link</th><td><a href='/w/index.php/" + safePage + "'>" + page + "</a></td></tr>"; | |||
var lt = res.printouts.Geopoint[0] ? res.printouts.Geopoint[0].lat : "?"; | |||
var ln = res.printouts.Geopoint[0] ? res.printouts.Geopoint[0].lon : "?"; | |||
txt += "<tr><th>Lat.</th><td>" + lt + "</td></tr>"; | |||
txt += "<tr><th>Lon.</th><td>" + ln + "</td></tr>"; | |||
txt += "<tr><th>Adm. div.</th><td>" + res.printouts.AdministrativeDivision[0] + "</td></tr>"; | |||
var vic = res.printouts.Vicinity[0]; | |||
vic = vic.replace("''", "<i>").replace("''", "</i>"); | |||
txt += "<tr><th>Vicinity</th><td>" + vic + "</td></tr>"; | |||
txt += "<tr><th>Type</th><td>" + res.printouts.PlaceNamesType[0] + "</td></tr>"; | |||
txt += "<tr><th>Interest</th><td>" + res.printouts.PlaceNamesInterest[0] + "</td></tr>"; | |||
txt += "<tr><th>Status</th><td>" + res.printouts.PlaceNamesStatus[0] + "</td></tr>"; | |||
txt += "<tr><th>First rec.</th><td>" + res.printouts.FirstRecord[0] + "</td></tr>"; | |||
var century = res.printouts.CenturyOrdinal[0]; | |||
if (century) { | |||
txt += "<tr><th>CenturyOrdinal</th><td>" + res.printouts.CenturyOrdinal[0] + "</td></tr>"; | |||
} | |||
var aka = res.printouts.Aka; | |||
var akaTxt = ""; | |||
var nAka = aka.length; | |||
for (var i = 0; i < nAka; i++) { | |||
akaTxt += "; " + aka[i]; | |||
} | |||
akaTxt = akaTxt.replace("; ", ""); | |||
if (akaTxt !== "") { | |||
txt += "<tr><th>A.k.a.</th><td>" + akaTxt + "</td></tr></table>"; | |||
} | |||
card.innerHTML += txt; | |||
var imgName = res.printouts.Image; | |||
var img = get(imgId); | |||
if (imgName != "") { | |||
var tempImg = new Image(); | |||
tempImg.onload = function() { | |||
img.src = this.src | |||
card.style.display = "block"; | |||
}; | |||
tempImg.src = "/w/thumb.php?f=" + encodeURIComponent(res.printouts.Image) + "&w=195"; | |||
img.style.display = "block"; | |||
} else { | |||
img.style.display = "none"; | |||
card.style.display = "block"; | |||
} | |||
break; | |||
} | |||
} | |||
} | |||
function getDecade(year) { | |||
var decade = year % 10 !== 0 ? year : year - 1; | var decade = year % 10 !== 0 ? year : year - 1; | ||
decade = (Math.floor(decade / 10) * 10) + 1; | decade = (Math.floor(decade / 10) * 10) + 1; | ||
return decade; | return decade; | ||
} | } | ||
function getCentury(decade) { | |||
var century = parseInt(decade / 100) + 1; | var century = parseInt(decade / 100) + 1; | ||
return century; | return century; | ||
} | } | ||
var | |||
function query(qry, method, callBack) { | |||
var xmlhttp = new XMLHttpRequest(); | |||
xmlhttp.onreadystatechange = function() { | |||
if (xmlhttp.readyState == XMLHttpRequest.DONE ) { | |||
if (xmlhttp.status == 200) { | |||
callBack(xmlhttp.responseText); | |||
} else if (xmlhttp.status == 400) { | |||
say("An error occurred; closing down!"); | |||
} | |||
else { | |||
callBack(xmlhttp.responseText); | |||
} | |||
} | |||
}; | |||
xmlhttp.open(method, qry, true); | |||
xmlhttp.send(); | |||
} | |||
Line 140: | Line 249: | ||
//Charts | |||
(function() { | (function() { | ||
Line 177: | Line 287: | ||
"display": true, | "display": true, | ||
"fontSize": 28, | "fontSize": 28, | ||
"fontFamily": "' | "fontFamily": "'OpenSansCondensed-Light', Helvetica, Arial, sans-serif", | ||
"fontColor": '# | "fontColor": '#800000', | ||
"fontStyle": "bold", | "fontStyle": "bold", | ||
"padding": 20 | "padding": 20 | ||
Line 211: | Line 321: | ||
makeChart( | makeChart( | ||
tc, "typeCvs", cType, "Type", | tc, "typeCvs", cType, "Type", | ||
{"Public house": 0, "Monument": 0, "Building": 0, "Church": 0, | {"Public house": 0, "Monument": 0, "Building": 0, "Church/monastery": 0, | ||
"Prehistoric site": 0, "Natural feature": 0, "Settlement": 0, "Area": 0, | "Prehistoric site": 0, "Natural feature": 0, "Settlement": 0, "Area": 0, | ||
"Thoroughfare": 0, "Transport": 0, "Establishment": 0, "Association": 0, | "Thoroughfare": 0, "Transport": 0, "Establishment": 0, "Association": 0, | ||
Line 247: | Line 357: | ||
//Non-empty query result in paragraph, if no paragraph, no timeline: | //Non-empty query result in paragraph, if no paragraph, no timeline: | ||
if (tc.firstElementChild) { | if (tc.firstElementChild) { | ||
t.create(tc, t.prepareItemCard); | |||
} else { | } else { | ||
get("sChart").style.paddingBottom = "6em"; | get("sChart").style.paddingBottom = "6em"; | ||
Line 281: | Line 391: | ||
} | } | ||
if (lbl === "Status") { | if (lbl === "Status") { | ||
cColrs[1] = "# | cColrs[1] = "#800000"; | ||
} | } | ||
var chrt = new Chart( get(cvsId), { | var chrt = new Chart( get(cvsId), { | ||
Line 335: | Line 445: | ||
} | } | ||
var script = document.createElement('script'); | var script = document.createElement('script'); | ||
script.type = 'text/javascript'; | script.type = 'text/javascript'; | ||
script.src = " | script.src = "/w/js/Chart.js"; | ||
script.onreadystatechange = prepareCharts; | script.onreadystatechange = prepareCharts; | ||
script.onload = prepareCharts; | script.onload = prepareCharts; | ||
document.head.appendChild(script); | document.head.appendChild(script); | ||
})();</script></includeonly> | })(); | ||
</script></includeonly> |
Latest revision as of 03:56, 6 June 2022
This widget generates charts on landing pages. It takes no parameters.