|
@@ -0,0 +1,106 @@
|
|
|
+/*
|
|
|
+ * Konami-JS ~
|
|
|
+ * :: Now with support for touch events and multiple instances for
|
|
|
+ * :: those situations that call for multiple easter eggs!
|
|
|
+ * Code: http://konami-js.googlecode.com/
|
|
|
+ * Examples: http://www.snaptortoise.com/konami-js
|
|
|
+ * Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)
|
|
|
+ * Version: 1.4.1 (3/1/2013)
|
|
|
+ * Licensed under the GNU General Public License v3
|
|
|
+ * http://www.gnu.org/copyleft/gpl.html
|
|
|
+ * Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1 and Dolphin Browser
|
|
|
+ */
|
|
|
+
|
|
|
+var Konami = function (callback) {
|
|
|
+ var konami = {
|
|
|
+ addEvent: function (obj, type, fn, ref_obj) {
|
|
|
+ if (obj.addEventListener)
|
|
|
+ obj.addEventListener(type, fn, false);
|
|
|
+ else if (obj.attachEvent) {
|
|
|
+ // IE
|
|
|
+ obj["e" + type + fn] = fn;
|
|
|
+ obj[type + fn] = function () {
|
|
|
+ obj["e" + type + fn](window.event, ref_obj);
|
|
|
+ }
|
|
|
+ obj.attachEvent("on" + type, obj[type + fn]);
|
|
|
+ }
|
|
|
+ },
|
|
|
+ input: "",
|
|
|
+ pattern: "38384040373937396665",
|
|
|
+ load: function (link) {
|
|
|
+ this.addEvent(document, "keydown", function (e, ref_obj) {
|
|
|
+ if (ref_obj) konami = ref_obj; // IE
|
|
|
+ konami.input += e ? e.keyCode : event.keyCode;
|
|
|
+ if (konami.input.length > konami.pattern.length)
|
|
|
+ konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
|
|
|
+ if (konami.input == konami.pattern) {
|
|
|
+ konami.code(link);
|
|
|
+ konami.input = "";
|
|
|
+ e.preventDefault();
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }, this);
|
|
|
+ this.iphone.load(link);
|
|
|
+ },
|
|
|
+ code: function (link) {
|
|
|
+ window.location = link
|
|
|
+ },
|
|
|
+ iphone: {
|
|
|
+ start_x: 0,
|
|
|
+ start_y: 0,
|
|
|
+ stop_x: 0,
|
|
|
+ stop_y: 0,
|
|
|
+ tap: false,
|
|
|
+ capture: false,
|
|
|
+ orig_keys: "",
|
|
|
+ keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
|
|
|
+ code: function (link) {
|
|
|
+ konami.code(link);
|
|
|
+ },
|
|
|
+ load: function (link) {
|
|
|
+ this.orig_keys = this.keys;
|
|
|
+ konami.addEvent(document, "touchmove", function (e) {
|
|
|
+ if (e.touches.length == 1 && konami.iphone.capture == true) {
|
|
|
+ var touch = e.touches[0];
|
|
|
+ konami.iphone.stop_x = touch.pageX;
|
|
|
+ konami.iphone.stop_y = touch.pageY;
|
|
|
+ konami.iphone.tap = false;
|
|
|
+ konami.iphone.capture = false;
|
|
|
+ konami.iphone.check_direction();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ konami.addEvent(document, "touchend", function (evt) {
|
|
|
+ if (konami.iphone.tap == true) konami.iphone.check_direction(link);
|
|
|
+ }, false);
|
|
|
+ konami.addEvent(document, "touchstart", function (evt) {
|
|
|
+ konami.iphone.start_x = evt.changedTouches[0].pageX;
|
|
|
+ konami.iphone.start_y = evt.changedTouches[0].pageY;
|
|
|
+ konami.iphone.tap = true;
|
|
|
+ konami.iphone.capture = true;
|
|
|
+ });
|
|
|
+ },
|
|
|
+ check_direction: function (link) {
|
|
|
+ x_magnitude = Math.abs(this.start_x - this.stop_x);
|
|
|
+ y_magnitude = Math.abs(this.start_y - this.stop_y);
|
|
|
+ x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
|
|
|
+ y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
|
|
|
+ result = (x_magnitude > y_magnitude) ? x : y;
|
|
|
+ result = (this.tap == true) ? "TAP" : result;
|
|
|
+
|
|
|
+ if (result == this.keys[0]) this.keys = this.keys.slice(1, this.keys.length);
|
|
|
+ if (this.keys.length == 0) {
|
|
|
+ this.keys = this.orig_keys;
|
|
|
+ this.code(link);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ typeof callback === "string" && konami.load(callback);
|
|
|
+ if (typeof callback === "function") {
|
|
|
+ konami.code = callback;
|
|
|
+ konami.load();
|
|
|
+ }
|
|
|
+
|
|
|
+ return konami;
|
|
|
+};
|