User:Aarnott/Lego Bin 14
From Dungeons and Dragons Wiki
| Ghostwheelv [Expand] |
|---|
Working prototype for user boxes below:
/**
* Find the user navbox, which is identified by the id #user_navbox,
* and append an [Expand] link to the header. The [Expand] link will
* load the navbox contents dynamically when the user clicks it.
*
*/
jQuery(document).ready(function($) {
var $expandSpan = $("<span>");
$expandSpan.addClass("mw-collapsible-toggle");
var $expandLink = $("<a>",
{
text: '[Expand]',
href: '#',
click: function() {
loadUserNavboxContents();
}
}
);
$expandSpan.append($expandLink);
$("#dynamic_user_navbox th").append($expandSpan);
});
function loadUserNavboxContents() {
//Attach the spinner icon while the content loads
var $loadingSpinnerRow = $("<tr>");
var $loadingSpinnerCol = $("<td>");
$loadingSpinnerCol.attr('colSpan', "" + 3 + "");
$loadingSpinnerCol.attr('style', 'text-align:left; vertical-align:middle;');
var $loadingSpinnerImage = $("<img>");
$loadingSpinnerImage.attr('src', 'http://dnd-wiki.org/w/images/4/44/Spinner.gif');
$loadingSpinnerCol.append($loadingSpinnerImage);
$loadingSpinnerCol.append(" Loading...");
$loadingSpinnerRow.append($loadingSpinnerCol);
$("#dynamic_user_navbox").append($loadingSpinnerRow);
//The user navbox has an html data attribute called "data-author", which
//is used to store the author's name. This author name corresponds directly
//to a url for the author's fully opened navbox.
var author = $("#dynamic_user_navbox").attr('data-author');
var navboxPath = 'User:Aarnott/Lego_Bin_14/Navbox/' + author;
var navboxUrl = '/wiki/' + navboxPath;
$.get(navboxUrl)
.done(function(data) {
//The user_navbox with the full content replaces the loader navbox
var $html = $(data);
var navbox = $html.find("#user_navbox");
if(navbox.length > 0) {
$("#dynamic_user_navbox").replaceWith(navbox[0]);
} else {
//Detach the spinner
$loadingSpinnerRow.detach();
//Error condition -- no navbox found
var $noNavboxRow = $("<tr>");
var $noNavboxCol = $("<td>");
$noNavboxCol.attr('colSpan', "" + 3 + "");
$noNavboxCol.attr('style', 'text-align:left; vertical-align:middle;');
$noNavboxCol.append("No user navbox data was found. If this is your navbox, check"
+ " <a href='"+navboxUrl+"'>"+navboxPath+"<a> to see if it is"
+ " configured correctly. You can also message one of the"
+ "<a href='/w/index.php?title=Special%3AListUsers&username=&group=sysop&limit=50'>Administrators<a>"
+ " if you have any questions.");
$noNavboxRow.append($noNavboxCol);
$("#dynamic_user_navbox").append($noNavboxRow);
}
})
.fail(function(jqxhr, textStatus, error) {
var errorMessage = textStatus + ", " + error;
//Detach the spinner
$loadingSpinnerRow.detach();
//Error condition -- no navbox found
var $failNavboxRow = $("<tr>");
var $failNavboxCol = $("<td>");
$failNavboxCol.attr('colSpan', "" + 3 + "");
$failNavboxCol.attr('style', 'text-align:left; vertical-align:middle;');
$failNavboxCol.append("Failed to load the user's navbox: " + errorMessage);
$failNavboxRow.append($failNavboxCol);
$("#dynamic_user_navbox").append($failNavboxRow);
}
);
}
- I modified the NavBox to have an optional id element, which is used so I can find the User's Navbox with JQuery more easily.
- The User's Navbox is split into two parts.
- The first part is the table that will have the JQuery loading function attached. This is User:Aarnott/Lego Bin 14/Navbox/User/Loader.
- The second part generates the same User NavBox we already use. This is User:Aarnott/Lego Bin 14/Navbox/User.
- We would be replacing the Navbox/User reference in Template:Navboxes with Navbox/User/Loader and with the added JS code, it should work.
