2016-11-28 11:01:54 +00:00
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width" >
< title > CyberChef Source: views/html/SeasonalWaiter.js< / title >
<!-- [if lt IE 9]>
< script src = "//html5shiv.googlecode.com/svn/trunk/html5.js" > < / script >
<![endif]-->
< link type = "text/css" rel = "stylesheet" href = "styles/sunlight.default.css" >
< link type = "text/css" rel = "stylesheet" href = "styles/site.cerulean.css" >
< / head >
< body >
< div class = "navbar navbar-default navbar-fixed-top navbar-inverse" >
< div class = "container" >
< div class = "navbar-header" >
< a class = "navbar-brand" href = "index.html" > < img class = "branding-logo" src = "../build/prod/images/cyberchef-32x32.png"
alt="logo"/>CyberChef< / a >
< button class = "navbar-toggle" type = "button" data-toggle = "collapse" data-target = "#topNavigation" >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< span class = "icon-bar" > < / span >
< / button >
< / div >
< div class = "navbar-collapse collapse" id = "topNavigation" >
< ul class = "nav navbar-nav" >
< li class = "dropdown" >
< a href = "namespaces.list.html" class = "dropdown-toggle" data-toggle = "dropdown" > Namespaces< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu inline" >
< li > < a href = "FlowControl.html" > FlowControl< / a > < / li > < li > < a href = "Utils.html" > Utils< / a > < / li > < li > < a href = "Base.html" > Base< / a > < / li > < li > < a href = "Base64.html" > Base64< / a > < / li > < li > < a href = "BitwiseOp.html" > BitwiseOp< / a > < / li > < li > < a href = "ByteRepr.html" > ByteRepr< / a > < / li > < li > < a href = "CharEnc.html" > CharEnc< / a > < / li > < li > < a href = "Checksum.html" > Checksum< / a > < / li > < li > < a href = "Cipher.html" > Cipher< / a > < / li > < li > < a href = "Code.html" > Code< / a > < / li > < li > < a href = "Compress.html" > Compress< / a > < / li > < li > < a href = "Convert.html" > Convert< / a > < / li > < li > < a href = "DateTime.html" > DateTime< / a > < / li > < li > < a href = "Endian.html" > Endian< / a > < / li > < li > < a href = "Entropy.html" > Entropy< / a > < / li > < li > < a href = "Extract.html" > Extract< / a > < / li > < li > < a href = "FileType.html" > FileType< / a > < / li > < li > < a href = "HTML.html" > HTML< / a > < / li > < li > < a href = "HTTP.html" > HTTP< / a > < / li > < li > < a href = "Hash.html" > Hash< / a > < / li > < li > < a href = "Hexdump.html" > Hexdump< / a > < / li > < li > < a href = "IP.html" > IP< / a > < / li > < li > < a href = "JS.html" > JS< / a > < / li > < li > < a href = "MAC.html" > MAC< / a > < / li > < li > < a href = "Numberwang.html" > Numberwang< / a > < / li > < li > < a href = "OS.html" > OS< / a > < / li > < li > < a href = "PublicKey.html" > PublicKey< / a > < / li > < li > < a href = "Punycode.html" > Punycode< / a > < / li > < li > < a href = "QuotedPrintable.html" > QuotedPrintable< / a > < / li > < li > < a href = "Rotate.html" > Rotate< / a > < / li > < li > < a href = "SeqUtils.html" > SeqUtils< / a > < / li > < li > < a href = "StrUtils.html" > StrUtils< / a > < / li > < li > < a href = "Tidy.html" > Tidy< / a > < / li > < li > < a href = "URL_.html" > URL_< / a > < / li > < li > < a href = "UUID.html" > UUID< / a > < / li > < li > < a href = "Unicode.html" > Unicode< / a > < / li >
< / ul >
< / li >
< li class = "dropdown" >
< a href = "classes.list.html" class = "dropdown-toggle" data-toggle = "dropdown" > Classes< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu inline" >
< li > < a href = "Chef.html" > Chef< / a > < / li > < li > < a href = "Dish.html" > Dish< / a > < / li > < li > < a href = "Ingredient.html" > Ingredient< / a > < / li > < li > < a href = "Operation.html" > Operation< / a > < / li > < li > < a href = "Recipe.html" > Recipe< / a > < / li > < li > < a href = "ControlsWaiter.html" > ControlsWaiter< / a > < / li > < li > < a href = "HTMLApp.html" > HTMLApp< / a > < / li > < li > < a href = "HTMLCategory.html" > HTMLCategory< / a > < / li > < li > < a href = "HTMLIngredient.html" > HTMLIngredient< / a > < / li > < li > < a href = "HTMLOperation.html" > HTMLOperation< / a > < / li > < li > < a href = "HighlighterWaiter.html" > HighlighterWaiter< / a > < / li > < li > < a href = "InputWaiter.html" > InputWaiter< / a > < / li > < li > < a href = "Manager.html" > Manager< / a > < / li > < li > < a href = "OperationsWaiter.html" > OperationsWaiter< / a > < / li > < li > < a href = "OptionsWaiter.html" > OptionsWaiter< / a > < / li > < li > < a href = "OutputWaiter.html" > OutputWaiter< / a > < / li > < li > < a href = "RecipeWaiter.html" > RecipeWaiter< / a > < / li > < li > < a href = "SeasonalWaiter.html" > SeasonalWaiter< / a > < / li > < li > < a href = "WindowWaiter.html" > WindowWaiter< / a > < / li >
< / ul >
< / li >
< li class = "dropdown" >
< a href = "events.list.html" class = "dropdown-toggle" data-toggle = "dropdown" > Events< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu inline" >
< li > < a href = "Manager.html#event:appstart" > Manager#event:appstart< / a > < / li > < li > < a href = "Manager.html#event:operationadd" > Manager#event:operationadd< / a > < / li > < li > < a href = "Manager.html#event:operationremove" > Manager#event:operationremove< / a > < / li > < li > < a href = "Manager.html#event:oplistcreate" > Manager#event:oplistcreate< / a > < / li > < li > < a href = "Manager.html#event:statechange" > Manager#event:statechange< / a > < / li >
< / ul >
< / li >
< li class = "dropdown" >
< a href = "global.html" class = "dropdown-toggle" data-toggle = "dropdown" > Global< b class = "caret" > < / b > < / a >
< ul class = "dropdown-menu inline" >
< li > < a href = "global.html#Categories" > Categories< / a > < / li > < li > < a href = "global.html#OperationConfig" > OperationConfig< / a > < / li > < li > < a href = "global.html#main" > main< / a > < / li >
< / ul >
< / li >
< / ul >
< div class = "col-sm-3 col-md-3" >
< form class = "navbar-form" role = "search" >
< div class = "input-group" >
< input type = "text" class = "form-control" placeholder = "Search" name = "q" id = "search-input" >
< div class = "input-group-btn" >
< button class = "btn btn-default" id = "search-submit" > < i class = "glyphicon glyphicon-search" > < / i > < / button >
< / div >
< / div >
< / form >
< / div >
< / div >
< / div >
< / div >
< div class = "container" id = "toc-content" >
< div class = "row" >
< div class = "col-md-12" >
< div id = "main" >
< h1 class = "page-title" > Source: views/html/SeasonalWaiter.js< / h1 >
< section >
< article >
< pre
class="sunlight-highlight-javascript linenums">/**
2016-11-28 10:42:58 +00:00
* Waiter to handle seasonal events and easter eggs.
*
* @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2016
* @license Apache-2.0
*
* @constructor
* @param {HTMLApp} app - The main view object for CyberChef.
* @param {Manager} manager - The CyberChef event manager.
*/
var SeasonalWaiter = function(app, manager) {
this.app = app;
this.manager = manager;
};
/**
* Loads all relevant items depending on the current date.
*/
SeasonalWaiter.prototype.load = function() {
var now = new Date();
// Snowfall
2016-11-28 11:01:54 +00:00
if (now.getMonth() == 11 & & now.getDate() > 12) { // Dec 13 -> Dec 31
2016-11-28 10:42:58 +00:00
this.app.options.snow = false;
this.create_snow_option();
this.manager.add_dynamic_listener(".option-item input:checkbox[option='snow']", "switchChange.bootstrapSwitch", this.let_it_snow, this);
this.manager.add_window_listener("resize", this.let_it_snow, this);
this.manager.add_listeners(".btn", "click", this.shake_off_snow, this);
if (now.getDate() == 25) this.let_it_snow();
}
// SpiderChef
2016-11-28 11:01:54 +00:00
// if (now.getMonth() == 3 & & now.getDate() == 1) { // Apr 1
2016-11-28 10:42:58 +00:00
// this.insert_spider_icons();
// this.insert_spider_text();
// }
// Konami code
this.kkeys = [];
window.addEventListener("keydown", this.konami_code_listener.bind(this));
};
/**
* Replaces chef icons with spider icons.
* #spiderchef
*/
SeasonalWaiter.prototype.insert_spider_icons = function() {
var spider16 = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB3UlEQVQ4y2NgGJaAmYGBgVnf0oKJgYGBobWtXamqqoYTn2I4CI+LTzM2NTulpKbu+vPHz2dV5RWlluZmi3j5+KqFJSSEzpw8uQPdAEYYIzo5Kfjrl28rWFlZzjAzMYuEBQao3Lh+g+HGvbsMzExMDN++fWf4/PXLBzY2tqYNK1f2+4eHM2xcuRLigsT09Igf3384MTExbf767etBI319jU8fPsi+//jx/72HDxh5uLkZ7ty7y/Dz1687Avz8n2UUFR3Z2NjOySoqfmdhYGBg+PbtuwI7O8e5H79+8X379t357PnzYo+ePP7y6cuXc9++f69nYGRsvf/w4XdtLS2R799/bBUWFHr57sP7Jbs3b/ZkzswvUP3165fZ7z9//r988WIVAyPDr8tXr576+u3bpb9//7YwMjKeV1dV41NWVGoVEhDgPH761DJREeHaz1+/lqlpafUx6+jrRfz4+fPy+w8fTu/fsf3uw7t3L39+//4cv7DwGQYGhpdPbt9m4BcRFlNWVJC4fuvWASszs4C379792Ldt2xZBUdEdDP5hYSqQGIjDGa965uYKCalpZQwMDAxhMTG9DAwMDLaurhIkJY7A8IgGBgYGBgd3Dz2yUpeFo6O4rasrA9T24ZRxAAMTwMpgEJwLAAAAAElFTkSuQmCC",
spider32 = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAACYVBMVEUAAAAcJSU2Pz85QkM9RUWEhIWMjI2MkJEcJSU2Pz85QkM9RUWWlpc9RUVXXl4cJSU2Pz85QkM8REU9RUVRWFh6ens9RUVCSkpNVFRdY2McJSU5QkM7REQ9RUVGTk5KUlJQVldcY2Rla2uTk5WampscJSVUWltZX2BrcHF1e3scJSUjLCw9RUVASEhFTU1HTk9bYWJeZGRma2xudHV1eHiZmZocJSUyOjpJUFFQVldSWlpTWVpXXl5YXl5rb3B9fX6RkZIcJSUmLy8tNTU9RUVFTU1IT1BOVldRV1hTWlp0enocJSUfKChJUFBWXV1hZ2hnbGwcJSVETExLUlJLU1NNVVVPVlZYXl9cY2RiaGlobW5rcXFyd3h0eHgcJSUpMTFDS0tQV1dRV1hSWFlWXF1bYWJma2tobW5uc3SsrK0cJSVJUFBMVFROVlZVW1xZX2BdYmNhZ2hjaGhla2tqcHBscHE4Pz9KUlJRWVlSWVlXXF1aYGFbYWFfZWZlampqbW4cJSUgKSkiKysuNjY0PD01PT07QkNES0tHTk5JUFBMUlNMU1NOU1ROVVVPVVZRVlZRV1dSWVlWXFxXXV5aX2BbYWFbYWJcYmJcYmNcY2RdYmNgZmZhZmdkaWpkampkamtlamtla2tma2tma2xnbG1obW5pbG1pb3Bqb3Brb3BtcXJudHVvcHFvcXJvc3NwcXNwdXVxc3RzeXl1eXp2eXl3ent6e3x+gYKAhISBg4SKi4yLi4yWlpeampudnZ6fn6CkpaanqKiur6+vr7C4uLm6urq6u7u8vLy9vb3Av8DR0dL2b74UAAAAgHRSTlMAEBAQEBAQECAgICAgMDBAQEBAQEBAUFBQUGBgYGBgYGBgYGBgcHBwcHCAgICAgICAgICAgICPj4+Pj4+Pj4+Pj5+fn5+fn5+fn5+vr6+vr6+/v7+/v7+/v7+/v7+/z8/Pz8/Pz8/Pz8/P39/f39/f39/f39/f7+/v7+/v7+/v78x6RlYAAAGBSURBVDjLY2AYWUCSgUGAk4GBTdlUhQebvP7yjIgCPQbWzBMnjx5wwJSX37Rwfm1isqj9/iPHTuxYlyeMJi+yunfptBkZOw/uWj9h3vatcycu8eRGlldb3Vsts3ph/cFTh7fN3bCoe2Vf8+TZoQhTvBa6REozVC7cuPvQnmULJm1e2z+308eyJieEBSLPXbKQIUqQIczk+N6eNaumtnZMaWhaHM89m8XVCqJA02Y5w0xmga6yfVsamtrN4xoXNzS0JTHkK3CXy4EVFMumcxUy2LbENTVkZfEzMDAudtJyTmNwS2XQreAFyvOlK9louDNVaXurmjkGgnTMkWDgXswtNouFISEX6Awv+RihQi5OcYY4DtVARpCCFCMGhiJ1hjwFBpagEAaWEpFoC0WQOCOjFMRRwXYMDB4BDLJ+QLYsg7GBGjtasLnEMjCIrWBgyAZ7058FI9x1SoFEnTCDsCyIhynPILYYSFgbYpUDA5bpQBluXzxpI1yYAbd2sCMYRhwAAHB9ZPztbuMUAAAAAElFTkSuQmCC",
spider64 = "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";
// Favicon
document.querySelector("link[rel=icon]").setAttribute("href", "data:image/png;base64," + spider16);
// Bake button
document.querySelector("#bake img").setAttribute("src", "data:image/png;base64," + spider32);
// About box
document.querySelector(".about-img-left").setAttribute("src", "data:image/png;base64," + spider64);
};
/**
* Replaces all instances of the word "cyber" with "spider".
* #spiderchef
*/
SeasonalWaiter.prototype.insert_spider_text = function() {
// Title
document.title = document.title.replace(/Cyber/g, "Spider");
// Body
SeasonalWaiter.tree_walk(document.body, function(node) {
// process only text nodes
if (node.nodeType == 3) {
node.nodeValue = node.nodeValue.replace(/Cyber/g, "Spider");
}
}, true);
// Bake button
SeasonalWaiter.tree_walk(document.getElementById("bake-group"), function(node) {
// process only text nodes
if (node.nodeType == 3) {
node.nodeValue = node.nodeValue.replace(/Bake/g, "Spin");
}
}, true);
// Recipe title
document.querySelector("#recipe .title").innerHTML = "Web";
};
/**
* Adds an option to make it snow.
* #letitsnow
*/
SeasonalWaiter.prototype.create_snow_option = function() {
var options_body = document.getElementById("options-body"),
option_item = document.createElement("div");
option_item.className = "option-item";
option_item.innerHTML =
2016-11-28 11:01:54 +00:00
"< input type='checkbox' option='snow' checked />\
2016-11-28 10:42:58 +00:00
Let it snow";
options_body.appendChild(option_item);
this.manager.options.load();
};
/**
* Initialises a snowstorm.
* #letitsnow
*/
SeasonalWaiter.prototype.let_it_snow = function() {
$(document).snowfall("clear");
if (!this.app.options.snow) return;
var options = {},
firefox_version = navigator.userAgent.match(/Firefox\/(\d\d?)/);
2016-11-28 11:01:54 +00:00
if (firefox_version & & parseInt(firefox_version[1], 10) < 30) {
// Firefox < 30
2016-11-28 10:42:58 +00:00
options = {
flakeCount : 10,
flakeColor : '#fff',
flakePosition: 'absolute',
minSize : 1,
maxSize : 2,
minSpeed : 1,
maxSpeed : 5,
round : false,
shadow : false,
collection : false,
collectionHeight : 20,
deviceorientation : true
};
} else {
// All other browsers
options = {
flakeCount : 35, //35
flakeColor : '#fff',
flakePosition: 'absolute',
minSize : 5,
maxSize : 8,
minSpeed : 1,
maxSpeed : 5,
round : true,
shadow : true,
collection : ".btn",
collectionHeight : 20,
deviceorientation : true
};
}
$(document).snowfall(options);
};
/**
* When a button is clicked, shake the snow off that button.
* #letitsnow
*/
SeasonalWaiter.prototype.shake_off_snow = function(e) {
var el = e.target,
rect = el.getBoundingClientRect(),
canvases = document.querySelectorAll("canvas.snowfall-canvas"),
canvas = null,
remove_func = function() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
$(this).fadeIn();
};
2016-11-28 11:01:54 +00:00
for (var i = 0; i < canvases.length; i++) {
2016-11-28 10:42:58 +00:00
canvas = canvases[i];
2016-11-28 11:01:54 +00:00
if (canvas.style.left == rect.left + "px" & & canvas.style.top == (rect.top - 20) + "px") {
2016-11-28 10:42:58 +00:00
var ctx = canvas.getContext("2d");
$(canvas).fadeOut("slow", remove_func);
break;
}
}
};
/**
* Listen for the Konami code sequence of keys. Turn the page upside down if they are all heard in
* sequence.
* #konamicode
*/
SeasonalWaiter.prototype.konami_code_listener = function(e) {
this.kkeys.push(e.keyCode);
var konami = [38,38,40,40,37,39,37,39,66,65];
2016-11-28 11:01:54 +00:00
for (var i = 0; i < this.kkeys.length; i++) {
2016-11-28 10:42:58 +00:00
if (this.kkeys[i] != konami[i]) {
this.kkeys = [];
break;
}
if (i == konami.length - 1) {
$("body").children().toggleClass("konami");
this.kkeys = [];
}
}
};
/**
* Walks through the entire DOM starting at the specified element and operates on each node.
*
* @static
* @param {element} parent - The DOM node to start from
* @param {Function} fn - The callback function to operate on each node
* @param {booleam} all_nodes - Whether to operate on every node or not
*/
SeasonalWaiter.tree_walk = (function() {
// Create closure for constants
var skipTags = {
"SCRIPT": true, "IFRAME": true, "OBJECT": true,
"EMBED": true, "STYLE": true, "LINK": true, "META": true
};
return function(parent, fn, all_nodes) {
var node = parent.firstChild;
2016-11-28 11:01:54 +00:00
while (node & & node != parent) {
2016-11-28 10:42:58 +00:00
if (all_nodes || node.nodeType === 1) {
if (fn(node) === false) {
return(false);
}
}
2016-11-28 11:01:54 +00:00
// If it's an element & &
// has children & &
// has a tagname & & is not in the skipTags list
2016-11-28 10:42:58 +00:00
// then, we can enumerate children
2016-11-28 11:01:54 +00:00
if (node.nodeType === 1 & &
node.firstChild & &
!(node.tagName & & skipTags[node.tagName])) {
2016-11-28 10:42:58 +00:00
node = node.firstChild;
} else if (node.nextSibling) {
node = node.nextSibling;
} else {
// No child and no nextsibling
// Find parent that has a nextSibling
while ((node = node.parentNode) != parent) {
if (node.nextSibling) {
node = node.nextSibling;
break;
}
}
}
}
};
})();
2016-11-28 11:01:54 +00:00
< / pre >
< / article >
< / section >
< / div >
< / div >
< div class = "clearfix" > < / div >
< / div >
< / div >
< div class = "modal fade" id = "searchResults" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" aria-label = "Close" > < span aria-hidden = "true" > × < / span > < / button >
< h4 class = "modal-title" > Search results< / h4 >
< / div >
< div class = "modal-body" > < / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div >
< footer >
< span class = "copyright" >
© Crown Copyright 2016
< / span >
< span class = "jsdoc-message" >
Documentation generated by < a href = "https://github.com/jsdoc3/jsdoc" > JSDoc 3.4.3< / a >
on Mon Nov 28th 2016
using the < a href = "https://github.com/docstrap/docstrap" > DocStrap template< / a > .
< / span >
< / footer >
< script src = "scripts/docstrap.lib.js" > < / script >
< script src = "scripts/toc.js" > < / script >
< script type = "text/javascript" src = "scripts/fulltext-search-ui.js" > < / script >
< script >
$( function () {
$( "[id*='$']" ).each( function () {
var $this = $( this );
$this.attr( "id", $this.attr( "id" ).replace( "$", "__" ) );
} );
$( ".tutorial-section pre, .readme-section pre, pre.prettyprint.source" ).each( function () {
var $this = $( this );
var example = $this.find( "code" );
exampleText = example.html();
var lang = /{@lang (.*?)}/.exec( exampleText );
if ( lang & & lang[1] ) {
exampleText = exampleText.replace( lang[0], "" );
example.html( exampleText );
lang = lang[1];
} else {
var langClassMatch = example.parent()[0].className.match(/lang\-(\S+)/);
lang = langClassMatch ? langClassMatch[1] : "javascript";
}
if ( lang ) {
$this
.addClass( "sunlight-highlight-" + lang )
.addClass( "linenums" )
.html( example.html() );
}
} );
Sunlight.highlightAll( {
lineNumbers : true,
showMenu : true,
enableDoclinks : true
} );
$.catchAnchorLinks( {
navbarOffset: 10
} );
$( "#toc" ).toc( {
anchorName : function ( i, heading, prefix ) {
return $( heading ).attr( "id" ) || ( prefix + i );
},
selectors : "#toc-content h1,#toc-content h2,#toc-content h3,#toc-content h4",
showAndHide : false,
smoothScrolling: true
} );
$( "#main span[id^='toc']" ).addClass( "toc-shim" );
$( '.dropdown-toggle' ).dropdown();
$( "table" ).each( function () {
var $this = $( this );
$this.addClass('table');
} );
} );
< / script >
<!-- Navigation and Symbol Display -->
<!-- Google Analytics -->
< script type = "text/javascript" >
$(document).ready(function() {
SearcherDisplay.init();
});
< / script >
< / body >
< / html >