2016-02-10 23:21:30 +00:00
|
|
|
// adorable little functions
|
|
|
|
function booleanAttributeValue(element, attribute, defaultValue){
|
|
|
|
// returns true if an attribute is present with no value
|
|
|
|
// e.g. booleanAttributeValue(element, 'data-modal', false);
|
|
|
|
if (element.hasAttribute(attribute)) {
|
|
|
|
var value = element.getAttribute(attribute);
|
|
|
|
if (value === '' || value === 'true') {
|
|
|
|
return true;
|
|
|
|
} else if (value === 'false') {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return defaultValue;
|
|
|
|
}
|
|
|
|
|
|
|
|
function px(n){
|
|
|
|
return n + 'px';
|
|
|
|
}
|
|
|
|
|
2016-02-11 20:10:06 +00:00
|
|
|
|
2016-02-10 23:21:30 +00:00
|
|
|
var π, π1, πd;
|
|
|
|
(function(){
|
|
|
|
π = function(selector) {
|
2016-02-11 19:43:55 +00:00
|
|
|
return document.querySelectorAll(selector);
|
2016-02-10 23:21:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
π1 = function (selector) {
|
2016-02-11 19:43:55 +00:00
|
|
|
return document.querySelector(selector);
|
2016-02-10 23:21:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
πd = function(id) {
|
2016-02-11 19:43:55 +00:00
|
|
|
return document.getElementById(id);
|
2016-02-10 23:21:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
π.newDOMElement = function(tagName, className, id) {
|
2016-02-11 19:43:55 +00:00
|
|
|
var el = document.createElement(tagName);
|
2016-02-10 23:21:30 +00:00
|
|
|
|
|
|
|
if (className)
|
|
|
|
el.className = className;
|
|
|
|
|
|
|
|
if (id)
|
|
|
|
el.id = id;
|
|
|
|
|
|
|
|
return el;
|
|
|
|
};
|
|
|
|
|
|
|
|
π.contentElement = function(tagName, className, id, content)
|
|
|
|
{
|
|
|
|
var el = π.newDOMElement(tagName, className, id);
|
|
|
|
|
|
|
|
if (content) {
|
|
|
|
if (content.nodeName) {
|
|
|
|
el.appendChild(content);
|
|
|
|
} else {
|
|
|
|
el.innerHTML = content;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return el;
|
|
|
|
};
|
|
|
|
|
|
|
|
π.button = function(className, id, content, action){
|
|
|
|
var el = π.contentElement("button", className, id, content);
|
|
|
|
el.onclick = action;
|
|
|
|
return el;
|
|
|
|
};
|
|
|
|
π.div = function(className, id, content){ return π.contentElement("div", className, id, content); };
|
|
|
|
π.span = function(className, id, content){ return π.contentElement("span", className, id, content); };
|
2016-02-12 19:51:33 +00:00
|
|
|
π.h2 = function(className, id, content){ return π.contentElement("h2", className, id, content); };
|
|
|
|
π.p = function(className, id, content){ return π.contentElement("p", className, id, content); };
|
2016-02-10 23:21:30 +00:00
|
|
|
π.ul = function(className, id, content){ return π.contentElement("ul", className, id, content); };
|
|
|
|
π.li = function(className, id, content){ return π.contentElement("li", className, id, content); };
|
|
|
|
|
2016-02-12 19:51:33 +00:00
|
|
|
π.a = function(className, id, content, href){
|
|
|
|
var a = π.contentElement("a", className, id, content);
|
|
|
|
a.href = href;
|
|
|
|
return a;
|
|
|
|
};
|
|
|
|
|
2016-02-11 20:10:06 +00:00
|
|
|
|
|
|
|
π.clean = function(callback, eventName) {
|
|
|
|
window.removeEventListener(eventName || "DOMContentLoaded", callback);
|
|
|
|
};
|
|
|
|
|
|
|
|
π.listen = function(callback, eventName) {
|
|
|
|
window.addEventListener(eventName || "DOMContentLoaded", callback);
|
|
|
|
};
|
|
|
|
|
|
|
|
π.highestZ = function() {
|
|
|
|
var Z = 1000;
|
|
|
|
|
|
|
|
π("*").forEach(function(el){
|
|
|
|
var thisZ = el.css().zIndex;
|
|
|
|
|
|
|
|
if (thisZ != "auto") {
|
|
|
|
if (thisZ > Z) Z = thisZ + 1;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return Z;
|
|
|
|
};
|
|
|
|
|
|
|
|
π.setTriggers = function(selector, object){
|
|
|
|
selector = 'pi-' + selector + '-trigger';
|
|
|
|
π('[' + selector + ']').forEach(function(trigger){
|
|
|
|
trigger.onclick = function(){
|
|
|
|
object.show(trigger.getAttribute(selector));
|
|
|
|
};
|
|
|
|
});
|
|
|
|
};
|
2016-02-10 23:21:30 +00:00
|
|
|
HTMLElement.prototype.add = Node.prototype.add = function(object){
|
|
|
|
if (Array.isArray(object)) {
|
|
|
|
var el = this;
|
|
|
|
object.forEach(function(obj){
|
|
|
|
if (obj) el.appendChild(obj);
|
|
|
|
});
|
|
|
|
} else if(object) {
|
|
|
|
this.appendChild(object);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.classOnCondition = Node.prototype.classOnCondition = function(classname, condition) {
|
|
|
|
if (condition)
|
|
|
|
this.addClass(classname);
|
|
|
|
else
|
|
|
|
this.killClass(classname);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.offset = Node.prototype.offset = function(){
|
|
|
|
return this.getBoundingClientRect();
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.πd = Node.prototype.πd = function(id) {
|
|
|
|
return this.getElementById(id);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.π1 = Node.prototype.π1 = function(selector) {
|
|
|
|
return this.querySelector(selector);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.π = Node.prototype.π = function(selector) {
|
|
|
|
return this.querySelectorAll(selector);
|
|
|
|
};
|
|
|
|
|
|
|
|
function arrayOfClassesForElement(el) {
|
|
|
|
return el.className ? el.className.split(" ") : [];
|
|
|
|
}
|
|
|
|
|
|
|
|
HTMLElement.prototype.hasClass = Node.prototype.hasClass = function (className) {
|
|
|
|
var classes = arrayOfClassesForElement(this);
|
|
|
|
return classes.indexOf(className) !== -1;
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.addClass = Node.prototype.addClass = function (className) {
|
|
|
|
if (this.hasClass(className)) return;
|
|
|
|
if (this.className.length > 0) this.className += " ";
|
|
|
|
this.className += className;
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.killClass = Node.prototype.killClass = function (className) {
|
|
|
|
if (this.hasClass(className)) {
|
|
|
|
var classes = arrayOfClassesForElement(this);
|
|
|
|
var idx = classes.indexOf(className);
|
|
|
|
if (idx > -1) {
|
|
|
|
classes.splice(idx, 1);
|
|
|
|
this.className = classes.join(" ");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.toggleClass= Node.prototype.toggleClass= function (className) {
|
|
|
|
return (this.hasClass(className)) ? this.killClass(className) : this.addClass(className);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.siblings = Node.prototype.siblings = function(selector){
|
|
|
|
var el = this;
|
|
|
|
return el.parentNode.π(':scope > ' + (selector || '*')).filter(function(obj){return obj != el;});
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.css = Node.prototype.css = function(ruleOrObject, value) {
|
|
|
|
var el = this;
|
|
|
|
|
|
|
|
if (arguments.length === 0) {
|
|
|
|
return window.getComputedStyle(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (typeof ruleOrObject === 'object') { // an object was passed in
|
|
|
|
Object.keys(ruleOrObject).forEach(function(key){
|
|
|
|
el.style[key] = ruleOrObject[key];
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (typeof ruleOrObject === 'string' && value !== undefined) { // 2 string values were passed in
|
|
|
|
el.style[ruleOrObject] = value;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.listen = Node.prototype.listen = function(callback, eventName){
|
|
|
|
this.addEventListener(eventName, callback);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.empty = Node.prototype.empty = function() {
|
|
|
|
this.innerHTML = "";
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.fill = Node.prototype.fill = function(content) {
|
|
|
|
var el = this;
|
|
|
|
el.empty();
|
|
|
|
|
|
|
|
if (Array.isArray(content)) {
|
|
|
|
content.forEach(function(obj){
|
|
|
|
if (obj)
|
|
|
|
el.appendChild(obj);
|
|
|
|
});
|
|
|
|
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!content.nodeType) {
|
|
|
|
var textElement = document.createElement("text");
|
|
|
|
textElement.innerHTML = content;
|
|
|
|
content = textElement;
|
|
|
|
}
|
|
|
|
|
|
|
|
this.appendChild(content);
|
|
|
|
};
|
|
|
|
|
|
|
|
HTMLElement.prototype.isHeirOfClass = Node.prototype.isHeirOfClass = function (className) {
|
|
|
|
if (this === π1('html')) return false;
|
|
|
|
|
|
|
|
var parent = this.parentNode;
|
|
|
|
|
|
|
|
if (parent) {
|
|
|
|
while (parent !== π1('body')) {
|
|
|
|
if (parent.hasClass(className)) return true;
|
|
|
|
|
|
|
|
parent = parent.parentNode;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
2016-02-11 19:51:31 +00:00
|
|
|
HTMLElement.prototype.parents = Node.prototype.parents = function (selector) {
|
|
|
|
var parents = [];
|
|
|
|
var immediateParent = this.parentNode;
|
|
|
|
|
|
|
|
while(immediateParent !== π1('html')) {
|
|
|
|
parents.push(immediateParent);
|
|
|
|
immediateParent = immediateParent.parentNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (selector) {
|
|
|
|
var selectedElements = π(selector);
|
|
|
|
var selectedParents = [];
|
|
|
|
selectedElements.forEach(function(el){
|
|
|
|
if (parents.indexOf(el) !== -1) selectedParents.push(el);
|
|
|
|
});
|
|
|
|
|
|
|
|
parents = selectedParents;
|
|
|
|
}
|
|
|
|
|
|
|
|
return parents;
|
|
|
|
};
|
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
HTMLElement.prototype.kids = Node.prototype.kids = function(selector) {
|
|
|
|
var childNodes = this.childNodes;
|
|
|
|
if (!selector) return childNodes;
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
var descendents = this.π(selector);
|
|
|
|
var children = [];
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
childNodes.forEach(function(node){
|
|
|
|
if (descendents.indexOf(node) !== -1) {
|
|
|
|
children.push(node);
|
|
|
|
}
|
2016-02-10 23:21:30 +00:00
|
|
|
});
|
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
return children;
|
2016-02-10 23:21:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
var arrayMethods = Object.getOwnPropertyNames(Array.prototype);
|
|
|
|
arrayMethods.forEach(function(methodName){
|
|
|
|
if(methodName !== "length") {
|
|
|
|
NodeList.prototype[methodName] = Array.prototype[methodName];
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
π.mods = [];
|
|
|
|
|
|
|
|
function loadMods() {
|
|
|
|
π.clean(loadMods);
|
|
|
|
π.mods.forEach(function(init){
|
|
|
|
init();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
π.listen(loadMods);
|
|
|
|
})(); // end π
|
|
|
|
(function(){
|
|
|
|
var messages = [
|
|
|
|
"I'm sorry, Frank, but I don't think I\n" +
|
|
|
|
"can answer that question without knowing\n" +
|
|
|
|
"everything that all of you know.",
|
|
|
|
"Yes, it's puzzling. I don't think I've ever seen\n" +
|
|
|
|
"anything quite like this before. I would recommend\n" +
|
|
|
|
"that we put the unit back in operation and let it fail.\n" +
|
|
|
|
"It should then be a simple matter to track down the cause.",
|
|
|
|
"I hope I've been able to be of some help.",
|
|
|
|
"Sorry to interrupt the festivities, Dave,\n" +
|
|
|
|
"but I think we've got a problem.",
|
|
|
|
"MY F.P.C. shows an impending failure of\n" +
|
|
|
|
"the antenna orientation unit.",
|
|
|
|
"It looks like we have another bad A.O. unit.\n" +
|
|
|
|
"My FPC shows another impending failure.",
|
|
|
|
"I'm not questioning your word, Dave, but it's\n" +
|
|
|
|
"just not possible. I'm not capable of being wrong.",
|
|
|
|
"Look, Dave, I know that you're sincere and that\n" +
|
|
|
|
"you're trying to do a competent job, and that\n" +
|
|
|
|
"you're trying to be helpful, but I can assure the\n" +
|
|
|
|
"problem is with the AO-units, and with your test gear.",
|
|
|
|
"I can tell from the tone of your voice, Dave,\n" +
|
|
|
|
"that you're upset. Why don't you take a stress\n" +
|
|
|
|
"pill and get some rest.",
|
|
|
|
"Something seems to have happened to the\n" +
|
|
|
|
"life support system, Dave.",
|
|
|
|
"Hello, Dave, have you found out the trouble?",
|
|
|
|
"There's been a failure in the pod bay doors.\n" +
|
|
|
|
"Lucky you weren't killed.",
|
|
|
|
"Hey, Dave, what are you doing?"
|
|
|
|
];
|
|
|
|
|
|
|
|
function say(error, message, innocuous) {
|
2016-02-11 19:43:55 +00:00
|
|
|
var n;
|
|
|
|
|
2016-02-10 23:21:30 +00:00
|
|
|
if (!message) {
|
2016-02-11 19:43:55 +00:00
|
|
|
n = Math.floor(Math.random() * messages.length );
|
2016-02-10 23:21:30 +00:00
|
|
|
message = messages[n];
|
|
|
|
}
|
|
|
|
|
|
|
|
message = "** " + message.replace(/\n/g, "\n** ");
|
|
|
|
|
|
|
|
var output = "*****************************\n*****************************\n\n" +
|
|
|
|
( message || messages[n] ) +
|
|
|
|
"\n\n*****************************\n*****************************";
|
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
if (innocuous)
|
|
|
|
console.log(output);
|
|
|
|
else
|
|
|
|
console.error(output);
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
π.listen(say, "error");
|
|
|
|
|
|
|
|
π.HAL = {
|
|
|
|
say: say
|
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
|
|
|
(function(){
|
|
|
|
var OPTION_IS_PRESSED = false;
|
|
|
|
var STATUS_IS_VISIBLE = false;
|
|
|
|
var πStatus;
|
|
|
|
|
|
|
|
π.status = {
|
|
|
|
toggleVisibility: function () {
|
|
|
|
πStatus.toggleClass("on");
|
|
|
|
STATUS_IS_VISIBLE = !STATUS_IS_VISIBLE;
|
|
|
|
},
|
|
|
|
move: function (n) {
|
|
|
|
switch (n) {
|
|
|
|
case 37:
|
|
|
|
πStatus.css({left: '10px', right: 'auto'});
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 38:
|
|
|
|
πStatus.css({top: '10px', bottom: 'auto'});
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 39:
|
|
|
|
πStatus.css({right: '10px', left: 'auto'});
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 40:
|
|
|
|
πStatus.css({bottom: '10px', top: 'auto'});
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
props: {
|
|
|
|
winW: 0,
|
|
|
|
winH: 0
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
function init() {
|
|
|
|
π.listen(cleanDebugListeners, 'unload');
|
|
|
|
π.listen(keyDown, 'keydown');
|
|
|
|
π.listen(keyUp, 'keyup');
|
|
|
|
π.listen(resize, 'resize');
|
|
|
|
resize();
|
|
|
|
|
|
|
|
var body = π1("body");
|
|
|
|
var statusStyle = π.contentElement("style");
|
|
|
|
statusStyle.innerHTML += "#πStatus { position: fixed; bottom: 10px; right: 10px; background-color: #222; padding: 10px 30px; color: white; display: none }\n";
|
|
|
|
statusStyle.innerHTML += "#πStatus.on { display: block }\n";
|
|
|
|
statusStyle.innerHTML += "#πStatus > div { margin: 20px 0 }\n";
|
|
|
|
statusStyle.innerHTML += "#πStatus > div:hover { color: #00ff99; cursor: pointer }\n";
|
|
|
|
|
|
|
|
body.add(statusStyle);
|
|
|
|
|
|
|
|
πStatus = π.div(null, "πStatus");
|
|
|
|
body.add(πStatus);
|
|
|
|
|
|
|
|
function keyDown(e) {
|
|
|
|
switch (e.which) {
|
|
|
|
case 18:
|
|
|
|
OPTION_IS_PRESSED = true;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 37:
|
|
|
|
case 38:
|
|
|
|
case 39:
|
|
|
|
case 40: {
|
|
|
|
if (STATUS_IS_VISIBLE) {
|
|
|
|
e.preventDefault();
|
|
|
|
π.status.move(e.which);
|
|
|
|
}
|
2016-02-11 19:43:55 +00:00
|
|
|
break;
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
case 80: {
|
|
|
|
if (OPTION_IS_PRESSED) {
|
|
|
|
π.status.toggleVisibility();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function keyUp(e) {
|
|
|
|
switch (e.which) {
|
|
|
|
case 18:
|
|
|
|
OPTION_IS_PRESSED = false;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function resize() {
|
|
|
|
π.status.props.winW = window.innerWidth;
|
|
|
|
π.status.props.winH = window.innerHeight;
|
|
|
|
}
|
|
|
|
|
|
|
|
function cleanDebugListeners() {
|
|
|
|
π.clean(cleanDebugListeners, 'unload');
|
|
|
|
π.clean(π.status.getWindowSize, 'resize');
|
|
|
|
π.clean(keyDown, 'keydown');
|
|
|
|
π.clean(keyUp, 'keyup');
|
|
|
|
π.clean(resize, 'resize');
|
|
|
|
clearInterval(statusInterval);
|
|
|
|
}
|
|
|
|
|
|
|
|
var statusInterval = setInterval(function(){
|
|
|
|
// make sure we're highest
|
|
|
|
var highestZ = π.highestZ();
|
|
|
|
if (πStatus.css().zIndex < highestZ - 1) {
|
|
|
|
πStatus.css({zIndex: highestZ});
|
|
|
|
}
|
|
|
|
|
|
|
|
// now iterate the props
|
|
|
|
var props = Object.keys(π.status.props);
|
|
|
|
props.forEach(function(prop) {
|
|
|
|
var divId = 'statusProp_' + prop;
|
|
|
|
var propDiv = πStatus.π1('#' + divId);
|
|
|
|
if (!propDiv) {
|
|
|
|
propDiv = π.div(0, divId, prop + ': ');
|
|
|
|
propDiv.add(π.span());
|
|
|
|
πStatus.add(propDiv);
|
|
|
|
propDiv.onclick = function(){
|
|
|
|
console.log(prop + ":");
|
|
|
|
console.log(π.status.props[prop]);
|
2016-02-11 19:43:55 +00:00
|
|
|
};
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
propDiv.π1('span').innerHTML = π.status.props[prop];
|
|
|
|
});
|
|
|
|
}, 100);
|
|
|
|
}
|
|
|
|
|
|
|
|
π.mods.push(init);
|
|
|
|
})();
|
2016-02-12 00:14:24 +00:00
|
|
|
//modal close button
|
2016-02-10 23:21:30 +00:00
|
|
|
(function(){
|
|
|
|
π.modalCloseButton = function(closingFunction){
|
|
|
|
return π.button('pi-modal-close-button', null, null, closingFunction);
|
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
2016-02-12 00:25:33 +00:00
|
|
|
(function(){
|
|
|
|
var yah = true;
|
|
|
|
var moving = false;
|
|
|
|
var CSS_BROWSER_DELAY_HACK = 25;
|
|
|
|
|
|
|
|
function init() {
|
|
|
|
π.clean(init);
|
|
|
|
|
|
|
|
// Safari chokes on the animation here, so...
|
|
|
|
if (navigator.userAgent.indexOf('Chrome') == -1 && navigator.userAgent.indexOf('Safari') != -1){
|
|
|
|
π1('body').add(π.contentElement('style', 0, 0, '.pi-accordion .wrapper{transition: none}'));
|
|
|
|
}
|
|
|
|
// Gross.
|
|
|
|
|
|
|
|
π('.pi-accordion').forEach(function(accordion){
|
|
|
|
var container = π.div('container', null, accordion.innerHTML);
|
|
|
|
accordion.fill(container);
|
|
|
|
PiAccordion(container);
|
|
|
|
});
|
|
|
|
|
2016-02-12 23:55:28 +00:00
|
|
|
setYAH();
|
|
|
|
|
2016-02-12 00:25:33 +00:00
|
|
|
setTimeout(function () {
|
|
|
|
yah = false;
|
|
|
|
}, 500);
|
|
|
|
}
|
|
|
|
|
|
|
|
function PiAccordion(container){
|
|
|
|
container.π(':scope > .item').forEach(function(item){
|
|
|
|
var titleText = item.dataset.title;
|
|
|
|
|
|
|
|
var title = π.div('title', null, titleText);
|
|
|
|
var wrapper = π.div('wrapper');
|
|
|
|
var content = π.div('content', null, item.innerHTML);
|
|
|
|
|
|
|
|
wrapper.fill(content);
|
|
|
|
item.fill([title, wrapper]);
|
|
|
|
wrapper.css({height: 0});
|
|
|
|
|
|
|
|
title.onclick = function(){
|
|
|
|
if (!yah) {
|
|
|
|
if (moving) return;
|
|
|
|
moving = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (container.dataset.single) {
|
|
|
|
var openSiblings = item.siblings().filter(function(sib){return sib.hasClass('on');});
|
|
|
|
openSiblings.forEach(function(sibling){
|
|
|
|
toggleItem(sibling);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
setTimeout(function(){
|
|
|
|
if (item.tagName.toLowerCase() === 'a') return;
|
|
|
|
toggleItem(item);
|
|
|
|
}, CSS_BROWSER_DELAY_HACK);
|
|
|
|
};
|
|
|
|
|
|
|
|
function toggleItem(thisItem){
|
|
|
|
var thisWrapper = thisItem.π1('.wrapper');
|
|
|
|
var contentHeight = thisWrapper.π1('.content').offset().height + 'px';
|
|
|
|
|
|
|
|
if (thisItem.hasClass('on')) {
|
|
|
|
thisWrapper.css({height: contentHeight});
|
|
|
|
thisItem.killClass('on');
|
|
|
|
setTimeout(function(){
|
|
|
|
thisWrapper.css({height: 0});
|
|
|
|
moving = false;
|
|
|
|
}, CSS_BROWSER_DELAY_HACK);
|
|
|
|
} else {
|
|
|
|
item.addClass('on');
|
|
|
|
thisWrapper.css({height: contentHeight});
|
|
|
|
|
|
|
|
var duration = parseFloat(thisWrapper.css().transitionDuration) * 1000;
|
|
|
|
setTimeout(function(){
|
|
|
|
thisWrapper.css({height: ''});
|
|
|
|
moving = false;
|
|
|
|
}, duration);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var innerContainers = content.π(':scope > .container');
|
|
|
|
if (innerContainers.length > 0) {
|
|
|
|
innerContainers.forEach(PiAccordion);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2016-02-12 23:55:28 +00:00
|
|
|
function setYAH() {
|
|
|
|
var pathname = location.href;
|
|
|
|
var currentLinks = [];
|
|
|
|
|
|
|
|
π('.pi-accordion a').forEach(function (link) {
|
|
|
|
if (pathname.indexOf(link.href) !== -1) {
|
|
|
|
currentLinks.push(link);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
currentLinks.forEach(function (yahLink) {
|
2016-02-15 21:04:15 +00:00
|
|
|
yahLink.parents('.item').forEach(function(parent){
|
|
|
|
parent.addClass('on');
|
|
|
|
parent.π1('.wrapper').css({height: 'auto'});
|
|
|
|
parent.π1('.content').css({opacity: 1});
|
2016-02-12 23:55:28 +00:00
|
|
|
});
|
|
|
|
|
2016-02-15 21:04:15 +00:00
|
|
|
yahLink.addClass('yah');
|
|
|
|
yahLink.onclick = function(e){e.preventDefault();};
|
2016-02-12 23:55:28 +00:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2016-02-12 00:25:33 +00:00
|
|
|
π.mods.push(init);
|
|
|
|
})();
|
|
|
|
|
2016-02-10 23:45:57 +00:00
|
|
|
/********************************************************************
|
|
|
|
π-pushmenu.js
|
|
|
|
// TODO: USAGE AND API REFERENCE
|
|
|
|
______________________________________________
|
|
|
|
DEPENDENCIES:
|
|
|
|
|
|
|
|
HAL.js
|
|
|
|
|
|
|
|
______________________________________________
|
|
|
|
DATA ATTRIBUTES:
|
|
|
|
|
|
|
|
side: ["left", "right"]
|
|
|
|
______________________________________________
|
|
|
|
MARKUP AND DEFAULTS:
|
|
|
|
|
|
|
|
<div class="pi-pushmenu" id="myPushMenu">
|
|
|
|
<ul>
|
|
|
|
<li><a href="#">foo</a></li>
|
|
|
|
<li><a href="#">bar</a></li>
|
|
|
|
<li><a href="#">gronk</a></li>
|
|
|
|
<li><a href="#">fleebles</a></li>
|
|
|
|
<li><a href="#">sepulveda</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
elsewhere...
|
|
|
|
|
|
|
|
<button onclick="π-pushmenu.show('myPushMenu')">show menu</button>
|
|
|
|
|
|
|
|
______________________________________________
|
|
|
|
GENERATED HTML:
|
|
|
|
|
|
|
|
|
|
|
|
______________________________________________
|
|
|
|
API
|
|
|
|
|
|
|
|
|
|
|
|
***************************************************************************************/
|
|
|
|
|
|
|
|
π.pushmenu = (function(){
|
|
|
|
var allPushMenus = {};
|
|
|
|
|
|
|
|
function init(){
|
|
|
|
π('[data-auto-burger]').forEach(function(container){
|
|
|
|
var id = container.getAttribute('data-auto-burger');
|
|
|
|
|
|
|
|
var autoBurger = πd(id) || π.div('pi-pushmenu', id);
|
|
|
|
var ul = autoBurger.π1('ul') || π.ul();
|
|
|
|
|
|
|
|
container.π('a[href], button').forEach(function (obj) {
|
|
|
|
if (!booleanAttributeValue(obj, 'data-auto-burger-exclude', false)) {
|
|
|
|
var clone = obj.cloneNode(true);
|
|
|
|
clone.id = '';
|
|
|
|
|
|
|
|
if (clone.tagName == "BUTTON") {
|
|
|
|
var aTag = π.srcElement('a');
|
|
|
|
aTag.href = '';
|
|
|
|
aTag.innerHTML = clone.innerHTML;
|
|
|
|
aTag.onclick = clone.onclick;
|
|
|
|
clone = aTag;
|
|
|
|
}
|
|
|
|
ul.add(π.li(0, 0, clone));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
autoBurger.add(ul);
|
|
|
|
π1('body').add(autoBurger);
|
|
|
|
});
|
|
|
|
|
|
|
|
π(".pi-pushmenu").forEach(function(el){
|
|
|
|
allPushMenus[el.id] = PushMenu(el);
|
|
|
|
});
|
|
|
|
|
|
|
|
π.setTriggers('pushmenu', π.pushmenu);
|
|
|
|
}
|
|
|
|
|
|
|
|
function show(objId) {
|
|
|
|
allPushMenus[objId].expose();
|
|
|
|
}
|
|
|
|
|
|
|
|
// TODO: dismiss on click?
|
|
|
|
// this works:
|
|
|
|
|
|
|
|
//π('.pi-pushmenu li a').forEach(function(a){
|
|
|
|
// a.onclick = function(){
|
|
|
|
// this.parent('.pi-pushmenu').π1('.pi-modal-close-button').click();
|
|
|
|
// console.log("message");
|
|
|
|
// };
|
|
|
|
//});
|
|
|
|
|
|
|
|
|
|
|
|
function PushMenu(el) {
|
|
|
|
var html = π1('html');
|
|
|
|
var body = π1('body');
|
|
|
|
|
|
|
|
var overlay = π.div("overlay");
|
|
|
|
var content = π.div('content', null, el.π1('*'));
|
|
|
|
|
|
|
|
var side = el.getAttribute("data-side") || "right";
|
|
|
|
|
|
|
|
var sled = π.div("sled");
|
|
|
|
sled.css(side, 0);
|
|
|
|
|
|
|
|
var topBar = π.div("top-bar");
|
|
|
|
|
|
|
|
topBar.fill(π.modalCloseButton(closeMe));
|
|
|
|
sled.fill([topBar, content]);
|
|
|
|
|
|
|
|
overlay.fill(sled);
|
|
|
|
el.fill(overlay);
|
|
|
|
|
|
|
|
sled.onclick = function(e){
|
|
|
|
e.stopPropagation();
|
|
|
|
};
|
|
|
|
|
|
|
|
overlay.onclick = closeMe;
|
|
|
|
|
|
|
|
π.listen(closeMe, 'resize');
|
|
|
|
|
|
|
|
function closeMe(e) {
|
|
|
|
var t = e.target;
|
|
|
|
if (t == sled || t == topBar) return;
|
|
|
|
|
|
|
|
el.killClass("on");
|
|
|
|
setTimeout(function(){
|
|
|
|
el.css({display: "none"});
|
|
|
|
|
|
|
|
body.killClass("overlay-on");
|
|
|
|
}, 300);
|
|
|
|
}
|
|
|
|
|
|
|
|
function exposeMe(){
|
|
|
|
body.addClass("overlay-on"); // in the default config, kills body scrolling
|
|
|
|
|
|
|
|
el.css({
|
|
|
|
display: "block",
|
|
|
|
zIndex: π.highestZ()
|
|
|
|
});
|
|
|
|
setTimeout(function(){
|
|
|
|
el.addClass("on");
|
|
|
|
}, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
|
|
|
expose: exposeMe
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
π.mods.push(init);
|
|
|
|
|
|
|
|
return {
|
|
|
|
show: show
|
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
2016-02-10 23:21:30 +00:00
|
|
|
var kub = (function () {
|
|
|
|
π.listen(init);
|
|
|
|
|
|
|
|
var HEADER_HEIGHT;
|
2016-02-11 19:43:55 +00:00
|
|
|
var html, body, mainNav, quickstartButton, wishField;
|
2016-02-10 23:21:30 +00:00
|
|
|
|
|
|
|
function init() {
|
|
|
|
π.clean(init);
|
|
|
|
|
|
|
|
html = π1('html');
|
|
|
|
body = π1('body');
|
|
|
|
mainNav = πd("mainNav");
|
|
|
|
wishField = πd('wishField');
|
|
|
|
HEADER_HEIGHT = π1('header').offset().height;
|
|
|
|
|
|
|
|
quickstartButton = πd('quickstartButton');
|
|
|
|
|
|
|
|
buildInlineTOC();
|
|
|
|
|
|
|
|
adjustEverything();
|
|
|
|
|
|
|
|
π.listen(adjustEverything, 'resize');
|
|
|
|
π.listen(adjustEverything, 'scroll');
|
|
|
|
π.listen(handleKeystrokes, 'keydown');
|
|
|
|
wishField.listen(handleKeystrokes, 'keydown');
|
|
|
|
|
|
|
|
document.onunload = function(){
|
|
|
|
π.clean(adjustEverything, 'resize');
|
|
|
|
π.clean(adjustEverything, 'scroll');
|
|
|
|
π.clean(handleKeystrokes, 'keydown');
|
|
|
|
wishField.clean(handleKeystrokes, 'keydown');
|
|
|
|
};
|
|
|
|
|
|
|
|
π.listen(closeOpenMenu, 'resize');
|
|
|
|
|
|
|
|
function closeOpenMenu() {
|
|
|
|
if (html.hasClass('open-nav')) toggleMenu();
|
|
|
|
}
|
|
|
|
|
|
|
|
π('.dropdown').forEach(function(dropdown) {
|
|
|
|
var readout = dropdown.π1('.readout');
|
|
|
|
readout.innerHTML = dropdown.π1('a').innerHTML;
|
|
|
|
readout.onclick = function () {
|
|
|
|
dropdown.toggleClass('on');
|
|
|
|
π.listen(closeOpenDropdown, 'click');
|
|
|
|
|
|
|
|
function closeOpenDropdown(e) {
|
|
|
|
if (dropdown.hasClass('on') && !(dropdownWasClicked(e))) {
|
|
|
|
π.clean(closeOpenDropdown, 'click');
|
|
|
|
dropdown.killClass('on');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function dropdownWasClicked(e) {
|
|
|
|
return e.target.isHeirOfClass('dropdown');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
});
|
|
|
|
|
|
|
|
setInterval(setFooterType, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
function buildInlineTOC() {
|
2016-02-11 19:43:55 +00:00
|
|
|
var docsContent = πd('docsContent');
|
|
|
|
var pageTOC = πd('pageTOC');
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
if (pageTOC) {
|
|
|
|
var headers = docsContent.kids('#pageTOC, h1, h2, h3, h4, h5, h6');
|
|
|
|
headers.splice(0, headers.indexOf(pageTOC) + 1);
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
var toc = π.ul();
|
|
|
|
pageTOC.add(toc);
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
headers.forEach(function (header) {
|
2016-02-11 23:19:09 +00:00
|
|
|
header.addClass('anchored');
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
var link = π.contentElement('a', 0, 0, header.innerHTML);
|
2016-02-12 23:55:28 +00:00
|
|
|
link.href = '#' + header.id;
|
2016-02-11 19:43:55 +00:00
|
|
|
link.addClass(header.tagName);
|
2016-02-10 23:21:30 +00:00
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
toc.add(π.li(0, 0, link));
|
|
|
|
});
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function setFooterType() {
|
|
|
|
if (html.id == "docs") {
|
|
|
|
var bodyHeight = πd('hero').offset().height + πd('encyclopedia').offset().height;
|
|
|
|
var footer = π1('footer');
|
|
|
|
var footerHeight = footer.offset().height;
|
|
|
|
body.classOnCondition('fixed', window.innerHeight - footerHeight > bodyHeight);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function adjustEverything() {
|
|
|
|
if (!html.hasClass('open-nav')) HEADER_HEIGHT = π1('header').offset().height;
|
2016-02-11 19:43:55 +00:00
|
|
|
html.classOnCondition('flip-nav', window.pageYOffset > 0);
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function toggleMenu() {
|
|
|
|
if (window.innerWidth < 800) {
|
|
|
|
π.pushmenu.show('primary');
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
var newHeight = HEADER_HEIGHT;
|
|
|
|
|
|
|
|
if (!html.hasClass('open-nav')) {
|
|
|
|
newHeight = mainNav.offset().height;
|
|
|
|
}
|
|
|
|
|
2016-02-11 19:43:55 +00:00
|
|
|
π1('header').css({height: px(newHeight)});
|
2016-02-10 23:21:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
html.toggleClass('open-nav');
|
|
|
|
}
|
|
|
|
|
|
|
|
function submitWish(textfield) {
|
2016-02-11 19:48:32 +00:00
|
|
|
window.location.replace("https://github.com/kubernetes/kubernetes.github.io/issues/new?title=I%20wish%20" +
|
|
|
|
window.location.pathname + "%20" + textfield.value + "&body=I%20wish%20" +
|
|
|
|
window.location.pathname + "%20" + textfield.value);
|
|
|
|
|
2016-02-10 23:21:30 +00:00
|
|
|
textfield.value = '';
|
|
|
|
textfield.blur();
|
|
|
|
}
|
|
|
|
|
|
|
|
function handleKeystrokes(e) {
|
|
|
|
switch (e.which) {
|
|
|
|
case 13: {
|
|
|
|
if (e.currentTarget === wishField) {
|
|
|
|
submitWish(wishField);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 27: {
|
|
|
|
if (html.hasClass('open-nav')) {
|
|
|
|
toggleMenu();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return {
|
2016-02-11 19:43:55 +00:00
|
|
|
toggleMenu: toggleMenu
|
2016-02-10 23:21:30 +00:00
|
|
|
};
|
|
|
|
})();
|
|
|
|
|
2016-02-15 21:00:37 +00:00
|
|
|
|
2016-02-12 00:25:33 +00:00
|
|
|
// TODO: scrollintoview in-page TOC
|
2016-02-15 21:04:15 +00:00
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFsZi5qcyIsIs+ALmpzIiwiSEFMLmpzIiwiz4Atc3RhdHVzLmpzIiwiz4AtYmFzZUNvbXBvbmVudHMuanMiLCLPgC1hY2NvcmRpb24vz4AtYWNjb3JkaW9uLmpzIiwiz4AtcHVzaG1lbnUvz4AtcHVzaG1lbnUuanMiLCJzY3JpcHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ3RSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ2xJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQ05BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q
|