summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authordumpfmprod <dumpfmprod@ubuntu.(none)>2012-07-17 21:40:57 -0400
committerdumpfmprod <dumpfmprod@ubuntu.(none)>2012-07-17 21:40:57 -0400
commitda15cfb1e452a0af4902272ba351d5a6d0d0b56a (patch)
tree8525e56790625ab7b67e4c534fdf1739d0f592b6 /static
parent38091d8e194aa48f6bd64e2cf8ccba6fd27c36a2 (diff)
update src, scripts, etc from 2012
Diffstat (limited to 'static')
-rwxr-xr-xstatic/css/dump.css108
-rw-r--r--static/error/502.html2
-rw-r--r--static/html/terms.html16
-rw-r--r--static/js/fullscreen.js355
-rw-r--r--static/js/pichat.js229
-rwxr-xr-xstatic/js/register.js4
-rw-r--r--static/register.html24
-rw-r--r--static/webcam/webcam.js2
8 files changed, 675 insertions, 65 deletions
diff --git a/static/css/dump.css b/static/css/dump.css
index 09dd59d..20bbc40 100755
--- a/static/css/dump.css
+++ b/static/css/dump.css
@@ -221,7 +221,7 @@ background-color:#fff;
.msg-hover.content {
cursor: pointer;
- background-image:url("/static/img/thumbs/stripes.gif");
+ background-image:url("/static/img/thumbs/stripes.png");
opacity:1.0;
color:#000;
background-position:bottom right;
@@ -276,7 +276,7 @@ a.msg-image-zoom img.zoom-icon:hover {
}
.msgDiv.favorite{
- background-image:url("/static/img/thumbs/stripes.gif");
+ background-image:url("/static/img/thumbs/stripes.png");
background-position:top right;
background-position:bottom right;
background-attachment:fixed;
@@ -521,6 +521,9 @@ font-size:20px;
min-width:500px;padding-right:38px;padding-left:1px;
box-shadow: 2px 3px 4px #eee;
}
+#msgInput.over {
+ background: #cef;
+}
.msgInput {
min-width:500px;width:100%;
background-color:#eff5fb;
@@ -646,10 +649,12 @@ border:1px solid #000;
#webcam-button-close { /* 16 x 14 */
position: fixed;
bottom: 450px; /* 240 + 68 - (16 / 2) */
- right: 495px; /* 320 - (14 / 2) */
+ right: 490px; /* 320 - (14 / 2) */
z-index: 5001;
-border:1px solid #000;
+border:2px outset #000;
+background:#ccc;
cursor: pointer;
+ font-size:18px;font-family: Comic Sans MS, cursive;font-weight:100;text-shadow:1px 1px #ddd;color:#333;text-align:center; cursor:pointer;width:18px;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none;user-select: none;
}
#webcam-preview {
@@ -1779,7 +1784,7 @@ font-size:20px;font-weight:bold;word-spacing:-3px;
#chatbuttons {
font-size: 9px;
position: fixed;
- right: 5px;
+ right: 10px;
margin-right:5px;
bottom: 0px;
z-index: 10;
@@ -1969,7 +1974,7 @@ a.msgbtn:active {
right: -262px;
width: 245px;
padding:7px;
- background-image:url("/static/img/thumbs/stripes.gif");
+ background-image:url("/static/img/thumbs/stripes.png");
border: 1px dotted #0C8FFF;
top:50px;
background-color:#fff;
@@ -2269,4 +2274,95 @@ margin:7px;
padding: 4px;
}
+.mute{float:left;font-size:18px;font-family: Comic Sans MS, cursive;font-weight:100;text-shadow:1px 1px #ddd;color:#333; cursor:pointer;width:20px;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none;user-select: none;}
+.unmute{float:left;font-size:18px;font-family: Comic Sans MS, cursive;font-weight:100;text-shadow:1px 1px #ddd;color:#333; cursor:pointer;width:20px;-webkit-user-select: none;-khtml-user-select: none;-moz-user-select: none;-o-user-select: none;user-select: none;}
+
+#msgSubmit {
+ right: 325px;
+}
+#palette-button {
+ right: 285px;
+}
+#msginput {
+ padding-right: 68px;
+}
+#manual-palette-button {
+ border: 1px solid black;
+ background-color: #EFF5FB;
+ background-position: 4 2;
+ position: absolute;
+ background-image:url('http://dump.fm/images/20120709/1341873133967-dumpfm-ohgod-cpal.png');
+ display: inline-block;
+ width: 40px;
+ height: 35px;
+ right: 245px;
+ top: 0;
+ padding-bottom: 1;
+ text-align: center;
+ cursor: pointer;
+ font-size: 12px;
+ color: white;
+ border-right: 0px;
+}
+#manual-palette {
+ position: absolute;
+ right: 30px;
+ bottom: 76px;
+ width: auto;
+ max-width: 350px;
+ min-width: 150px;
+ height: auto;
+ max-height: 400px;
+ min-height: 150px;
+ padding: 20px;
+ background-color: white;
+ z-index: 1000000001;
+ display: none;
+ overflow-y: auto;
+ box-shadow: 3px 4px 4px #C8CBCE;
+ border: 2px solid green;
+}
+#manual-palette-thumbs img {
+ max-width: 100px;
+ max-height: 100px;
+ cursor: pointer;
+ opacity: .9;
+ padding: 1;
+}
+#manual-add-url-txt {
+ position:absolute;
+ width:100%;
+ left:0px;
+ bottom:-2px;
+ outline:none;
+ border:none;
+ border-top:1px solid green;
+ background-color:#EFE;
+ padding: 2px 0 3px 2px;
+}
+#manual-add-button {
+ position:absolute;
+ bottom:-2px;
+ right:40px;
+ width:40px;
+ background-color:white;
+ border:1px solid green;
+ border-bottom:none;
+ border-right:none;
+}
+#manual-remove-button {
+ position:absolute;
+ bottom:-2px;
+ right:0px;
+ width:40px;
+ background-color:#FEE;
+ border:1px solid green;
+ border-bottom:none;
+ border-right:none;
+}
+#manual-palette-thumbs .error {
+ display: none;
+ width: 300px;
+ color: green;
+}
diff --git a/static/error/502.html b/static/error/502.html
index 91e74d1..fea3648 100644
--- a/static/error/502.html
+++ b/static/error/502.html
@@ -1,3 +1,3 @@
<html>
- <body>502</body>
+ <body>hello 502</body>
</html>
diff --git a/static/html/terms.html b/static/html/terms.html
index c565e38..5eb2bba 100644
--- a/static/html/terms.html
+++ b/static/html/terms.html
@@ -30,13 +30,13 @@
><FONT size="+2"><B>1. Access to the Services </H2
><P
-><FONT size="+1"></B>Subject to the terms and conditions of this Agreement, Dump.Fm may offer to provide the Services, as described more fully on the Site, and which are selected by Subscriber, solely for Subscriber&rsquo;s own use, and not for the use or bene&#64257;t of any third party. Services shall include, but not be limited to, any services Dump.Fm performs for Subscriber, as well as the offering of any Content (as de&#64257;ned below) on the Site. Dump.Fm may change, suspend or discontinue theServices at any time, including the availability of any feature, database, or Content. Dump.Fmmay also impose limits on certain features and services or restrict Subscriber&rsquo;s access to parts or all of the Services without notice or liability. Dump.Fm reserves the right, at its discretion, to modify these Terms of Service at any time by posting revised Terms of Service on the Site and by providing notice via e-mail, where possible, or on the Site. Subscriber shall be responsible forreviewing and becoming familiar with any such modi&#64257;cations. Use of the Services by Subscriberfollowing such modi&#64257;cation constitutes Subscriber's acceptance of the terms and conditions ofthis Agreement as modi&#64257;ed. </P
+><FONT size="+1"></B>Subject to the terms and conditions of this Agreement, Dump.Fm may offer to provide the Services, as described more fully on the Site, and which are selected by Subscriber, solely for Subscriber&rsquo;s own use, and not for the use or bene&#64257;t of any third party. Services shall include, but not be limited to, any services Dump.Fm performs for Subscriber, as well as the offering of any Content (as de&#64257;ned below) on the Site. Dump.Fm may change, suspend or discontinue theServices at any time, including the availability of any feature, database, or Content. Dump.Fm may also impose limits on certain features and services or restrict Subscriber&rsquo;s access to parts or all of the Services without notice or liability. Dump.Fm reserves the right, at its discretion, to modify these Terms of Service at any time by posting revised Terms of Service on the Site. Subscriber shall be responsible for reviewing and becoming familiar with any such modifications. Use of the Services by Subscriber following such modi&#64257;cation constitutes Subscriber's acceptance of the terms and conditions ofthis Agreement as modified. </P
><P
>Subscriber certi&#64257;es to Dump.Fm that if Subscriber is an individual (i.e., not a corporate entity),Subscriber is at least 13 years of age. No one under the age of 13 may provide any personalinformation to or on Dump.Fm (including, for example, a name, address, telephone number oremail address). Subscriber also certi&#64257;es that it is legally permitted to use the Services and accessthe Site, and takes full responsibility for the selection and use of the Services and access of theSite. This Agreement is void where prohibited by law, and the right to access the Site is revoked in such jurisdictions. Dump.Fm makes no claim that the Site may be lawfully viewed or thatContent may be downloaded outside of the United States. Access to the Content may not be legal by certain persons or in certain countries. If You access the Site from outside the United States, You do so at Your own risk and You are responsible for compliance with the laws of Your jurisdiction. </P
><P
->Dump.Fm will use reasonable efforts to ensure that the Site and Services are available twenty-four hours a day, seven days a week. However, there will be occasions when the Site and/or Services will be interrupted for maintenance, upgrades and repairs or due to failure oftelecommunications links and equipment. Every reasonable step will be taken by Dump.Fm tominimize such disruption where it is within Dump.Fm&rsquo;s reasonable control. </P
+>Dump.Fm will use reasonable efforts to ensure that the Site and Services are available twenty-four hours a day, seven days a week. However, there will be occasions when the Site and/or Services will be interrupted for maintenance, upgrades and repairs or due to failure of telecommunications links and equipment. Every reasonable step will be taken by Dump.Fm to minimize such disruption where it is within Dump.Fm&rsquo;s reasonable control. </P
><P
>You agree that neither Dump.Fm nor the Site will be liable in any event to you or any other party for any suspension, modi&#64257;cation, discontinuance or lack of availability of the Site, the service,your Subscriber Content or other Content. </P
@@ -69,17 +69,17 @@
><FONT size="+2"><B>3. Subscriber Content </H2
><P
-><FONT size="+1"></B>Subscriber shall own all Subscriber Content that Subscriber contributes to the Site, but herebygrants and agrees to grant Dump.Fm a non-exclusive, worldwide, royalty-free, transferable right and license (with the right to sublicense), to use, copy, cache, publish, display, distribute, modify,create derivative works and store such Subscriber Content and to allow others to do so (&ldquo;ContentLicense&rdquo;) in order to provide the Services. On termination of Subscriber&rsquo;s membership to the Site and use of the Services, Dump.Fm shall make all reasonable efforts to promptly remove from the Site and cease use of the Subscriber Content; however, Subscriber recognizes and agrees that caching of or references to the Subscriber Content may not be immediately removed.Subscriber warrants, represents and agrees Subscriber has the right to grant Dump.Fm and theSite the rights set forth above. Subscriber represents, warrants and agrees that it will notcontribute any Subscriber Content that (a) infringes, violates or otherwise interferes with anycopyright or trademark of another party, (b) reveals any trade secret, unless Subscriber owns the trade secret or has the owner&rsquo;s permission to post it, (c) infringes any intellectual property right of another or the privacy or publicity rights of another, (d) is libelous, defamatory, abusive, threatening, harassing, hateful, offensive or otherwise violates any law or right of any third party, (e) contains a virus, trojan horse, worm, time bomb or other computer programming routine orengine that is intended to damage, detrimentally interfere with, surreptitiously intercept orexpropriate any system, data or information, or (f) remains posted after Subscriber has beennoti&#64257;ed that such Subscriber Content violates any of sections (a) to (e) of this sentence.Dump.Fm reserves the right to remove any Subscriber Content from the Site, suspend orterminate Subscriber&rsquo;s right to use the Services at any time, or pursue any other remedy or relief available to Dump.Fm and/or the Site under equity or law, for any reason (including, but not limited to, upon receipt of claims or allegations from third parties or authorities relating to suchSubscriber Content or if Dump.Fm is concerned that Subscriber may have breached theimmediately preceding sentence), or for no reason at all. </P
+><FONT size="+1"></B>Subscriber shall own all Subscriber Content that Subscriber contributes to the Site, but hereby grants and agrees to grant Dump.Fm a non-exclusive, worldwide, royalty-free, transferable right and license (with the right to sublicense), to use, copy, cache, publish, display, distribute, modify,create derivative works and store such Subscriber Content and to allow others to do so (&ldquo;ContentLicense&rdquo;) in order to provide the Services. Subscriber warrants, represents and agrees Subscriber has the right to grant Dump.Fm and theSite the rights set forth above. Subscriber represents, warrants and agrees that it will not contribute any Subscriber Content that (a) infringes, violates or otherwise interferes with anycopyright or trademark of another party, (b) reveals any trade secret, unless Subscriber owns the trade secret or has the owner&rsquo;s permission to post it, (c) infringes any intellectual property right of another or the privacy or publicity rights of another, (d) is libelous, defamatory, abusive, threatening, harassing, hateful, offensive or otherwise violates any law or right of any third party, (e) contains a virus, trojan horse, worm, time bomb or other computer programming routine or engine that is intended to damage, detrimentally interfere with, surreptitiously intercept or expropriate any system, data or information, or (f) remains posted after Subscriber has been notified that such Subscriber Content violates any of sections (a) to (e) of this sentence. Dump.Fm reserves the right to remove any Subscriber Content from the Site, suspend or terminate Subscriber&rsquo;s right to use the Services at any time, or pursue any other remedy or relief available to Dump.Fm and/or the Site under equity or law, for any reason (including, but not limited to, upon receipt of claims or allegations from third parties or authorities relating to suchSubscriber Content or if Dump.Fm is concerned that Subscriber may have breached the immediately preceding sentence), or for no reason at all. </P
></DIV
><H2
><FONT size="+2"><B>4. Restrictions</H2
><P
-><FONT size="+1"></B>Subscriber is responsible for all of its activity in connection with the Services and accessing the Site. Any fraudulent, abusive, or otherwise illegal activity or any use of the Services or Content in violation of this Agreement may be grounds for termination of Subscriber&rsquo;s right to Services or to access the Site. Subscriber may not post or transmit, or cause to be posted or transmitted,any communication or solicitation designed or intended to obtain password, account, or privateinformation from any Dump.Fm user. </P
+><FONT size="+1"></B>Subscriber is responsible for all of its activity in connection with the Services and accessing the Site. Any fraudulent, abusive, or otherwise illegal activity or any use of the Services or Content in violation of this Agreement may be grounds for termination of Subscriber&rsquo;s right to Services or to access the Site. Subscriber may not post or transmit, or cause to be posted or transmitted, any communication or solicitation designed or intended to obtain password, account, or private information from any Dump.Fm user.</P
><P
->Use of the Site or Services to violate the security of any computer network, crack passwords orsecurity encryption codes, transfer or store illegal material including that are deemed threateningor obscene, or engage in any kind of illegal activity is expressly prohibited. Under nocircumstances will Subscriber use the Site or the Service to (a) send unsolicited e-mails, bulkmail, spam or other materials to users of the Site or any other individual, (b) harass, threaten,stalk or abuse any person or party, including other users of the Site, (c) create a false identity or to impersonate another person, or (d) post any false, inaccurate or incomplete material or deleteor revise any material that was not posted by You. </P
+>Use of the Site or Services to violate the security of any computer network, crack passwords or security encryption codes, transfer or store illegal material including that are deemed threatening or obscene, or engage in any kind of illegal activity is expressly prohibited. Under no circumstances will Subscriber use the Site or the Service to (a) send unsolicited e-mails, bulkmail, spam or other materials to users of the Site or any other individual, (b) harass, threaten,stalk or abuse any person or party, including other users of the Site, (c) create a false identity or to impersonate another person, or (d) post any false, inaccurate or incomplete material or deleteor revise any material that was not posted by You. </P
></DIV
><DIV class="Sect"
@@ -243,7 +243,7 @@ authorized by the copyright owner, its agent or law.
type="disc"
><LI
->The speci&#64257;c URLs of material that Dump.Fm has removed or to which Dump.Fm hasdisabled access. </P
+>The speci&#64257;c URLs of material that Dump.Fm has removed or to which Dump.Fm has disabled access. </P
></LI
><LI
@@ -251,11 +251,11 @@ authorized by the copyright owner, its agent or law.
></LI
><LI
->A statement that User consent to the jurisdiction of Federal District Court for the judicial district in which your address is located (or New York County, New York if your address is outside of the United States), and that User will accept service of process from theperson who provided noti&#64257;cation under subsection (c)(1)(C) or an agent of such person. </P
+>A statement that User consent to the jurisdiction of Federal District Court for the judicial district in which your address is located (or New York County, New York if your address is outside of the United States), and that User will accept service of process from the person who provided noti&#64257;cation under subsection (c)(1)(C) or an agent of such person. </P
></LI
><LI
->The following statement: "I swear, under penalty of perjury, that I have a good faith beliefthat the material was removed or disabled as a result of a mistake or misidenti&#64257;cation of the material to be removed or disabled." </P
+>The following statement: "I swear, under penalty of perjury, that I have a good faith belief that the material was removed or disabled as a result of a mistake or misidenti&#64257;cation of the material to be removed or disabled." </P
></LI
></UL
>
diff --git a/static/js/fullscreen.js b/static/js/fullscreen.js
index f99d48b..5b46519 100644
--- a/static/js/fullscreen.js
+++ b/static/js/fullscreen.js
@@ -1,5 +1,6 @@
function initFullscreen(room){
Room = room || "dumpfm";
+ // Timestamp = Timestamp || Date.now();
refresh();
ImageCache = [];
SeenImages = {};
@@ -87,20 +88,8 @@ function refresh() {
}
function initLogin() {
- $('#logininner').ridgificate('2px solid #dd0000',
- '2px solid #fe6230',
- '2px solid #fef600',
- '2px solid #00bc00',
- '2px solid #009bfe',
- '2px solid #000083',
- '2px solid #30009b',
- '2px solid #dd0000',
- '2px solid #fe6230',
- '2px solid #fef600',
- '2px solid #00bc00',
- '2px solid #009bfe',
- '2px solid #000083',
- '2px solid #30009b');
+ $('#logininner').ridgificate('1px solid #000'
+ );
}
function showLogin() {
@@ -126,6 +115,7 @@ function login() {
LoggedIn = true;
$('#loginbox').hide();
$('.sublogo').text('click to fav');
+ window.location.href = "/chat";
};
var onError = function(resp, textStatus, errorThrown) {
@@ -182,4 +172,339 @@ $(function() {
$('#memelogo').stop(true, false).animate({opacity: 1.0}, "fast").delay(LogoFadeDelay).animate({opacity: 0}, "slow");
});
$('#memelogo').delay(LogoFadeDelay).animate({opacity: 0}, "slow");
-}); \ No newline at end of file
+});
+
+
+// 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/js/pichat.js b/static/js/pichat.js
index afddec7..6eb5553 100644
--- a/static/js/pichat.js
+++ b/static/js/pichat.js
@@ -82,7 +82,7 @@ var Preferences = {
function escapeHtml(txt) {
if (!txt) { return ""; }
-// txt = annoyingCaps(txt)
+ // txt = annoyingCaps(txt)
return $("<span>").text(txt).html()
}
@@ -223,7 +223,7 @@ function linkReplace(url) {
if (type == 'image') {
LastMsgContainsImage = true;
- return "<a target='_blank' href='" + linkUrl + "' class='img-wrapper' onclick='return imgClickHandler()'><img src='" + linkUrl + "'></a>";
+ return "<a target='_blank' href='" + linkUrl + "' class='img-wrapper' onclick='return imgClickHandler()'><img src='" + linkUrl + "' class='unbound'></a>";
} else if (type == 'youtube') {
Youtube.startAnimation();
return "<a target='_blank' class='youtube' href='" + linkUrl + "'>" +
@@ -323,15 +323,23 @@ function removeOldMessages(){
}
}
-var TextEnabled = Preferences.getProperty("chat.textEnabled", "true") == "true";
+var TextEnabled = Preferences.getProperty("chat.textEnabled", "true") == "none";
var ImgsEnabled = Preferences.getProperty("chat.imgsEnabled", "true") == "true";
+function muteSelector() {
+ var muted = [];
+ for (nick in MUTES) {
+ muted.push(".nick_" + nick);
+ }
+ return muted.join(",");
+}
function setTextEnable() {
+ var muted = muteSelector();
if ($(this).attr('checked')) {
TextEnabled = true;
- Preferences.setProperty("chat.textEnabled", "true");
+ Preferences.setProperty("chat.textEnabled", "false");
track('UI', 'TextEnabled');
- $('.dump').not('.contains-image').show();
+ $('.dump').not('.contains-image,'+muted).show();
} else {
TextEnabled = false;
Preferences.setProperty("chat.textEnabled", "false");
@@ -341,11 +349,12 @@ function setTextEnable() {
};
function setImgsEnable() {
+ var muted = muteSelector();
if ($(this).attr('checked')) {
ImgsEnabled = true;
Preferences.setProperty("chat.imgsEnabled", "true");
track('UI', 'ImgsEnabled');
- $('.contains-image').show();
+ $('.contains-image').not(muted).show();
} else {
ImgsEnabled = false;
Preferences.setProperty("chat.imgsEnabled", "false");
@@ -372,8 +381,10 @@ function buildMessageDiv(msg, opts) {
var loadingClass = opts.isLoading ? ' loading' : '';
var containsImageClass = LastMsgContainsImage ? ' contains-image' : '';
var displayStyle = ((ImgsEnabled && LastMsgContainsImage) || (TextEnabled && !LastMsgContainsImage)) ? '' : ' style="display: none"';
+ if (displayStyle === '' && MUTES[nick])
+ displayStyle = ' style="display: none"';
- return '<div class="msgDiv dump ' + loadingClass + containsImageClass + '" ' + msgId + displayStyle + '>'
+ return '<div class="msgDiv dump ' + loadingClass + containsImageClass + " nick_" + nick + '" ' + msgId + displayStyle + '>'
+ '<span class="nick"><b><a href="' + RootDomain + nick + ' ">' + nick + '</a></b>'
+ ' <img src="'+Imgs.chatThumbDot+'" class="chat-thumb" onclick="Tag.favorite(this)"> '
+ '</span>'
@@ -381,17 +392,42 @@ function buildMessageDiv(msg, opts) {
+ '</div>';
}
+var MUTES = {};
+$(".mute").live("click", function(){
+ $(this).removeClass("mute");
+ $(this).addClass("unmute");
+ $(this).html("o");
+ var nick = $(this).parent().children("a").html().replace(/<img[^>]+>/,"");
+ $(".nick_" + nick).hide();
+ MUTES[nick] = true;
+});
+$(".unmute").live("click", function(){
+ $(this).removeClass("unmute");
+ $(this).addClass("mute");
+ $(this).html("x");
+ var nick = $(this).parent().children("a").html().replace(/<img[^>]+>/,"");
+ $(".nick_" + nick).show();
+ delete MUTES[nick];
+});
+
function buildUserDiv(user) {
+ var muted = MUTES[user.nick] ? '<span class="unmute">o</span>' : '<span class="mute">x</span>';
if (user.avatar) {
return '<div class="username">'
+ + muted
+ '<a href="' + RootDomain + escapeHtml(user.nick) + '" target="_blank">'
+ '<img src="' + user.avatar + '" width="50" height="50">'
- + escapeHtml(user.nick) + '</a></div>';
+ + escapeHtml(user.nick)
+ + '</a>'
+ + '</div>';
} else {
return '<div class="username">'
+ + muted
+ '<a href="' + RootDomain + escapeHtml(user.nick) + '" target="_blank">'
+ '<img src="' + RootDomain + 'static/img/noinfo.png" width="50" height="50">'
- + escapeHtml(user.nick) + '</a></div>';
+ + escapeHtml(user.nick)
+ + '</a>'
+ + '</div>';
}
}
@@ -425,7 +461,8 @@ function showFav(f) {
function updateFavs(fs) {
if (fs.length == 0)
return;
- $('#favbox').show();
+console.log("new faves");
+ $('#favbox').show();
$(fs).each(function(i, f) { showFav(f) });
}
@@ -538,11 +575,13 @@ function ifEnter(fn) {
function addNewMessages(msgs) {
var msgStr = $.map(msgs, buildMessageDiv).join('');
$('#messageList').append(msgStr);
+ Drag.bindImages();
}
function addNewMessage(msg, isLoading) {
var msgStr = buildMessageDiv(msg, { isLoading: true });
var div = $(msgStr).appendTo('#messageList');
+ Drag.bindImages();
return div;
}
@@ -567,7 +606,7 @@ function updateUI(msgs, users, favs) {
if (users !== null) {
var flattened = flattenUserJson(users);
if (!('userlist' in cache) || flattened != cache.userlist) {
- $("#userList").html($.map(users.sort(sortUsersByAlpha), buildUserDiv).join(''));
+ $("#userList").html($.map(users.sort(sortUsersByAlpha), buildUserDiv).join(''));
}
cache.userlist = flattened
}
@@ -595,17 +634,18 @@ function refresh() {
var onSuccess = function(json) {
try {
Timestamp = json.timestamp;
- $.map(json.messages, function(msg){ MessageContentCache[msg.msg_id.toString()] = msg.content })
+ $.map(json.messages, function(msg){ MessageContentCache[msg.msg_id.toString()] = msg.content })
var messages = $.grep(
json.messages,
function(m) { return !isDuplicateMessage(m) });
updateUI(messages, json.users, json.favs);
+console.log("update ui");
if (!Away.HasFocus)
Away.UnseenMsgCounter += messages.length;
} catch(e) {
if (IsAdmin && window.console) {
- console.error(e);
+ console.log(e);
}
}
setTimeout(refresh, 1500);
@@ -667,6 +707,7 @@ function initChat() {
else
dump.hide();
});
+ Drag.bindImages();
$('#msgInput').keyup(ifEnter(submitMessage));
$('#msgSubmit').click(sendClicked);
@@ -1970,3 +2011,165 @@ var SHA1 = {
},
"bit_rol": function(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) }
}
+
+window.Drag = {
+ 'imgSrc': "",
+ 'bindImages': function (){
+ $('.unbound').each(function(index,img){
+ img.addEventListener('dragstart', Drag.start, false);
+ $(this).removeClass('unbound');
+ });
+ },
+ 'start': function(e){
+ // console.log(this);
+ if (this.src) Drag.imgSrc = this.src;
+ },
+ 'enter': function(e){
+ Drag.chatbox.classList.add('over');
+ // console.log('enter')
+ return false;
+ },
+ 'over': function(e){
+ if (e.preventDefault) {
+ e.preventDefault(); // Necessary. Allows us to drop.
+ }
+ // console.log('over')
+ return false;
+ },
+ 'leave': function(e){
+ Drag.chatbox.classList.remove('leave');
+ // console.log('leave')
+ return false;
+ },
+ 'end': function(e){
+ Drag.chatbox.classList.remove('end');
+ // console.log('end')
+ return false;
+ },
+ 'drop': function(e){
+ Drag.chatbox.classList.remove('over');
+ if (e.stopPropagation) {
+ e.stopPropagation(); // stops the browser from redirecting.
+ }
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
+ // console.log('drop');
+ Drag.chatbox.value += " " + Drag.imgSrc;
+ Drag.chatbox.value += " ";
+ Drag.chatbox.focus();
+ // console.log(Drag.imgSrc);
+ Drag.imgSrc = "";
+ // ok.onclick();
+ return false;
+ }
+}
+$(function(){
+ Drag.chatbox = document.getElementById("msgInput");
+ if (! Drag.chatbox || $.browser.mozilla) return;
+ Drag.chatbox.addEventListener('dragenter', Drag.enter, false);
+ Drag.chatbox.addEventListener('dragover', Drag.over, false);
+ Drag.chatbox.addEventListener('dragleave', Drag.leave, false);
+ Drag.chatbox.addEventListener('dragend', Drag.end, false);
+ Drag.chatbox.addEventListener('drop', Drag.drop, false);
+});
+
+// generate a new CSS rule and apply it immediately
+// (more persistent than dumping a style tag)
+window.cssRule = function (selector, declaration) {
+ var x = document.styleSheets,y=x.length-1;
+ x[y].insertRule(selector+"{"+declaration+"}",x[y].cssRules.length);
+ $(selector).css(declaration.split(": "));
+};
+
+
+// manual fave palette by ohgod
+$(function(){
+ $('#manual-palette-button').click(manPaletteClicked);
+ $('#manual-add-button').click(function () {
+ addManualFav($('#manual-add-url-txt').val().trim());
+ $('#manual-add-url-txt').val("");
+ });
+ $('#manual-remove-button').click(function () {
+ removeManualFav($('#manual-add-url-txt').val().trim());
+ $('#manual-add-url-txt').val("");
+ });
+});
+
+function manPaletteClicked() {
+ if ($("#manual-palette").css("display") == "none") {
+ manPaletteShow();
+ } else {
+ $("#manual-palette").css("display", "none");
+ $("#manual-palette-thumbs").html("");
+ }
+};
+
+function manPaletteShow() {
+ $("#manual-palette").show();
+ if (! hasLocalStorage()) {
+ $('#manual-palette-localstorage-error').show()
+ } else if (manPaletteIsEmpty()) {
+ $('#manual-palette-thumbs-empty').show();
+ } else {
+ manualPaletteBuildImageThumbs();
+ }
+};
+
+function hasLocalStorage() {
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null;
+ } catch (e) {
+ return false;
+ }
+}
+
+function manPaletteIsEmpty() {
+ return localStorage.manual_favs === undefined || localStorage.manual_favs === "[]" || localStorage.manual_favs === "";
+};
+
+function getManualFaves() {
+ return localStorage.manual_favs ? JSON.parse(localStorage.manual_favs) : [];
+};
+
+function setManualFaves(mfavs) {
+ localStorage.manual_favs = JSON.stringify(mfavs);
+};
+
+function manualPaletteBuildImageThumbs() {
+ var imgs = JSON.parse(localStorage.manual_favs);
+ if (imgs && imgs.length != 0) {
+ for (var i = 0; i < imgs.length; i++) {
+ $("#manual-palette-thumbs").append("<img onclick='paletteToChat(this)' src='" + imgs[i] + "'>");
+ }
+ }
+};
+
+function addManualFav(imgsrc) {
+ if (!imgsrc) return;
+ if (hasLocalStorage()) {
+ if (manPaletteIsEmpty())
+ $("#manual-palette-thumbs").html("");
+ var mfavs = getManualFaves();
+ if ($.inArray(imgsrc, mfavs) == -1) {
+ mfavs.push(imgsrc);
+ setManualFaves(mfavs);
+ $("#manual-palette-thumbs").append("<img onclick='paletteToChat(this)' src='" + imgsrc + "'>");
+ }
+ }
+};
+
+function removeManualFav(imgsrc) {
+ if (hasLocalStorage()) {
+ var mfavs = getManualFaves();
+ var idx = $.inArray(imgsrc, mfavs);
+ if (idx != -1) {
+ mfavs.splice(idx, 1);
+ setManualFaves(mfavs);
+ $("#manual-palette-thumbs").html("");
+ manualPaletteBuildImageThumbs();
+ }
+ }
+};
+
+
diff --git a/static/js/register.js b/static/js/register.js
index c767e92..0f5bb1f 100755
--- a/static/js/register.js
+++ b/static/js/register.js
@@ -34,7 +34,7 @@ function submitRegistration() {
if (window.history && history.length > 1)
history.go(-1);
else
- location.href = '/';
+ location.href = 'http://dump.fm/';
};
var onError = function(resp) {
@@ -54,7 +54,7 @@ function submitRegistration() {
$.ajax({
type: 'POST',
timeout: 5000,
- url: '/submit-registration',
+ url: '/dubmit-registration',
data: {'nick': nick, 'email': email, 'hash': hash },
cache: false,
dataType: 'json',
diff --git a/static/register.html b/static/register.html
index 9bf03f4..7ccf80d 100644
--- a/static/register.html
+++ b/static/register.html
@@ -15,34 +15,20 @@
<body>
<div id="rapper"></div>
- <div id="content" style="z-index:77;">
+ <div id="content" style="z-index:77;height:100%;">
<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:center;margin-bottom:10px;">Registration is currently closed.
- <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" />
- <br>
-
- <div align="center">
- <input type="submit" class="submit" id="submit" value="Register!" />
- </div>
- <img id="register-spinner" src="/static/img/spinner.gif">
+ <br><br>
+ Maybe ask a friend?</label>
+
</div>
</div>
</div>
diff --git a/static/webcam/webcam.js b/static/webcam/webcam.js
index f7ff5c4..671d8ce 100644
--- a/static/webcam/webcam.js
+++ b/static/webcam/webcam.js
@@ -55,7 +55,7 @@ window.webcam = {
},
show: function() {
- var closeHtml = '<img src="/static/webcam/close.gif" onclick="webcam.hide()" id="webcam-button-close" />'
+ var closeHtml = '<div onclick="webcam.hide()" id="webcam-button-close">X</div>'
var camHtml = '<div id="webcam-preview">' + webcam.get_html(480, 360) + closeHtml + "</div>"
$("body").append(camHtml)
$("#webcam-button-upload").addClass("invisible")