/*============================================================
= JavaScript Best Practices Codeschool =
============================================================*/
/*========== “AND” IS USEFUL IN CONTINGENT ASSIGNMENTS ==========*/
var armoryIsOpen = false;
var isKnight = true;
var weapon = armoryIsOpen && isKnight && armory.retriveSword("Claymore");
/*========== FALL-THROUGH SWITCH ALLOWS HIERARCHICAL CODE EXECUTION ==========*/
function ceremonialDagger(knight, rank) {
this.length = 8;
this.owner = knight;
switch (rank) {
case "King":
this.diamonds = 1;
case "High Constable":
this.amethyst = 2;
case "Field Marshal":
this.sapphires = 4;
case "Captain":
this.emeralds = 1;
case "Knight":
this.rubies = 6;
}
}
var kingsDagger = new ceremonialDagger("Arthur", "King");
/*========== Optimized for loop ==========*/
var list = treasureChest.necklaces;
for (var i = 0, x = treasureChest.necklaces.length; i < x; i++) {
console.log(list[i]);
};
/*========== USE A DOCUMENT FRAGMENT TO INSERT ADDITIONS ALL AT ONCE ==========*/
var list = document.getElementById("kotwList"),
kotw = ["Jenna Rangespike",
"Neric Farthing",
"Darkin Stonefield"
],
fragment = document.createDocumentFragment(),
element;
for (var i = 0, x = kotw.length; i < x; i++) {
element = document.createElement("li");
element.appendChild(document.createTextNode(kotw[i]));
fragment.appendChild(element);
}
list.appendChild(fragment);
/*========== CONSOLE.TIME LETS US COMPARE IMPLEMENTATIONS ==========*/
console.time("Time to add " + firstRegimentNewbs.length + " Knights");
console.timeEnd("Time to add " + firstRegimentNewbs.length + " Knights");
/*========== SPEED TEST CLASS ==========*/
function SpeedTest() {
this.testImplement = testImplement;
this.testParams = testParams;
this.repetitions = repetitions || 10000;
this.average = 0;
}
SpeedTest.prototype = {
startTest: function() {
var beginTime, endTime, sumTimes = 0;
for (var i = 0, x = this.repetitions; i < x; i++) {
beginTime = +new Date();
this.testImplement(this.testParams);
endTime = +new Date();
sumTimes += endTime - beginTime;
}
this.average = sumTimes / this.repetitions;
return console.log("Average execution across " +
this.repetitions + ": " +
this.average);
}
}
/*========== Error Handling ==========*/
try {
var newHallOfFame = ["Dask Frostring", "Render Tallborn"];
if (list === undefined) {
throw new ReferenceError();
}
if (list instanceof Array) === false) {
throw new TypeError();
}
list.concat(newHallOfFame);
} catch (error) {
if (error instanceof ReferenceError) {
alert('List doesn\'n exist');
}
if (error instanceof TypeError) {
alert('Alas, \"list\" exists, but is no longer an Array.\n');
}
}
/*========== Error Handling #2 ==========*/
function changeInnerHTMLByIdOrExisting(id, update, existing) {
try {
var newElement = undefined;
document.getElementById(id).innerHTML = update;
} catch (error) {
try {
var elements = document.getElementByTagName('*');
for (var i = 0, x = elements.length; i < x; i++) {
if (elements[i].innerHTML === existing) {
elements[i].innerHTML = update;
id = elements[i].id;
break;
}
if (i === x) {
throw new Error("An existing element" +
"was not found.");
}
}
} catch (error2) {
alert(error2.message + "\nCreating new text node.");
newElement = document.createTextNode(update);
}
} finally {
if (newElement !== undefined) {
console.log("Returning new" +
"text node...");
return newElement;
}
}
}
/*----- End of JavaScript Best Practices Codeschool ------*/
/*=======================================
= Decimal Numbers =
=======================================*/
function tax(price, percent) {
return parseFloat(price * percent / 100).toFixed(2);
}
typeof NaN; // number
console.log(NaN === NaN); //false
isNaN("42"); //false
function isThisActuallyANumberDontLie(data) {
return (typeof data === "number" && !isNaN(data));
}
function checkValidZip() {
var entry = document.getElementById("zip").value;
var userZip = parseInt(entry);
try {
if (isThisActuallyANumberDontLie(userZip)) {
if (userZip.toFixed(0).length === 5) {
return true;
} else {
throw new Error("Nope!");
}
} else {
throw new Error("Nope!");
}
} catch (e) {
if (e.message === "Nope!") {
alert("Please enter a valid zip, dude.");
return false;
}
// other error responses go here...
}
}
/*----- End of Decimal Numbers ------*/
/*=================================
= Namespace =
=================================*/
var HOFMASTER = {
list: ["Jar Treen", "Maximo Rarter", "Pol Grist"],
hof: document.getElementById("hof"),
fragment: document.createDocumentFragment(),
element: undefined,
displayHOF: function() {
for (var i = 0, x = this.list.length; i < x; i++) {
this.element = document.createElement("li");
this.element.appendChild(document.createTextNode(this.list[i]));
this.fragment.appendChild(this.element);
}
this.hof.appendChild(this.fragment);
}
BIOGRAPHIES: {
"Jar Treen": * some text on Jar * ,
"Maximo Rarter": * some text on Maximo * ,
"Pol Grist": * some text on Pol * ,
list: * some useful list of biography data *
unfoldBio: function(member) { * adds text from this[member] to some element *
} * etc *
}
};
/*----- End of Namespace ------*/
/*===============================
= Modules =
===============================*/
var ARMORY = (function() {
var weaponList = [ * list of weapon Objects * ];
var armorList = [ * list of armor Objects * ];
var removeWeapon = function(...) {};
var replaceWeapon = function(...) {};
var removeArmor = function(...) {};
var replaceArmor = function(...) {};
return {
makeWeaponRequest: function(...) {},
makeArmorRequest: function(...) {}
};
})();
ARMORY.makeWeaponRequest("Excalibur");
/*----- End of Modules ------*/
/*======================================
= Global imports =
======================================*/
var wartime = true;
var ARMORY = (function(war) {
var weaponList = [ * list of weapon Objects * ];
var armorList = [ * list of armor Objects * ];
var removeWeapon = function(...) {};
var replaceWeapon = function(...) {};
var removeArmor = function(...) {};
var replaceArmor = function(...) {};
return {
makeWeaponRequest: function(...) {
if (war) //let civilians have weaponry
},
makeArmorRequest: function(...) {}
};
}(wartime));
ARMORY = (function(oldNS) {
var oilBarrels = 1000;
var catapults = ["Stoneslinger",
"Rockrain",
"The Giant's Arm"
];
oldNS.assignCatapult = function(regiment) {
//hooks up a regiment with a sweet catapult
//and some oil barrels!
};
return oldNS;
})(ARMORY);
/*----- End of Global imports ------*/