summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authordumpfmprod <dumpfmprod@ubuntu.(none)>2010-08-08 23:15:55 -0400
committerdumpfmprod <dumpfmprod@ubuntu.(none)>2010-08-08 23:15:55 -0400
commit8dc1aa93ab1e4163c491cfa6bb9bdc72269e75b3 (patch)
tree340e88c320fda39901ab16f2831d52ce2feea243 /static
parent1b0331fc7c3bd72ad2986d72e90a932f74996415 (diff)
sostler prod commit
Diffstat (limited to 'static')
-rwxr-xr-xstatic/css/dump.css68
-rw-r--r--static/img/supportdump.gifbin0 -> 781 bytes
-rw-r--r--static/index.html2
-rw-r--r--static/js/invalid_domains.js1
-rw-r--r--static/js/pichat.js3
-rw-r--r--static/js/popup.js85
-rw-r--r--static/js/registerdis.js395
-rw-r--r--static/registerdis.html67
-rw-r--r--static/sticker.html23
9 files changed, 641 insertions, 3 deletions
diff --git a/static/css/dump.css b/static/css/dump.css
index d906805..1abf7fa 100755
--- a/static/css/dump.css
+++ b/static/css/dump.css
@@ -212,6 +212,7 @@ background-color:#eff5fb;
#logout7 a:hover{font-size:10px;
color:#000; text-shadow: 0px 1px 0px #fff;
}
+
#toplogin{
margin-top:8px;
margin-right:5px;
@@ -2059,7 +2060,7 @@ font-size:20px;font-weight:bold;word-spacing:-3px;
}
/*DIS STUFF*/
-#searchboxdis{position:absolute;left:10px;display:inline-block;top:15px;}
+#dissearchbox{position:absolute;right:55px;display:inline-block;top:19px;}
#toptoolsdis{position:absolute;left:155px;display:inline-block;top:2px;}
#disregister{
@@ -2081,3 +2082,68 @@ font-size:15px;
color:#000;
text-decoration:none;
}
+#dislogout7{
+ top:-1px;
+height:14px;
+padding-left:4px;padding-right:3px;
+top:10px;
+ position:relative;
+ font-size:1px;
+border-left:1px solid #999;
+border-bottom:1px solid #999;
+background-color:#fff;
+ float:right;
+ font-family: Monaco, "Courier New", Courier, monospace;
+ font-weight: normal;
+}
+#dislogout7 img{display:none;
+}
+#dislogout7 a{font-size:10px; color: #999;
+ font-family: Monaco, "Courier New", Courier, monospace;
+}
+#dislogout7 a:hover{font-size:10px;
+color:#000; text-shadow: 0px 1px 0px #fff;
+}
+#backgroundPopup{
+display:none;
+position:fixed;
+_position:absolute; /* hack for internet explorer 6*/
+height:100%;
+width:100%;
+top:0;
+left:0;
+background:#000000;
+border:1px solid #cecece;
+z-index:1;
+}
+#popupContact{
+display:none;
+position:fixed;
+_position:absolute; /* hack for internet explorer 6*/
+height:384px;
+width:408px;
+background:#FFFFFF;
+border:2px solid #cecece;
+z-index:2;
+padding:12px;
+font-size:13px;
+}
+#popupContact h1{
+text-align:left;
+color:#6FA5FD;
+font-size:22px;
+font-weight:700;
+border-bottom:1px dotted #D3D3D3;
+padding-bottom:2px;
+margin-bottom:20px;
+}
+#popupContactClose{
+font-size:14px;
+line-height:14px;
+right:6px;
+top:4px;
+position:absolute;
+color:#6fa5fd;
+font-weight:700;
+display:block;
+}
diff --git a/static/img/supportdump.gif b/static/img/supportdump.gif
new file mode 100644
index 0000000..20a5c7c
--- /dev/null
+++ b/static/img/supportdump.gif
Binary files differ
diff --git a/static/index.html b/static/index.html
index 9dd0e2c..80fc133 100644
--- a/static/index.html
+++ b/static/index.html
@@ -144,7 +144,7 @@ background-image:url(/static/img/ylgrad.png);
-webkit-border-top-right-radius:10px;
-moz-border-radius-topright:10px;
}
-#wtftxt a{color:white;}
+#wtftxt a{color:black;}
#previewdump{
background-color:#fff;
padding:5px;
diff --git a/static/js/invalid_domains.js b/static/js/invalid_domains.js
index a6c47a9..bdddf26 100644
--- a/static/js/invalid_domains.js
+++ b/static/js/invalid_domains.js
@@ -70,6 +70,7 @@ var InvalidDomains = [
"http://aphrodite.cooltext.com",
"http://www.iconarchive.com",
"http://andysqualityfreegifs.110mb.com",
+ "http://www.msresa.com",
"www.fddarchive.com",
"http://www.onemetal.com",
"http://www.tvdance.com",
diff --git a/static/js/pichat.js b/static/js/pichat.js
index 8f0ebe6..d81e5c6 100644
--- a/static/js/pichat.js
+++ b/static/js/pichat.js
@@ -223,8 +223,9 @@ function buildMsgContent(content) {
// todo:
// isLoading doesn't get passed the right thing by $.map in addMessages
function buildMessageDiv(msg, isLoading) {
- removeOldMessages()
var nick = escapeHtml(msg.nick);
+ if (nick == 'frakbuddy' && Nick != 'frakbuddy') return;
+ removeOldMessages()
var msgId = ('msg_id' in msg) ? 'id="message-' + msg.msg_id + '"' : '';
var loadingClass = isLoading ? ' loading' : '';
var containsImageClass = LastMsgContainsImage ? ' contains-image' : '';
diff --git a/static/js/popup.js b/static/js/popup.js
new file mode 100644
index 0000000..1ff482c
--- /dev/null
+++ b/static/js/popup.js
@@ -0,0 +1,85 @@
+/***************************/
+//@Author: Adrian "yEnS" Mato Gondelle
+//@website: www.yensdesign.com
+//@email: yensamg@gmail.com
+//@license: Feel free to use it, but keep this credits please!
+/***************************/
+
+//SETTING UP OUR POPUP
+//0 means disabled; 1 means enabled;
+var popupStatus = 0;
+
+//loading popup with jQuery magic!
+function loadPopup(){
+ //loads popup only if it is disabled
+ if(popupStatus==0){
+ $("#backgroundPopup").css({
+ "opacity": "0.7"
+ });
+ $("#backgroundPopup").fadeIn("slow");
+ $("#popupContact").fadeIn("slow");
+ popupStatus = 1;
+ }
+}
+
+//disabling popup with jQuery magic!
+function disablePopup(){
+ //disables popup only if it is enabled
+ if(popupStatus==1){
+ $("#backgroundPopup").fadeOut("slow");
+ $("#popupContact").fadeOut("slow");
+ popupStatus = 0;
+ }
+}
+
+//centering popup
+function centerPopup(){
+ //request data for centering
+ var windowWidth = document.documentElement.clientWidth;
+ var windowHeight = document.documentElement.clientHeight;
+ var popupHeight = $("#popupContact").height();
+ var popupWidth = $("#popupContact").width();
+ //centering
+ $("#popupContact").css({
+ "position": "absolute",
+ "top": windowHeight/2-popupHeight/2,
+ "left": windowWidth/2-popupWidth/2
+ });
+ //only need force for IE6
+
+ $("#backgroundPopup").css({
+ "height": windowHeight
+ });
+
+}
+
+
+//CONTROLLING EVENTS IN jQuery
+$(document).ready(function(){
+
+ //LOADING POPUP
+ //Click the button event!
+ $("#disregister").click(function(){
+ //centering with css
+ centerPopup();
+ //load popup
+ loadPopup();
+ });
+
+ //CLOSING POPUP
+ //Click the x event!
+ $("#popupContactClose").click(function(){
+ disablePopup();
+ });
+ //Click out event!
+ $("#backgroundPopup").click(function(){
+ disablePopup();
+ });
+ //Press Escape event!
+ $(document).keypress(function(e){
+ if(e.keyCode==27 && popupStatus==1){
+ disablePopup();
+ }
+ });
+
+}); \ No newline at end of file
diff --git a/static/js/registerdis.js b/static/js/registerdis.js
new file mode 100644
index 0000000..d4a662b
--- /dev/null
+++ b/static/js/registerdis.js
@@ -0,0 +1,395 @@
+// http://stackoverflow.com/questions/46155/validate-email-address-in-javascript
+function validateEmail(email) {
+ var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+ return email.match(re);
+}
+
+function submitRegistration() {
+ var nick = $('#nickInput').val();
+ var email = $('#emailInput').val();
+ var terms = $('#terms').val();
+ var password = $('#passwordInput').val() || "";
+ var password2 = $('#passwordInput2').val() || "";
+
+ if (nick.length < 3 || nick.length > 12) {
+ alert("Nicks must be between 3 and 12 characters long.");
+ return;
+ }
+
+ if (!validateEmail(email)) {
+ alert("Please enter a valid email address!");
+ return;
+ }
+
+ if (password != password2) {
+ alert("Passwords must match!");
+ return;
+ }
+
+ var hash = hex_sha1(nick + '$' + password + '$dumpfm');
+ var onSuccess = function() {
+ if (typeof pageTracker !== 'undefined') {
+ pageTracker._trackEvent('User', 'Register', nick);
+ }
+ location.href = "http://dis.dump.fm";
+ };
+
+ var onError = function(resp) {
+ var respText = resp.responseText ? resp.responseText.trim() : false;
+ if (respText == 'NICK_TAKEN') {
+ alert("That nick is already taken! Please choose another.");
+ } else if (respText == 'NICK_INVALID_CHARS') {
+ alert("Nicks can only contain letters and numbers.");
+ } else {
+ alert("Unable to register!");
+ }
+ };
+
+ $.ajax({
+ type: 'POST',
+ timeout: 5000,
+ url: '/submit-registration',
+ data: {'nick': nick, 'email': email, 'hash': hash },
+ cache: false,
+ dataType: 'json',
+ success: onSuccess,
+ error: onError
+
+ });
+}
+
+function initRegister() {
+ $('#submit').click(submitRegistration);
+}
+// sha1.js
+
+/*
+ * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
+ * in FIPS 180-1
+ * Version 2.2 Copyright Paul Johnston 2000 - 2009.
+ * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
+ * Distributed under the BSD License
+ * See http://pajhome.org.uk/crypt/md5 for details.
+ */
+
+/*
+ * Configurable variables. You may need to tweak these to be compatible with
+ * the server-side, but the defaults work in most cases.
+ */
+var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */
+var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */
+
+/*
+ * These are the functions you'll usually want to call
+ * They take string arguments and return either hex or base-64 encoded strings
+ */
+function hex_sha1(s) { return rstr2hex(rstr_sha1(str2rstr_utf8(s))); }
+function b64_sha1(s) { return rstr2b64(rstr_sha1(str2rstr_utf8(s))); }
+function any_sha1(s, e) { return rstr2any(rstr_sha1(str2rstr_utf8(s)), e); }
+function hex_hmac_sha1(k, d)
+ { return rstr2hex(rstr_hmac_sha1(str2rstr_utf8(k), str2rstr_utf8(d))); }
+function b64_hmac_sha1(k, d)
+ { return rstr2b64(rstr_hmac_sha1(str2rstr_utf8(k), str2rstr_utf8(d))); }
+function any_hmac_sha1(k, d, e)
+ { return rstr2any(rstr_hmac_sha1(str2rstr_utf8(k), str2rstr_utf8(d)), e); }
+
+/*
+ * Perform a simple self-test to see if the VM is working
+ */
+function sha1_vm_test()
+{
+ return hex_sha1("abc").toLowerCase() == "a9993e364706816aba3e25717850c26c9cd0d89d";
+}
+
+/*
+ * Calculate the SHA1 of a raw string
+ */
+function rstr_sha1(s)
+{
+ return binb2rstr(binb_sha1(rstr2binb(s), s.length * 8));
+}
+
+/*
+ * Calculate the HMAC-SHA1 of a key and some data (raw strings)
+ */
+function rstr_hmac_sha1(key, data)
+{
+ var bkey = rstr2binb(key);
+ if(bkey.length > 16) bkey = binb_sha1(bkey, key.length * 8);
+
+ var ipad = Array(16), opad = Array(16);
+ for(var i = 0; i < 16; i++)
+ {
+ ipad[i] = bkey[i] ^ 0x36363636;
+ opad[i] = bkey[i] ^ 0x5C5C5C5C;
+ }
+
+ var hash = binb_sha1(ipad.concat(rstr2binb(data)), 512 + data.length * 8);
+ return binb2rstr(binb_sha1(opad.concat(hash), 512 + 160));
+}
+
+/*
+ * Convert a raw string to a hex string
+ */
+function rstr2hex(input)
+{
+ try { hexcase } catch(e) { hexcase=0; }
+ var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
+ var output = "";
+ var x;
+ for(var i = 0; i < input.length; i++)
+ {
+ x = input.charCodeAt(i);
+ output += hex_tab.charAt((x >>> 4) & 0x0F)
+ + hex_tab.charAt( x & 0x0F);
+ }
+ return output;
+}
+
+/*
+ * Convert a raw string to a base-64 string
+ */
+function rstr2b64(input)
+{
+ try { b64pad } catch(e) { b64pad=''; }
+ var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ var output = "";
+ var len = input.length;
+ for(var i = 0; i < len; i += 3)
+ {
+ var triplet = (input.charCodeAt(i) << 16)
+ | (i + 1 < len ? input.charCodeAt(i+1) << 8 : 0)
+ | (i + 2 < len ? input.charCodeAt(i+2) : 0);
+ for(var j = 0; j < 4; j++)
+ {
+ if(i * 8 + j * 6 > input.length * 8) output += b64pad;
+ else output += tab.charAt((triplet >>> 6*(3-j)) & 0x3F);
+ }
+ }
+ return output;
+}
+
+/*
+ * Convert a raw string to an arbitrary string encoding
+ */
+function rstr2any(input, encoding)
+{
+ var divisor = encoding.length;
+ var remainders = Array();
+ var i, q, x, quotient;
+
+ /* Convert to an array of 16-bit big-endian values, forming the dividend */
+ var dividend = Array(Math.ceil(input.length / 2));
+ for(i = 0; i < dividend.length; i++)
+ {
+ dividend[i] = (input.charCodeAt(i * 2) << 8) | input.charCodeAt(i * 2 + 1);
+ }
+
+ /*
+ * Repeatedly perform a long division. The binary array forms the dividend,
+ * the length of the encoding is the divisor. Once computed, the quotient
+ * forms the dividend for the next step. We stop when the dividend is zero.
+ * All remainders are stored for later use.
+ */
+ while(dividend.length > 0)
+ {
+ quotient = Array();
+ x = 0;
+ for(i = 0; i < dividend.length; i++)
+ {
+ x = (x << 16) + dividend[i];
+ q = Math.floor(x / divisor);
+ x -= q * divisor;
+ if(quotient.length > 0 || q > 0)
+ quotient[quotient.length] = q;
+ }
+ remainders[remainders.length] = x;
+ dividend = quotient;
+ }
+
+ /* Convert the remainders to the output string */
+ var output = "";
+ for(i = remainders.length - 1; i >= 0; i--)
+ output += encoding.charAt(remainders[i]);
+
+ /* Append leading zero equivalents */
+ var full_length = Math.ceil(input.length * 8 /
+ (Math.log(encoding.length) / Math.log(2)))
+ for(i = output.length; i < full_length; i++)
+ output = encoding[0] + output;
+
+ return output;
+}
+
+/*
+ * Encode a string as utf-8.
+ * For efficiency, this assumes the input is valid utf-16.
+ */
+function str2rstr_utf8(input)
+{
+ var output = "";
+ var i = -1;
+ var x, y;
+
+ while(++i < input.length)
+ {
+ /* Decode utf-16 surrogate pairs */
+ x = input.charCodeAt(i);
+ y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
+ if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
+ {
+ x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
+ i++;
+ }
+
+ /* Encode output as utf-8 */
+ if(x <= 0x7F)
+ output += String.fromCharCode(x);
+ else if(x <= 0x7FF)
+ output += String.fromCharCode(0xC0 | ((x >>> 6 ) & 0x1F),
+ 0x80 | ( x & 0x3F));
+ else if(x <= 0xFFFF)
+ output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F),
+ 0x80 | ((x >>> 6 ) & 0x3F),
+ 0x80 | ( x & 0x3F));
+ else if(x <= 0x1FFFFF)
+ output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07),
+ 0x80 | ((x >>> 12) & 0x3F),
+ 0x80 | ((x >>> 6 ) & 0x3F),
+ 0x80 | ( x & 0x3F));
+ }
+ return output;
+}
+
+/*
+ * Encode a string as utf-16
+ */
+function str2rstr_utf16le(input)
+{
+ var output = "";
+ for(var i = 0; i < input.length; i++)
+ output += String.fromCharCode( input.charCodeAt(i) & 0xFF,
+ (input.charCodeAt(i) >>> 8) & 0xFF);
+ return output;
+}
+
+function str2rstr_utf16be(input)
+{
+ var output = "";
+ for(var i = 0; i < input.length; i++)
+ output += String.fromCharCode((input.charCodeAt(i) >>> 8) & 0xFF,
+ input.charCodeAt(i) & 0xFF);
+ return output;
+}
+
+/*
+ * Convert a raw string to an array of big-endian words
+ * Characters >255 have their high-byte silently ignored.
+ */
+function rstr2binb(input)
+{
+ var output = Array(input.length >> 2);
+ for(var i = 0; i < output.length; i++)
+ output[i] = 0;
+ for(var i = 0; i < input.length * 8; i += 8)
+ output[i>>5] |= (input.charCodeAt(i / 8) & 0xFF) << (24 - i % 32);
+ return output;
+}
+
+/*
+ * Convert an array of big-endian words to a string
+ */
+function binb2rstr(input)
+{
+ var output = "";
+ for(var i = 0; i < input.length * 32; i += 8)
+ output += String.fromCharCode((input[i>>5] >>> (24 - i % 32)) & 0xFF);
+ return output;
+}
+
+/*
+ * Calculate the SHA-1 of an array of big-endian words, and a bit length
+ */
+function binb_sha1(x, len)
+{
+ /* append padding */
+ x[len >> 5] |= 0x80 << (24 - len % 32);
+ x[((len + 64 >> 9) << 4) + 15] = len;
+
+ var w = Array(80);
+ var a = 1732584193;
+ var b = -271733879;
+ var c = -1732584194;
+ var d = 271733878;
+ var e = -1009589776;
+
+ for(var i = 0; i < x.length; i += 16)
+ {
+ var olda = a;
+ var oldb = b;
+ var oldc = c;
+ var oldd = d;
+ var olde = e;
+
+ for(var j = 0; j < 80; j++)
+ {
+ if(j < 16) w[j] = x[i + j];
+ else w[j] = bit_rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
+ var t = safe_add(safe_add(bit_rol(a, 5), sha1_ft(j, b, c, d)),
+ safe_add(safe_add(e, w[j]), sha1_kt(j)));
+ e = d;
+ d = c;
+ c = bit_rol(b, 30);
+ b = a;
+ a = t;
+ }
+
+ a = safe_add(a, olda);
+ b = safe_add(b, oldb);
+ c = safe_add(c, oldc);
+ d = safe_add(d, oldd);
+ e = safe_add(e, olde);
+ }
+ return Array(a, b, c, d, e);
+
+}
+
+/*
+ * Perform the appropriate triplet combination function for the current
+ * iteration
+ */
+function sha1_ft(t, b, c, d)
+{
+ if(t < 20) return (b & c) | ((~b) & d);
+ if(t < 40) return b ^ c ^ d;
+ if(t < 60) return (b & c) | (b & d) | (c & d);
+ return b ^ c ^ d;
+}
+
+/*
+ * Determine the appropriate additive constant for the current iteration
+ */
+function sha1_kt(t)
+{
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
+ (t < 60) ? -1894007588 : -899497514;
+}
+
+/*
+ * Add integers, wrapping at 2^32. This uses 16-bit operations internally
+ * to work around bugs in some JS interpreters.
+ */
+function safe_add(x, y)
+{
+ var lsw = (x & 0xFFFF) + (y & 0xFFFF);
+ var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
+ return (msw << 16) | (lsw & 0xFFFF);
+}
+
+/*
+ * Bitwise rotate a 32-bit number to the left.
+ */
+function bit_rol(num, cnt)
+{
+ return (num << cnt) | (num >>> (32 - cnt));
+}
diff --git a/static/registerdis.html b/static/registerdis.html
new file mode 100644
index 0000000..6343f59
--- /dev/null
+++ b/static/registerdis.html
@@ -0,0 +1,67 @@
+<html><head>
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
+ <script type="text/javascript" src="http://dump.fm//static/js/underscore-min.js"></script>
+ <script type="text/javascript" src="http://dump.fm//static/js/registerdis.js"></script>
+ <script>
+ $(document).ready(initRegister);
+ </script>
+ <link rel="stylesheet" type="text/css" href="http://dump.fm/static/css/index.css">
+
+ <link rel="shortcut icon" href="static/favicon.ico">
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+ <META NAME="keywords" CONTENT="dump.fm, image chat, realtime, internet 3.0, dump, dump fm, image dump, pictures, image links, image board">
+ <META NAME="description" CONTENT="Talk with pictures!">
+ <title>dump.fm - register</title></head>
+<body>
+
+<div id="rapper"></div>
+<div id="content" style="z-index:77;">
+
+<div id="main" align="center">
+
+ <div id="passwordreset">
+ <img src="/static/img/furie3.png" id="furie3" />
+ <div id="passwordreset">
+ <div id="logo-and-text">
+ <a href="/"><img src="/static/img/dumppixellarge3.png"></a>
+ <div align="center">
+ <label style="text-align:left;margin-bottom:-8px;">username</label>
+ <input type="text" class="field"id="nickInput" />
+ <br>
+
+ <label style="text-align:left;margin-bottom:-8px;">password</label>
+ <input type="password" class="field" id="passwordInput" />
+ <br>
+ <label style="text-align:left;margin-bottom:-8px;">password2x</label>
+ <input type="password" class="field" id="passwordInput2" />
+
+ <label style="text-align:left;margin-bottom:-8px;">email</label>
+ <input type="text" class="field"id="emailInput" />
+ </h1>
+
+ </form>
+
+ <br>
+
+
+ <div align="center">
+ <input type="submit" class="submit" id="submit" value="Register!" />
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try {
+var pageTracker = _gat._getTracker("UA-12364576-1");
+pageTracker._trackPageview();
+} catch(err) {}</script>
+
+</body>
+</html>
diff --git a/static/sticker.html b/static/sticker.html
new file mode 100644
index 0000000..0cec3d1
--- /dev/null
+++ b/static/sticker.html
@@ -0,0 +1,23 @@
+<html>
+<head>
+<title>support dump.fm</title>
+</head>
+<body>
+
+<br><center>
+
+<img src="http://dump.fm/images/20100806/1281132029935-dumpfm-ryder-stickerad2.gif">
+
+<form action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/839946885881921" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" target="_top">
+ <input name="item_name_1" type="hidden" value="20 DUMP.FM IDGI STICKERS!"/>
+ <input name="item_description_1" type="hidden" value="Support dump.fm!!!! Buy 20 stickers for just $5!"/>
+ <input name="item_quantity_1" type="hidden" value="1"/>
+ <input name="item_price_1" type="hidden" value="5.0"/>
+ <input name="item_currency_1" type="hidden" value="USD"/>
+ <input name="_charset_" type="hidden" value="utf-8"/>
+ <input alt="" src="https://checkout.google.com/buttons/buy.gif?merchant_id=839946885881921&amp;w=117&amp;h=48&amp;style=white&amp;variant=text&amp;loc=en_US" type="image"/>
+</form>
+</center>
+
+</body>
+</html> \ No newline at end of file