Sitemap

function loadtoc(json) {

function getPostData() { // this functions reads all postdata from the json-feed and stores it in arrays if ("entry" in json.feed) { var numEntries = json.feed.entry.length; totalEntires = totalEntires + numEntries; totalPosts=json.feed.openSearch$totalResults.$t if(totalPosts>totalEntires) { var nextjsoncall = document.createElement('script'); nextjsoncall.type = 'text/javascript'; startindex=totalEntires+1; nextjsoncall.setAttribute("src", "/feeds/posts/summary?start-index=" + startindex + "&max-results=500&alt=json-in-script&callback=loadtoc"); tocdiv.appendChild(nextjsoncall); } // main loop gets all the entries from the feed for (var i = 0; i < numEntries; i++) { // get the entry from the feed var entry = json.feed.entry[i]; // get the posttitle from the entry var posttitle = entry.title.$t; // get the post date from the entry var postdate = entry.published.$t.substring(0,10); // get the post url from the entry var posturl; for (var k = 0; k < entry.link.length; k++) { if (entry.link[k].rel == 'alternate') { posturl = entry.link[k].href; break; } } // get the post contents from the entry // strip all html-characters, and reduce it to a summary if ("content" in entry) { var postcontent = entry.content.$t;} else if ("summary" in entry) { var postcontent = entry.summary.$t;} else var postcontent = ""; // strip off all html-tags var re = /]*>/g; postcontent = postcontent.replace(re, ""); // reduce postcontent to numchar characters, and then cut it off at the last whole word if (postcontent.length > numChars) { postcontent = postcontent.substring(0,numChars); var quoteEnd = postcontent.lastIndexOf(" "); postcontent = postcontent.substring(0,quoteEnd) + '...'; }

// get the post labels from the entry var pll = ''; if ("category" in entry) { for (var k = 0; k < entry.category.length; k++) { pll += '' + entry.category[k].term + ', '; } var l = pll.lastIndexOf(','); if (l != -1) { pll = pll.substring(0,l); } }

// add the post data to the arrays postTitle.push(posttitle); postDate.push(postdate); postUrl.push(posturl); postSum.push(postcontent); postLabels.push(pll); } } if(totalEntires==totalPosts) {tocLoaded=true;showToc();} } // end of getPostData

// start of showtoc function body // get the number of entries that are in the feed // numEntries = json.feed.entry.length;

// get the postdata from the feed getPostData();

// sort the arrays sortPosts(sortBy); tocLoaded = true; }

// filter and sort functions

function filterPosts(filter) { // This function changes the filter // and displays the filtered list of posts // document.getElementById("bp_toc").scrollTop = document.getElementById("bp_toc").offsetTop;; postFilter = filter; displayToc(postFilter); } // end filterPosts

function allPosts() { // This function resets the filter // and displays all posts

postFilter = ''; displayToc(postFilter); } // end allPosts

function sortPosts(sortBy) { // This function is a simple bubble-sort routine // that sorts the posts

function swapPosts(x,y) { // Swaps 2 ToC-entries by swapping all array-elements var temp = postTitle[x]; postTitle[x] = postTitle[y]; postTitle[y] = temp; var temp = postDate[x]; postDate[x] = postDate[y]; postDate[y] = temp; var temp = postUrl[x]; postUrl[x] = postUrl[y]; postUrl[y] = temp; var temp = postSum[x]; postSum[x] = postSum[y]; postSum[y] = temp; var temp = postLabels[x]; postLabels[x] = postLabels[y]; postLabels[y] = temp; } // end swapPosts

for (var i=0; i < postTitle.length-1; i++) { for (var j=i+1; j postTitle[j]) { swapPosts(i,j); } } if (sortBy == "titledesc") { if (postTitle[i] < postTitle[j]) { swapPosts(i,j); } } if (sortBy == "dateoldest") { if (postDate[i] > postDate[j]) { swapPosts(i,j); } } if (sortBy == "datenewest") { if (postDate[i] < postDate[j]) { swapPosts(i,j); } } } } } // end sortPosts // displaying the toc function displayToc(filter) { // this function creates a three-column table and adds it to the screen var numDisplayed = 0; var tocTable = ''; var tocHead1 = 'POST TITLE'; var tocTool1 = 'Click to sort by title'; var tocHead2 = 'POST DATE'; var tocTool2 = 'Click to sort by date'; var tocHead3 = 'LABELS'; var tocTool3 = ''; if (sortBy == "titleasc") { tocTool1 += ' (descending)'; tocTool2 += ' (newest first)'; } if (sortBy == "titledesc") { tocTool1 += ' (ascending)'; tocTool2 += ' (newest first)'; } if (sortBy == "dateoldest") { tocTool1 += ' (ascending)'; tocTool2 += ' (newest first)'; } if (sortBy == "datenewest") { tocTool1 += ' (ascending)'; tocTool2 += ' (oldest first)'; } if (postFilter != '') { tocTool3 = 'Click to show all posts'; } tocTable += '

'; tocTable += '

'; tocTable += '

'; tocTable += '

'; tocTable += '

'; tocTable += '

'; for (var i = 0; i < postTitle.length; i++) { if (filter == '') { tocTable += '

'; numDisplayed++; } else { z = postLabels[i].lastIndexOf(filter); if ( z!= -1) { tocTable += '

'; numDisplayed++; } } } tocTable += '

'; tocTable += '' + tocHead1 + ''; tocTable += ' '; tocTable += '' + tocHead2 + ''; tocTable += ' '; tocTable += '' + tocHead3 + ''; tocTable += '
' + postTitle[i] + ' ' + postDate[i] + ' ' + postLabels[i] + '
' + postTitle[i] + ' ' + postDate[i] + ' ' + postLabels[i] + '

'; if (numDisplayed == postTitle.length) { var tocNote = 'Displaying all ' + postTitle.length + ' posts
'; } else { var tocNote = 'Displaying ' + numDisplayed + ' posts labeled ''; tocNote += postFilter + '' of '+ postTitle.length + ' posts total
'; } tocdiv.innerHTML = tocNote + tocTable; } // end of displayToc

function toggleTitleSort() { if (sortBy == "titleasc") { sortBy = "titledesc"; } else { sortBy = "titleasc"; } sortPosts(sortBy); displayToc(postFilter); } // end toggleTitleSort

function toggleDateSort() { if (sortBy == "datenewest") { sortBy = "dateoldest"; } else { sortBy = "datenewest"; } sortPosts(sortBy); displayToc(postFilter); } // end toggleTitleSort

function showToc() { if (tocLoaded) { displayToc(postFilter); var toclink = document.getElementById("toclink");

} else { alert("Just wait... TOC is loading"); } }

function hideToc() { var tocdiv = document.getElementById("toc"); tocdiv.innerHTML = ''; var toclink = document.getElementById("toclink"); toclink.innerHTML = '� Show Table of Contents '; }