diff options
| -rw-r--r-- | scripts/s3upload.py | 4 | ||||
| -rw-r--r-- | src/admin.clj | 19 | ||||
| -rw-r--r-- | src/config.clj | 2 | ||||
| -rw-r--r-- | src/email.clj | 3 | ||||
| -rw-r--r-- | src/redisload.clj | 4 | ||||
| -rw-r--r-- | src/site.clj | 8 | ||||
| -rwxr-xr-x | src/utils.clj | 2 | ||||
| -rwxr-xr-x | static/css/dump.css | 108 | ||||
| -rw-r--r-- | static/error/502.html | 2 | ||||
| -rw-r--r-- | static/html/terms.html | 16 | ||||
| -rw-r--r-- | static/js/fullscreen.js | 355 | ||||
| -rw-r--r-- | static/js/pichat.js | 229 | ||||
| -rwxr-xr-x | static/js/register.js | 4 | ||||
| -rw-r--r-- | static/register.html | 24 | ||||
| -rw-r--r-- | static/webcam/webcam.js | 2 | ||||
| -rw-r--r-- | template/banner.st | 8 | ||||
| -rw-r--r-- | template/fame.st | 2 | ||||
| -rw-r--r-- | template/footer.st | 7 | ||||
| -rw-r--r-- | template/frontpage.st | 22 | ||||
| -rw-r--r-- | template/fullscreen.st | 131 | ||||
| -rw-r--r-- | template/fullscreen_front.st | 2 | ||||
| -rw-r--r-- | template/messagepane.st | 27 | ||||
| -rw-r--r-- | template/mutes.st | 2 | ||||
| -rw-r--r-- | template/privacy.st | 70 | ||||
| -rw-r--r-- | template/profile.st | 6 | ||||
| -rw-r--r-- | template/rooms/VIP.st | 3 | ||||
| -rw-r--r-- | template/terms.st | 65 |
27 files changed, 842 insertions, 285 deletions
diff --git a/scripts/s3upload.py b/scripts/s3upload.py index e761ea5..f39ea19 100644 --- a/scripts/s3upload.py +++ b/scripts/s3upload.py @@ -6,8 +6,8 @@ import time import S3 CONN = None -AWS_ACCESS_KEY_ID = 'AKIAIOP42NFKLLJXEGJQ' -AWS_SECRET_ACCESS_KEY = '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' +AWS_ACCESS_KEY_ID = 'AKIAIVBEMR22OOG7OMMQ' +AWS_SECRET_ACCESS_KEY = '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' BUCKET_NAME = 'dumpfm' def get_or_initialize_aws_connection(): diff --git a/src/admin.clj b/src/admin.clj index 0daf66a..53efedf 100644 --- a/src/admin.clj +++ b/src/admin.clj @@ -31,6 +31,10 @@ (def mute-refresh-period-sec 60) +(def fetch-new-users-query " +SELECT * FROM users ORDER BY created_on DESC LIMIT 200 +") + (def fetch-active-mutes-query " SELECT m.*, (m.set_on + m.duration) AS expiry, @@ -68,6 +72,8 @@ AND a.user_id = m.admin_id LIMIT 1 ") +(defn fetch-new-users [] + (do-select [fetch-new-users-query])) (defn fetch-active-mutes [] (do-select [fetch-active-mutes-query])) @@ -158,6 +164,9 @@ AND cancelled = false :expiry format-date-first-timestamp :cancelled #(if % "Cancelled" "Expired")}) +(def user-formatter {:created_on format-date-first-timestamp + }) + (defn show-mutes [session] (if-vip (let [st (fetch-template "mutes" session) @@ -169,6 +178,16 @@ AND cancelled = false (.setAttribute st "inactive" (f inactive)) (.toString st)))) +;; Recent users list + +(defn show-users [session] + (if-vip + (let [st (fetch-template "users" session) + users (fetch-new-users) + formatter (partial apply-formats user-formatter) + f #(map (comp stringify-and-escape formatter) %)] + (.setAttribute st "users" (f users)) + (.toString st)))) ;; Debug Page diff --git a/src/config.clj b/src/config.clj index 1cf5ae6..b6abfb5 100644 --- a/src/config.clj +++ b/src/config.clj @@ -17,7 +17,7 @@ (def db-server (if (= *server-user* "dumpfmprod") - "192.168.162.138" + "localhost"; "192.168.162.138" "localhost")) (def redis-server diff --git a/src/email.clj b/src/email.clj index 3231b60..8a29418 100644 --- a/src/email.clj +++ b/src/email.clj @@ -67,7 +67,8 @@ :mime (classify-mimetype text))) (def *admin-lists* {"dumpfmprod" ["info@dump.fm"] - "sostler" ["sbostler@gmail.com"]}) + "sostler" ["sbostler@gmail.com"] + "jules" ["julescarbon@gmail.com"]}) (defn get-admins [] (or (*admin-lists* (System/getProperty "user.name")) diff --git a/src/redisload.clj b/src/redisload.clj index c08cb32..abb0252 100644 --- a/src/redisload.clj +++ b/src/redisload.clj @@ -166,5 +166,7 @@ WHERE (doseq [dt (get-fav-date-range)] (build-daily-hall dt))) -;(build-daily-hall (parse-yyyy-mm-dd-date "2010-05-30")) +(build-daily-hall (parse-yyyy-mm-dd-date "2011-02-22")) +(build-daily-hall (parse-yyyy-mm-dd-date "2011-02-23")) + ;(build-all-daily-hall) diff --git a/src/site.clj b/src/site.clj index f386f2a..44b0c07 100644 --- a/src/site.clj +++ b/src/site.clj @@ -225,6 +225,7 @@ (if-let [[prev-date cur-date next-date] (parse-front-page-date dt-str)] (cond (.before cur-date earliest-daily-hall) (redirect-to "/") (.after cur-date today) (redirect-to "/") + ;(not (:nick session)) (serve-meme session "fullscreen") :else (let [st (fetch-template "frontpage" session) dumps (map process-message-for-output (if (:nick session) @@ -237,6 +238,7 @@ (if-not (.before prev-date earliest-daily-hall) (.setAttribute st "prev_date" (format-yyyymmdd prev-date))) (.setAttribute st "current_date" (format-yyyymmdd cur-date)) + (.setAttribute st "timestamp" (System/currentTimeMillis)) (.toString st))) (redirect-to "/"))))) @@ -952,8 +954,9 @@ WHERE user_id IN (str "select url from image_urls where url ilike " (str-join " and url ilike " (take num-tokens (repeat "?"))) " - order by last_posted desc + order by random() limit 200;")) +;; order by last_posted desc ;; note: _ is a wildcard in a postgres 'like' query... (defn search-replace-weird-chars [token] @@ -1268,7 +1271,7 @@ WHERE user_id IN ;; TODO: add form tokens for all destructive actions (POST "/msg" (validated-msg session params request)) - (POST "/submit-registration" (register session params request)) + (POST "/dubmit-registration" (register session params request)) (POST "/update-profile" (update-profile session params)) (GET "/directory" (directory session 0)) (GET "/directory/:offset" @@ -1282,6 +1285,7 @@ WHERE user_id IN (GET "/debug" (debug-page session flash)) (POST "/debug" (debug-commmand! session params)) (GET "/mutes" (show-mutes session)) + (GET "/users" (show-users session)) (GET "/roomlist" (show-rooms session)) (POST "/mute" (mute! session params)) (POST "/cancel-mute" (handle-cancel-mute! session params)) diff --git a/src/utils.clj b/src/utils.clj index 1bccb09..aa73ba9 100755 --- a/src/utils.clj +++ b/src/utils.clj @@ -421,7 +421,7 @@ (defn is-vip? [session] (session :is_admin)) -(def super-vips #{"timb" "scottbot" "ryder"}) +(def super-vips #{"timb" "scottbot" "ryder" "ryz"}) (defn is-super-vip? [session] (contains? super-vips (:nick session))) 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’s own use, and not for the use or benefit 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 defined 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’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 modifications. Use of the Services by Subscriberfollowing such modification constitutes Subscriber's acceptance of the terms and conditions ofthis Agreement as modified. </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’s own use, and not for the use or benefit 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 defined 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’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 modification constitutes Subscriber's acceptance of the terms and conditions ofthis Agreement as modified. </P ><P >Subscriber certifies 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 certifies 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’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’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, modification, 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 (“ContentLicense”) in order to provide the Services. On termination of Subscriber’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’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 beennotified 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’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 (“ContentLicense”) 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’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’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’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’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 specific URLs of material that Dump.Fm has removed or to which Dump.Fm hasdisabled access. </P +>The specific 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 notification 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 notification 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 misidentification 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 misidentification 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") diff --git a/template/banner.st b/template/banner.st index 5927a62..0ab1a7b 100644 --- a/template/banner.st +++ b/template/banner.st @@ -72,8 +72,10 @@ <div id="dumplist"> $if(user_nick)$ - <a href="http://dump.fm/fullscreen">checkout dump.fm in full-screen </a> - <a href="http://abcdef4.dump.fm/">MYSTERY ROOM!!!!!!!! </a> $else$ <style>#dumplist{z-index:-1!important;}</style> $endif$ - $if(isadmin)$ - <a href="http://vip.dump.fm/">NAUGHTY BOYS DELIGHT </a> + <a href="http://dump.fm/fullscreen">checkout dump.fm in full-screen </a> + - <a href="http://abcdef4.dump.fm/">MYSTERY ROOM!!!!!!!! </a> + $else$ <style>#dumplist{z-index:-1!important;}</style> $endif$ + $if(isadmin)$ - <a href="http://vip.dump.fm/">NAUGHTY GIRLS/AND-OR/BOYS DELIGHT </a> $endif$ </div> @@ -104,4 +106,4 @@ <a id="search-control-close" href="javascript:Search.close()">close</a> </div> <div id="search-results-images"></div> - </div>
\ No newline at end of file + </div> diff --git a/template/fame.st b/template/fame.st index d773447..52cab6d 100644 --- a/template/fame.st +++ b/template/fame.st @@ -3,7 +3,7 @@ <title>dump.fm hall of fame</title> $head()$ <script> - jQuery(document).ready(initLog); + jQuery(document).ready(function(){ initLog () }); </script> </head> <body> diff --git a/template/footer.st b/template/footer.st index 5987bd1..c7980d9 100644 --- a/template/footer.st +++ b/template/footer.st @@ -1,8 +1,7 @@ -@2010 <a href="/">dump.fm</a> -<a href="http://dump.fm/about_us" style="word-spacing: normal">About Us</a> +<a href="/">dump.fm</a> +<!--<a href="http://dump.fm/about_us" style="word-spacing: normal">About Us</a> <a href="http://dump.fm/help" style="word-spacing: normal">Help FAQ</a> -<a href="http://dump.fm/terms">Terms</a> -<a href="http://dump.fm/privacy">Privacy</a> +<a href="http://dump.fm/terms">Terms</a>--> $google_analytics()$ $debug_log()$ diff --git a/template/frontpage.st b/template/frontpage.st index 22c780c..e8ceea6 100644 --- a/template/frontpage.st +++ b/template/frontpage.st @@ -431,7 +431,7 @@ jQuery(window).load(function(){ <a href="$domain$/tags" onclick="pageTracker._trackEvent('button', 'banner-search'); return true;"><img src="$domain$/static/img/thumbs/searchbaricon.png"/> Tags</a> </div>--> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.facebook.com%2Fpages%2Fdumpfm%2F240317626149&layout=button_count&show_faces=false&width=450&action=like&font=tahoma&colorscheme=light&height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:21px;" allowTransparency="true"id="fblike"></iframe> - <a href="$domain$/register" id="disregister">Register!</a> + <!-- <a href="$domain$/register" id="disregister">Register!</a>--> $endif$ <div id="searchbox"> @@ -468,13 +468,16 @@ jQuery(window).load(function(){ <iframe src="$domain$/fullscreen" style="overflow:hidden;width:240px;height:200px;border:0px;"></iframe> </div> $else$ - <div class="alttxt"> - dump.fm is a real-time image chat!<br><br> - check out our top dumps + <div class="alttxt"style="font-size:18px;text-transform:uppercase;text-align:left"> + dump.fm is an elite real-time image chat community. we host more than 1,500,000 images. + + register <a href="http://dump.fm/register">here.</a> + <br>view the dump.fm feed in <a href="/fullscreen">fullscreen. :)</a> + <!-- <br> <br> <iframe src="$domain$/fullscreen" style="overflow:hidden;width:240px;height:200px;border:0px;"></iframe> <br><br> - <strong> - <a href="$domain$/login" class="signin">sign in</a></strong> or <strong><a href="$domain$/register">register</a> - </strong> + <strong> + <a href="$domain$/login" class="signin">sign in</a></strong>or <strong><a href="$domain$/register">register</a> + </strong>--> </div> $endif$ </div> @@ -498,7 +501,7 @@ $endif$ <!--START FOOTER $footer()$--> -<br><br><center> +<!--<br><br><center> <div id="footer"> @2011 <a href="/">dump.fm</a> <a href="$domain$/about_us" style="word-spacing: normal">About Us</a> @@ -506,7 +509,7 @@ $endif$ <a href="$domain$/terms">Terms</a> <a href="$domain$/privacy">Privacy</a> </div></center> -</div> +</div>--> $google_analytics()$ $debug_log()$ @@ -526,3 +529,4 @@ $debug_log()$ <script type="text/javascript">m00=document.getElementsByTagName("img");m01=m00.length;function images_loading_bar(){m02=0;for(i=0;i<m01;i++)m02+=(m00[i].complete)?1:0;document.getElementById("LB1").style.width=Math.round(m02/m01*100)+'px';if(m02==m01)setTimeout("document.getElementById('LB0').style.display='none'",128); else setTimeout("images_loading_bar()", 64);};images_loading_bar();</script> </body> </html> + diff --git a/template/fullscreen.st b/template/fullscreen.st index 9ccf0c1..9556bf2 100644 --- a/template/fullscreen.st +++ b/template/fullscreen.st @@ -25,11 +25,22 @@ box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; } #loginbox { - background: white; - z-index: 999; - position: absolute; - display: none; - } +background: white; +z-index: 999; +position: absolute; +font-size: 20%; +width: 335px; +height: 220px; +margin-left: -170px; +left: 50%; +border: 1px solid; +padding: 2%; +top: 20%; +text-align: justify; +-moz-box-shadow: -1px 1px #000,-2px 2px #000,-3px 3px #000,-4px 4px #000,-5px 5px #000,-6px 6px #000; +-webkit-box-shadow: -1px 1px black,-2px 2px black,-3px 3px black,-4px 4px black,-5px 5px black,-6px 6px black; +box-shadow: -1px 1px black,-2px 2px black,-3px 3px black,-4px 4px black,-5px 5px black,-6px 6px black; +} #logininner { width: 30em; height: 20em; @@ -42,13 +53,9 @@ } #formcontainer { padding: 0; - margin-top: 20%; width: 80%; position: relative; } - #nickInput, #passwordInput { - width: 100%; - } #piccol { width: 50%; float: right; @@ -60,7 +67,6 @@ } #spinner { display: none; } #forgetpw { - position: absolute; left: 5px; bottom: 5px; font-size: 80%; @@ -80,65 +86,80 @@ text-align: center; margin-top: 250px; } - - #loginclose { - position: absolute; - right: 3px; - top: 3px; - } - #big-image{font-size:50px;text-align: justify; text-justify: newspaper; text-shadow: 1px 1px #eee, 2px 2px #f0e, 3px 3px #eee,4px 4px #f0e,5px 5px #eee, 3px 3px #eee,4px 4px #f0e,5px 5px #eee,6px 6px #f0e,6px 6px #eee,7px 7px #f0e,7px 7px #eee,8px 8px #f0e,8px 8px #eee,9px 9px #f0e,9px 9px #eee; color:#fff} + input {max-width: 100px; +-moz-box-shadow: -1px 1px #000,-2px 2px #000,-3px 3px #000,-4px 4px #000,-5px 5px #000,-6px 6px #000; +-webkit-box-shadow: -1px 1px black,-2px 2px black,-3px 3px black,-4px 4px black,-5px 5px black,-6px 6px black; +box-shadow: -1px 1px black,-2px 2px black,-3px 3px black,-4px 4px black,-5px 5px black,-6px 6px black; +border: 1px solid;} +input:hover { + -moz-box-shadow: -1px 1px #000,-2px 2px #000,-3px 3px #000; + -webkit-box-shadow: -1px 1px #000,-2px 2px #000,-3px 3px #000; + box-shadow: -1px 1px #000,-2px 2px #000,-3px 3px #000,inset -2px 2px 2px #333; + margin-top: 2px; + margin-left: -2px;} + input:active { + -moz-box-shadow: 0px 0px white; + -webkit-box-shadow: 0px 0px white; + box-shadow: -1px 1px #000,0px 0px white; + margin-top: 2px; + margin-left: -4px; + box-shadow: inset -3px 3px 4px #333; + cursor: pointer;} +#remembermeInput { + margin-top: 0; margin-left: 0; +} + #big-image{font-size:20px;text-align: left; text-justify: newspaper; color:#000} #memelogo { position: fixed; z-index: 999; bottom: 30px; right: 80px; } .sublogo { font-family: Monaco, "Courier New", Courier, monospace; } a { color:#000 } + #toplogo{position: fixed;display:none; +top: 0; +left: 0;} +#big-image {cursor:url('http://dump.fm/static/img/thumbs/heartfaved.gif'), pointer} </style> <script>jQuery(initLogin)</script> </head> <body> - <div id="loginbox"> - <div id="logininner"> - <div id="infocol"> - <center> - <div id="formcontainer"> + + + $if(user_nick)$ +<!-- + <div id="loginbox"> + <img src="http://wiki.bennington.edu/mediawiki/images/9/9e/Dumplogo.gif"><br> + <p> this is dump.fm, the first ever real-time image sharing website. behind me is a fullscreen feed of whats currently going on. + if you're a member of the club, sign in below. if not feel free to <a href="#" onclick="jQuery('#loginbox').hide(); return false;">close this window</a> and enjoy the sick pix.</p> <form onsubmit="login(); return false;"> - <div align="left">username</div> - <div><input id="nickInput"></div> - <br> - <div align="left">password</div> - <div><input id="passwordInput" type="password"></div> - <div align="right" style="font-size: 80%">remember me? <input id="remembermeInput" type="checkbox" checked="true"></div> - <br> - <div> - <center><input type="submit" value="LOGIN"></center> + <p>username : <input id="nickInput"></p> + <p>password : <input id="passwordInput" type="password"></p> + <p> + remember me? <input id="remembermeInput" type="checkbox" checked="true"> <input type="submit" value="LOGIN"></p> + <img id="spinner" src="/static/img/spinner.gif"> - </div> </form> - </div> - </center> - </div> - <div id="piccol"> - <center><img id="loginimg" src="/static/img/danceman.gif"></center> - <center><i>join the party</i></center> - </div> <div id="errormsg"></div> <div id="forgetpw"><a href="$domain$/reset">forgot password?</a></div> - <div id="loginclose"><a href="#" onclick="jQuery('#loginbox').hide(); return false;">X</a></div> - </div> - </div> - - <div id="memelogo"> - - <br> - <div class="sublogo"> - $if(user_nick)$ - <img src="/static/img/thumbs/heart.gif">click to fav + <a href="/chat"id="toplogo"><img src="http://wiki.bennington.edu/mediawiki/images/9/9e/Dumplogo.gif"></a> <img src="http://dump.fm/static/img/thumbs/heartfaved.gif" id="fav-indicator"> + </div> +--> $else$ -<a href="http://dump.fm"><img src="http://dump.fm/static/img/dumppixelhover.png" class="memelogo"></a> - <a href="#" onclick="showLogin(); return false;">LOGIN</a> | <a href="$domain$/register">REGISTER</a> + <div id="loginbox"> + <img src="http://wiki.bennington.edu/mediawiki/images/9/9e/Dumplogo.gif"><br> + <p> this is dump.fm, the first ever real-time image sharing website. behind me is a fullscreen feed of whats currently going on. + if you're a member of the club, sign in bellow. if not feel free to <a href="#" onclick="jQuery('#loginbox').hide(); return false;">close this window</a> and enjoy the sick pix.</p> + <form onsubmit="login(); return false;"> + <p>username : <input id="nickInput"></p> + <p>password : <input id="passwordInput" type="password"></p> + <p> + remember me? <input id="remembermeInput" type="checkbox" checked="true"> <input type="submit" value="LOGIN"></p> + + <img id="spinner" src="/static/img/spinner.gif"> + </form> + <div id="errormsg"></div> + <div id="forgetpw"><a href="$domain$/reset">forgot password?</a></div> + </div> $endif$ - </div> - </div> - <div id="big-image">waiting 4 new image from dump.fm.............</div> - <img src="http://dump.fm/static/img/thumbs/heartfaved.gif" id="fav-indicator"> + + <div id="big-image"></div> <script> initFullscreen() </script> diff --git a/template/fullscreen_front.st b/template/fullscreen_front.st index 22f2d65..fab8ef9 100644 --- a/template/fullscreen_front.st +++ b/template/fullscreen_front.st @@ -22,7 +22,7 @@ #spinner { display: none; } #forgetpw { - position: absolute; + position: absolute;display:none; left: 5px; bottom: 5px; font-size: 80%; diff --git a/template/messagepane.st b/template/messagepane.st index 1005679..94da6e9 100644 --- a/template/messagepane.st +++ b/template/messagepane.st @@ -2,21 +2,26 @@ $if(user_nick)$ <div id="userList"> $users: { u | - <div class="username"><a href="/$u.nick$" target="_blank"> + <div class="username"><a href="/$u.nick$" target="_blank"> $u.score_ent$ $if(u.avatar)$ + <img src="$u.avatar$" width="50" height="50"> $else$ + <img src="/static/img/noinfo.png"> $endif$ - $u.nick$</a><br> + $u.nick$ + + </a> + <br> </div> }$ </div>$endif$ <div id="favbox" style="display: hidden"></div> <div id="messageList"> $messages: { m | - <div class="msgDiv oldmsg dump $if(m.favorited)$favorite$endif$ $if(m.is_image)$contains-image$endif$" id="message-$m.message_id$" nick="$m.nick$"> + <div class="msgDiv oldmsg dump$if(m.favorited)$favorite$endif$ $if(m.is_image)$contains-image$endif$ nick_$m.nick$" id="message-$m.message_id$" nick="$m.nick$"> <span class="nick"> <b><a href="$domain$/$m.nick$" target="_blank">$m.nick$</a></b> $if(m.favorited)$ @@ -41,6 +46,7 @@ $if(user_nick)$ <input id="webcam-button-upload" value="Webcam" type="submit"type="button"> <input id="webcam-button-snap" value="Send Pic" type="submit"type="button" class="invisible blink"> <button id="palette-button"></button> + <button id="manual-palette-button"></button> </div> <div id="effects-msg" class="invisible">click on your face for effects!</div> </div> @@ -58,3 +64,18 @@ $else$ $endif$ </div> </div> + + <div id="manual-palette"> + <div id="manual-palette-thumbs"> + <div id="manual-palette-localstorage-error" class="error"> + Unfortunately you can't use this manual fav palette because your browser doesn't support localStorage D: + </div> + <div id="manual-palette-thumbs-empty" class="error"> + This is the <a href='http://dump.fm/images/20120711/1341984961267-dumpfm-ohgod-boring_name.png'>manual fav palette</a>. + You can add and remove images from here manually by pasting the url below to keep them around forever! ALSO IT MIGHT BREAK. + </div> + </div> + <input id='manual-add-url-txt' type='text'> + <button id='manual-add-button'>Add</button> + <button id='manual-remove-button'>Rmv</button> + </div> diff --git a/template/mutes.st b/template/mutes.st index d8d9e96..4bf07bc 100644 --- a/template/mutes.st +++ b/template/mutes.st @@ -6,7 +6,7 @@ type="text/javascript"></script> <script src="/static/js/jquery.tablesorter.min.js" type="text/javascript"></script> - <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css" + <link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/ui-lightness/jquery-ui.css"> <script src="/static/js/admin.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="/static/tsort/style.css"> diff --git a/template/privacy.st b/template/privacy.st deleted file mode 100644 index 0bd8191..0000000 --- a/template/privacy.st +++ /dev/null @@ -1,70 +0,0 @@ -<html> - <head> - <link href="/static/css/pages.css" rel="stylesheet" type="text/css" media="screen"/> - <link href="/static/css/header.css" rel="stylesheet" type="text/css" media="screen"/> - <script type="text/javascript" src="/static/js/win.js"></script> - <script type="text/javascript" src="/static/jquery.em.js"></script> - - <script type="text/javascript"> - -jQuery(function() -{ - jQuery('.scroll-pane').jScrollPane(); -}); - - - </script> - - <title>dump.fm</title> - $head()$ - </head> - <body style=" font-family: Arial, Helvetica, sans-serif; - background-color:#f0f9ff; - background-image:url(/static/img/fade-blue.png)!important; - background-repeat:repeat-x; - background-position:top; -background-attachment:fixed;" onload=" - javascript:CreateDropdownWindow('dump.fm', '360px', true, 'news', 20, 115); - javascript:CreateDropdownWindow('privacy agreement', '560px', true, 'archive', 420, 60); - - - - "> - $banner()$ - - - - - <div style="overflow:hidden; height:600px; position:absolute;display:none;" id="news"> - <div style="padding:0px;" id="content" name="content"> <div style="background-color:#fff"><center> -<img src="/static/img/dumpclouds.png"><br><br> -<h5> -©2010 All Rights Reserved<br><br> -<a href="mailto:info@dump.fm"> info@dump.fm</a> -</center><br></div></h5> - </div></div> - - <div style="display:none;"id="archive"> - <div style="padding:0px" id="content" name="content"> - - - <iframe src="/static/html/privacy.html" style="overflow-x:hidden; padding:5;background-image:url(/static/img/hearts.gif);background-repeat:repeat;" width="550px" height="500px"></iframe> - </div> - </div> - <div style="display:none;"id="link"> - <div id="content" name="content"> - - - </div> - </div> - - </div> - </div> - </div> -<div id="hugescreen"><img src="/static/hugescreen.png"></div> - - <div id="footerc"> - $footer()$ - </div> - </body> -</html> diff --git a/template/profile.st b/template/profile.st index f37aeba..120a472 100644 --- a/template/profile.st +++ b/template/profile.st @@ -4,6 +4,12 @@ <meta property="og:image" content="$avatar$"/> <meta property="og:title" content="$nick$'s dump.fm"/> <meta property="og:site_name" content="dump.fm"/> + <meta property="og:type" content="website" /> + <meta property="og:url" content="http://dump.fm/$nick$"/> + <meta property="og:description" content=""/> + <meta property="fb:admins" content="34601449,100001923956223" /> + <meta property="fb:app_id" content="119457341519154" /> + $head()$ <script src="/static/js/jquery.editinplace.1.0.1.packed.js" type="text/javascript"></script> <script src="/static/js/ajaxupload.js"></script> diff --git a/template/rooms/VIP.st b/template/rooms/VIP.st index 442b476..59e7406 100644 --- a/template/rooms/VIP.st +++ b/template/rooms/VIP.st @@ -141,7 +141,10 @@ <h1>Welcome to the cool club</h1> <ul> <li><a href="$domain$/roomlist">Rooms</a></li> + <li><a href="$domain$/users">New Users</a></li> <li><a href="$domain$/mutes">Mutes</a></li> + <li><a href="http://dump.fm/static/super/">Registration</a></li> + <li><a href="http://temp.dump.fm/">Temp</a></li> </ul> </div> </body> diff --git a/template/terms.st b/template/terms.st deleted file mode 100644 index d37a28c..0000000 --- a/template/terms.st +++ /dev/null @@ -1,65 +0,0 @@ -<html> - <head> - <link href="/static/css/pages.css" rel="stylesheet" type="text/css" media="screen"/> - <link href="/static/css/header.css" rel="stylesheet" type="text/css" media="screen"/> - <script type="text/javascript" src="/static/js/win.js"></script> - <script type="text/javascript"> - -jQuery(function() -{ - jQuery('.scroll-pane').jScrollPane(); -}); - - - </script> - - <title>dump.fm</title> - $head()$ - </head> - <body style=" font-family: Arial, Helvetica, sans-serif; - background-color:#f0f9ff; - background-image:url(/static/img/fade-blue.png)!important; - background-repeat:repeat-x; - background-position:top; -background-attachment:fixed;" onload=" - javascript:CreateDropdownWindow('dump.fm', '360px', true, 'news', 20, 115); - javascript:CreateDropdownWindow('terms of service', '560px', true, 'archive', 420, 60); - - - - "> - $banner()$ - - - - - <div style="overflow:hidden; height:600px; position:absolute;display:none;" id="news"> - <div style="padding:0px;" id="content" name="content"> <div style="background-color:#fff"><center> -<img src="/static/img/dumpclouds.png"><br><br> -<h5> -©2010 All Rights Reserved<br><br> -<a href="mailto:info@dump.fm"> info@dump.fm</a> -</center><br></div></h5> - </div></div> - - <div style="display:none;"id="archive"> - <div style="padding:0px" id="content" name="content"> - - - <iframe src="/static/html/terms.html" style="overflow-x:hidden; padding:5;background-image:url(/static/img/hearts.gif);background-repeat:repeat;" width="550px" height="500px"></iframe> - </div> - </div> - <div style="display:none;"id="link"> - - </div> - - </div> - </div> - </div> -<div id="hugescreen"><img src="/static/img/hugescreen.png"></div> - - <div id="footerc"> - $footer()$ - </div> - </body> -</html> |
