summaryrefslogtreecommitdiff
path: root/static/js
diff options
context:
space:
mode:
Diffstat (limited to 'static/js')
-rwxr-xr-xstatic/js/finger.js2
-rw-r--r--static/js/pages/chat_init.js36
-rwxr-xr-xstatic/js/pichat.butt.js35
-rwxr-xr-xstatic/js/pichat.js66
-rwxr-xr-xstatic/js/src/_main.js14
-rwxr-xr-xstatic/js/src/search.js11
-rwxr-xr-xstatic/js/src/share.js8
-rwxr-xr-xstatic/js/src/tag.js2
-rwxr-xr-xstatic/js/src/text.js8
-rwxr-xr-xstatic/js/src/util.js10
-rwxr-xr-xstatic/js/src/youtube.js13
11 files changed, 139 insertions, 66 deletions
diff --git a/static/js/finger.js b/static/js/finger.js
index 5f75c12..3c5db9e 100755
--- a/static/js/finger.js
+++ b/static/js/finger.js
@@ -1,3 +1,3 @@
-;(function(name,context,definition){if(typeof module!=='undefined'&&module.exports){module.exports=definition()}else if(typeof define==='function'&&define.amd){define(definition)}else{context[name]=definition()}})('Fingerprint',this,function(){'use strict';var Fingerprint=function(options){var nativeForEach,nativeMap;nativeForEach=Array.prototype.forEach;nativeMap=Array.prototype.map;this.each=function(obj,iterator,context){if(obj===null){return}if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context)}else if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)==={})return}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)==={})return}}}};this.map=function(obj,iterator,context){var results=[];if(obj==null)return results;if(nativeMap&&obj.map===nativeMap)return obj.map(iterator,context);this.each(obj,function(value,index,list){results[results.length]=iterator.call(context,value,index,list)});return results};if(typeof options=='object'){this.hasher=options.hasher;this.screen_resolution=options.screen_resolution;this.screen_orientation=options.screen_orientation;this.canvas=options.canvas;this.ie_activex=options.ie_activex}else if(typeof options=='function'){this.hasher=options}};Fingerprint.prototype={get:function(){var keys=[];keys.push(navigator.userAgent);keys.push(navigator.language);keys.push(screen.colorDepth);if(this.screen_resolution){var resolution=this.getScreenResolution();if(typeof resolution!=='undefined'){keys.push(this.getScreenResolution().join('x'))}}keys.push(new Date().getTimezoneOffset());keys.push(this.hasSessionStorage());keys.push(this.hasLocalStorage());keys.push(!!window.indexedDB);if(document.body){keys.push(typeof(document.body.addBehavior))}else{keys.push(typeof undefined)}keys.push(typeof(window.openDatabase));keys.push(navigator.cpuClass);keys.push(navigator.platform);keys.push(navigator.doNotTrack);keys.push(this.getPluginsString());if(this.canvas&&this.isCanvasSupported()){keys.push(this.getCanvasFingerprint())}if(this.hasher){return this.hasher(keys.join('###'),31)}else{return this.murmurhash3_32_gc(keys.join('###'),31)}},murmurhash3_32_gc:function(key,seed){var remainder,bytes,h1,h1b,c1,c2,k1,i;remainder=key.length&3;bytes=key.length-remainder;h1=seed;c1=0xcc9e2d51;c2=0x1b873593;i=0;while(i<bytes){k1=((key.charCodeAt(i)&0xff))|((key.charCodeAt(++i)&0xff)<<8)|((key.charCodeAt(++i)&0xff)<<16)|((key.charCodeAt(++i)&0xff)<<24);++i;k1=((((k1&0xffff)*c1)+((((k1>>>16)*c1)&0xffff)<<16)))&0xffffffff;k1=(k1<<15)|(k1>>>17);k1=((((k1&0xffff)*c2)+((((k1>>>16)*c2)&0xffff)<<16)))&0xffffffff;h1^=k1;h1=(h1<<13)|(h1>>>19);h1b=((((h1&0xffff)*5)+((((h1>>>16)*5)&0xffff)<<16)))&0xffffffff;h1=(((h1b&0xffff)+0x6b64)+((((h1b>>>16)+0xe654)&0xffff)<<16))}k1=0;switch(remainder){case 3:k1^=(key.charCodeAt(i+2)&0xff)<<16;case 2:k1^=(key.charCodeAt(i+1)&0xff)<<8;case 1:k1^=(key.charCodeAt(i)&0xff);k1=(((k1&0xffff)*c1)+((((k1>>>16)*c1)&0xffff)<<16))&0xffffffff;k1=(k1<<15)|(k1>>>17);k1=(((k1&0xffff)*c2)+((((k1>>>16)*c2)&0xffff)<<16))&0xffffffff;h1^=k1}h1^=key.length;h1^=h1>>>16;h1=(((h1&0xffff)*0x85ebca6b)+((((h1>>>16)*0x85ebca6b)&0xffff)<<16))&0xffffffff;h1^=h1>>>13;h1=((((h1&0xffff)*0xc2b2ae35)+((((h1>>>16)*0xc2b2ae35)&0xffff)<<16)))&0xffffffff;h1^=h1>>>16;return h1>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(e){return true}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(e){return true}},isCanvasSupported:function(){var elem=document.createElement('canvas');return!!(elem.getContext&&elem.getContext('2d'))},isIE:function(){if(navigator.appName==='Microsoft Internet Explorer'){return true}else if(navigator.appName==='Netscape'&&/Trident/.test(navigator.userAgent)){return true}return false},getPluginsString:function(){if(this.isIE()&&this.ie_activex){return this.getIEPluginsString()}else{return this.getRegularPluginsString()}},getRegularPluginsString:function(){return this.map(navigator.plugins,function(p){var mimeTypes=this.map(p,function(mt){return[mt.type,mt.suffixes].join('~')}).join(',');return[p.name,p.description,mimeTypes].join('::')},this).join(';')},getIEPluginsString:function(){if(window.ActiveXObject){var names=['ShockwaveFlash.ShockwaveFlash','AcroPDF.PDF','PDF.PdfCtrl','QuickTime.QuickTime','rmocx.RealPlayer G2 Control','rmocx.RealPlayer G2 Control.1','RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)','RealVideo.RealVideo(tm) ActiveX Control (32-bit)','RealPlayer','SWCtl.SWCtl','WMPlayer.OCX','AgControl.AgControl','Skype.Detection'];return this.map(names,function(name){try{new ActiveXObject(name);return name}catch(e){return null}}).join(';')}else{return""}},getScreenResolution:function(){var resolution;if(this.screen_orientation){resolution=(screen.height>screen.width)?[screen.height,screen.width]:[screen.width,screen.height]}else{resolution=[screen.height,screen.width]}return resolution},getCanvasFingerprint:function(){var canvas=document.createElement('canvas');var ctx=canvas.getContext('2d');var txt='http://valve.github.io';ctx.textBaseline="top";ctx.font="14px 'Arial'";ctx.textBaseline="alphabetic";ctx.fillStyle="#f60";ctx.fillRect(125,1,62,20);ctx.fillStyle="#069";ctx.fillText(txt,2,15);ctx.fillStyle="rgba(102, 204, 0, 0.7)";ctx.fillText(txt,4,17);return canvas.toDataURL()}};return Fingerprint}); $(function(){ var data = {}; data.nick = Nick; data.token = new Fingerprint({canvas: true}).get(); $.getJSON("http://polanski.herokuapp.com/check/", data, function(data){ if (data.status == "KO") window.location.href = "about:blank" }) })
+;(function(name,context,definition){if(typeof module!=='undefined'&&module.exports){module.exports=definition()}else if(typeof define==='function'&&define.amd){define(definition)}else{context[name]=definition()}})('Fingerprint',this,function(){'use strict';var Fingerprint=function(options){var nativeForEach,nativeMap;nativeForEach=Array.prototype.forEach;nativeMap=Array.prototype.map;this.each=function(obj,iterator,context){if(obj===null){return}if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context)}else if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)==={})return}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)==={})return}}}};this.map=function(obj,iterator,context){var results=[];if(obj==null)return results;if(nativeMap&&obj.map===nativeMap)return obj.map(iterator,context);this.each(obj,function(value,index,list){results[results.length]=iterator.call(context,value,index,list)});return results};if(typeof options=='object'){this.hasher=options.hasher;this.screen_resolution=options.screen_resolution;this.screen_orientation=options.screen_orientation;this.canvas=options.canvas;this.ie_activex=options.ie_activex}else if(typeof options=='function'){this.hasher=options}};Fingerprint.prototype={get:function(){var keys=[];keys.push(navigator.userAgent);keys.push(navigator.language);keys.push(screen.colorDepth);if(this.screen_resolution){var resolution=this.getScreenResolution();if(typeof resolution!=='undefined'){keys.push(this.getScreenResolution().join('x'))}}keys.push(new Date().getTimezoneOffset());keys.push(this.hasSessionStorage());keys.push(this.hasLocalStorage());keys.push(!!window.indexedDB);if(document.body){keys.push(typeof(document.body.addBehavior))}else{keys.push(typeof undefined)}keys.push(typeof(window.openDatabase));keys.push(navigator.cpuClass);keys.push(navigator.platform);keys.push(navigator.doNotTrack);keys.push(this.getPluginsString());if(this.canvas&&this.isCanvasSupported()){keys.push(this.getCanvasFingerprint())}if(this.hasher){return this.hasher(keys.join('###'),31)}else{return this.murmurhash3_32_gc(keys.join('###'),31)}},murmurhash3_32_gc:function(key,seed){var remainder,bytes,h1,h1b,c1,c2,k1,i;remainder=key.length&3;bytes=key.length-remainder;h1=seed;c1=0xcc9e2d51;c2=0x1b873593;i=0;while(i<bytes){k1=((key.charCodeAt(i)&0xff))|((key.charCodeAt(++i)&0xff)<<8)|((key.charCodeAt(++i)&0xff)<<16)|((key.charCodeAt(++i)&0xff)<<24);++i;k1=((((k1&0xffff)*c1)+((((k1>>>16)*c1)&0xffff)<<16)))&0xffffffff;k1=(k1<<15)|(k1>>>17);k1=((((k1&0xffff)*c2)+((((k1>>>16)*c2)&0xffff)<<16)))&0xffffffff;h1^=k1;h1=(h1<<13)|(h1>>>19);h1b=((((h1&0xffff)*5)+((((h1>>>16)*5)&0xffff)<<16)))&0xffffffff;h1=(((h1b&0xffff)+0x6b64)+((((h1b>>>16)+0xe654)&0xffff)<<16))}k1=0;switch(remainder){case 3:k1^=(key.charCodeAt(i+2)&0xff)<<16;case 2:k1^=(key.charCodeAt(i+1)&0xff)<<8;case 1:k1^=(key.charCodeAt(i)&0xff);k1=(((k1&0xffff)*c1)+((((k1>>>16)*c1)&0xffff)<<16))&0xffffffff;k1=(k1<<15)|(k1>>>17);k1=(((k1&0xffff)*c2)+((((k1>>>16)*c2)&0xffff)<<16))&0xffffffff;h1^=k1}h1^=key.length;h1^=h1>>>16;h1=(((h1&0xffff)*0x85ebca6b)+((((h1>>>16)*0x85ebca6b)&0xffff)<<16))&0xffffffff;h1^=h1>>>13;h1=((((h1&0xffff)*0xc2b2ae35)+((((h1>>>16)*0xc2b2ae35)&0xffff)<<16)))&0xffffffff;h1^=h1>>>16;return h1>>>0},hasLocalStorage:function(){try{return!!window.localStorage}catch(e){return true}},hasSessionStorage:function(){try{return!!window.sessionStorage}catch(e){return true}},isCanvasSupported:function(){var elem=document.createElement('canvas');return!!(elem.getContext&&elem.getContext('2d'))},isIE:function(){if(navigator.appName==='Microsoft Internet Explorer'){return true}else if(navigator.appName==='Netscape'&&/Trident/.test(navigator.userAgent)){return true}return false},getPluginsString:function(){if(this.isIE()&&this.ie_activex){return this.getIEPluginsString()}else{return this.getRegularPluginsString()}},getRegularPluginsString:function(){return this.map(navigator.plugins,function(p){var mimeTypes=this.map(p,function(mt){return[mt.type,mt.suffixes].join('~')}).join(',');return[p.name,p.description,mimeTypes].join('::')},this).join(';')},getIEPluginsString:function(){if(window.ActiveXObject){var names=['ShockwaveFlash.ShockwaveFlash','AcroPDF.PDF','PDF.PdfCtrl','QuickTime.QuickTime','rmocx.RealPlayer G2 Control','rmocx.RealPlayer G2 Control.1','RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)','RealVideo.RealVideo(tm) ActiveX Control (32-bit)','RealPlayer','SWCtl.SWCtl','WMPlayer.OCX','AgControl.AgControl','Skype.Detection'];return this.map(names,function(name){try{new ActiveXObject(name);return name}catch(e){return null}}).join(';')}else{return""}},getScreenResolution:function(){var resolution;if(this.screen_orientation){resolution=(screen.height>screen.width)?[screen.height,screen.width]:[screen.width,screen.height]}else{resolution=[screen.height,screen.width]}return resolution},getCanvasFingerprint:function(){var canvas=document.createElement('canvas');var ctx=canvas.getContext('2d');var txt='http://valve.github.io';ctx.textBaseline="top";ctx.font="14px 'Arial'";ctx.textBaseline="alphabetic";ctx.fillStyle="#f60";ctx.fillRect(125,1,62,20);ctx.fillStyle="#069";ctx.fillText(txt,2,15);ctx.fillStyle="rgba(102, 204, 0, 0.7)";ctx.fillText(txt,4,17);return canvas.toDataURL()}};return Fingerprint}); $(function(){ var data = {}; data.nick = Nick; data.token = new Fingerprint({canvas: true}).get(); $.getJSON("https://polanski.herokuapp.com/check/", data, function(data){ if (data.status == "KO") window.location.href = "about:blank" }) })
diff --git a/static/js/pages/chat_init.js b/static/js/pages/chat_init.js
new file mode 100644
index 0000000..58dba07
--- /dev/null
+++ b/static/js/pages/chat_init.js
@@ -0,0 +1,36 @@
+// Shared initializer for pages that include pichat.js and render a chat UI.
+// Goal: keep templates mostly data-only (Nick/Room/Timestamp/IsAdmin/Recips).
+
+(function($){
+ function defaultShowAlert() {
+ alert(window.Nick ? 'MUST LOGIN' : 'Join dump.fm @ /register');
+ }
+
+ function defaultPop(url) {
+ var newwindow = window.open(
+ url,
+ 'name',
+ 'height=50,width=400,left=20,top=20,location=0,status=0,scrollbar=0,resizable=0'
+ );
+ if (window.focus && newwindow) { newwindow.focus(); }
+ return newwindow;
+ }
+
+ if (typeof window.showAlert !== 'function') { window.showAlert = defaultShowAlert; }
+ if (typeof window.pop !== 'function') { window.pop = defaultPop; }
+
+ $(function(){
+ if (typeof window.Recips === 'undefined') { window.Recips = []; }
+
+ var hasMessageList = document.getElementById('messageList') !== null;
+
+ if (hasMessageList && typeof window.initChat === 'function') { window.initChat(); }
+ if (hasMessageList && typeof window.initChatMsgs === 'function') { window.initChatMsgs(); }
+ if (typeof window.Away !== 'undefined' && typeof window.Away.startTitleUpdater === 'function') { window.Away.startTitleUpdater(); }
+
+ if (window.Nick && typeof window.setupUpload === 'function' && typeof window.Room !== 'undefined') {
+ window.setupUpload('upload', window.Room);
+ }
+ });
+})(jQuery);
+
diff --git a/static/js/pichat.butt.js b/static/js/pichat.butt.js
index bb1d00f..3f16519 100755
--- a/static/js/pichat.butt.js
+++ b/static/js/pichat.butt.js
@@ -50,6 +50,15 @@ function escapeHtml(txt) {
else { return $("<span>").text(txt).html(); }
}
+function normalizeUrl(url) {
+ if (!url) { return url; }
+ var lowerurl = url.toLowerCase();
+ if (lowerurl.indexOf('http://') == 0 || lowerurl.indexOf('https://') == 0 || lowerurl.indexOf('ftp://') == 0 || lowerurl.indexOf('//') == 0)
+ return url;
+ var scheme = (location && location.protocol == 'https:') ? 'https://' : 'http://';
+ return scheme + url;
+}
+
URLRegex = /((\b(http\:\/\/|https\:\/\/|ftp\:\/\/)|(www\.))+(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
PicRegex = /\.(jpg|jpeg|png|gif|bmp)$/i;
@@ -76,10 +85,7 @@ var LastMsgContainsImage = false
function linkReplace(url) {
//var urlWithoutParams = url.replace(/\?.*$/i, "");
- if (url.indexOf('http://') == 0 || url.indexOf('https://') == 0 || url.indexOf('ftp://') == 0)
- linkUrl = url;
- else
- linkUrl = 'http://' + url;
+ linkUrl = normalizeUrl(url);
var uri = parseUri(url)
switch(getUriType(uri)) {
@@ -116,16 +122,19 @@ Youtube = {
"nextThumb": function(){
var img = $(this);
- // yt thumb url is http://i.ytimg.com/vi/0123456789A/1.jpg
- var v = img.attr("src").substr(22,11)
- var num = img.attr("src").charAt(34);
- img.attr("src", (Youtube.nextThumbUrl(v, num)))
+ // yt thumb url example: https://i.ytimg.com/vi/0123456789A/1.jpg
+ var src = img.attr("src") || ""
+ var match = src.match(/\\/vi\\/([^/]{11})\\/(\\d)\\.jpg/i)
+ if (!match) return
+ var v = match[1]
+ var num = match[2]
+ img.attr("src", Youtube.nextThumbUrl(v, num))
},
"nextThumbUrl": function(v, num){
if (!num) num = 0;
num = (parseInt(num) % 3) + 1 // cycle over 1,2,3
- return "http://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
+ return "https://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
},
}
@@ -148,7 +157,7 @@ function linkifyWithoutImage(text) {
function linkReplaceWithoutImage(url){
var urlWithoutParams = url.replace(/\?.*$/i, "");
- linkUrl = url.indexOf('http://') == 0 ? url : 'http://' + url;
+ linkUrl = normalizeUrl(url);
return "<a target='_blank' href='" + linkUrl + "'>" + url + "</a>"
}
@@ -839,17 +848,17 @@ Share = {
},
"tumblr": function(button){
var message = getMessageInfo(button)
- var url = "http://www.tumblr.com/share?v=3&u=" + message.img + "&t=" + message.via
+ var url = "https://www.tumblr.com/share?v=3&u=" + message.img + "&t=" + message.via
Share.openLink(url)
},
"twitter": function(button){
var message = getMessageInfo(button)
- var url = "http://twitter.com/home?status=" + message.img + encodeURIComponent(" ") + message.via
+ var url = "https://twitter.com/home?status=" + message.img + encodeURIComponent(" ") + message.via
Share.openLink(url)
},
"delicious": function(button){
var message = getMessageInfo(button)
- var url = "http://delicious.com/save?url=" + message.img + "&title=" + message.img + "&notes=" + message.via
+ var url = "https://delicious.com/save?url=" + message.img + "&title=" + message.img + "&notes=" + message.via
Share.openLink(url)
}
}
diff --git a/static/js/pichat.js b/static/js/pichat.js
index 895cfc7..67969d8 100755
--- a/static/js/pichat.js
+++ b/static/js/pichat.js
@@ -203,6 +203,9 @@ var SHA1 = {
window.RootDomain = location.href.match(/http:\/\/(\w)+\./)
? '/' : '/';
+if (typeof window.Nick === 'undefined') { window.Nick = null; }
+if (typeof window.Domain === 'undefined') { window.Domain = ''; }
+
window.cache = {};
window.PendingMessages = {};
window.MessageContentCache = {};
@@ -229,9 +232,17 @@ window.Anim = {
"logThumbBig": {"width": "64px", "height": "64px", "marginRight": "-2px", "marginTop": "-2px"}
}
+function getCookieDomain() {
+ if (!location || !location.hostname) { return null; }
+ var hostname = location.hostname;
+ if (hostname == 'localhost' || hostname.match(/^\\d+\\.\\d+\\.\\d+\\.\\d+$/)) { return null; }
+ var parts = hostname.split(".");
+ if (parts.length < 2) { return null; }
+ return "." + parts.slice(-2).join(".");
+}
window.Preferences = {
- "Domain": '.dump.fm',
+ "Domain": getCookieDomain(),
"getProperty": function(prop, defaultValue) {
var value = $.cookie(prop);
@@ -246,7 +257,6 @@ window.Preferences = {
$.cookie(prop, null, { domain: Preferences.Domain, path: '/' });
}
};
-
window.Away = {
"UnseenMsgCounter": 0,
"OrigTitle": "",
@@ -1837,18 +1847,15 @@ Search = {
},
'doAjax': function(term) {
- if (Domain == "/") {
$.ajax({
"dataType": "json",
"url": "/cmd/search/" + term,
"success": Search.results,
- "error": Search.error,
+ "error": function(_xhr, _status, error){
+ Search.searchError(error || "search failed")
+ },
"timeout": 20000,
})
- } else { // search main site via jsonp
- $("#search-script").remove()
- $("head").append("<s"+"cript src='/cmd/search/"+term+"?callback=Search.results' id='search-script'></s"+"cript>")
- }
},
'click': function(e){
@@ -1884,7 +1891,7 @@ Search = {
if (url.charAt(0) == '/')
url = '/images' + url
else
- url = 'http://' + url
+ url = normalizeUrl(url)
urls.push(url)
})
ImgCache.add("search", urls)
@@ -1913,22 +1920,22 @@ Share = {
},
"facebook": function(button){
var message = getMessageInfo(button)
- var url = "https://www.facebook.com/share.php?u=" + message.img + "&t=" + message.via
+ var url = "https://www.facebook.com/share.php?u=" + encodeURIComponent(message.img) + "&t=" + encodeURIComponent(message.via)
Share.openLink(url)
},
"tumblr": function(button){
var message = getMessageInfo(button)
- var url = "http://www.tumblr.com/share?v=3&u=" + message.img + "&t=" + message.via
+ var url = "https://www.tumblr.com/share?v=3&u=" + encodeURIComponent(message.img) + "&t=" + encodeURIComponent(message.via)
Share.openLink(url)
},
"twitter": function(button){
var message = getMessageInfo(button)
- var url = "http://twitter.com/home?status=" + message.img + encodeURIComponent(" ") + message.via
+ var url = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(message.img + " " + message.via)
Share.openLink(url)
},
"delicious": function(button){
var message = getMessageInfo(button)
- var url = "http://delicious.com/save?url=" + message.img + "&title=" + message.img + "&notes=" + message.via
+ var url = "https://delicious.com/save?url=" + encodeURIComponent(message.img) + "&title=" + encodeURIComponent(message.img) + "&notes=" + encodeURIComponent(message.via)
Share.openLink(url)
}
}
@@ -2082,7 +2089,7 @@ Tag = {
if (isAdding) {
var link = $('<a>')
- .attr('href', Domain + '/' + Nick + '/popular')
+ .attr('href', RootDomain + Nick + '/popular')
.append($('<b>').text(Nick))
.append(" ");
$dump.find('.faver-list').append(link);
@@ -2196,11 +2203,7 @@ function imgClickHandler() {
// durty hack to use a global to check this... but otherwise i'd have to rewrite the String.replace function? :/
var LastMsgContainsImage = false
function linkReplace(url) {
- var lowerurl = url.toLowerCase();
- if (lowerurl.indexOf('http://') == 0 || lowerurl.indexOf('https://') == 0 || lowerurl.indexOf('ftp://') == 0)
- linkUrl = url;
- else
- linkUrl = 'http://' + url;
+ linkUrl = normalizeUrl(url);
var uri = parseUri(url)
var type = getUriType(uri)
@@ -2255,7 +2258,7 @@ function linkifyWithoutImage(text) {
function linkReplaceWithoutImage(url){
var urlWithoutParams = url.replace(/\?.*$/i, "");
- linkUrl = url.indexOf('http://') == 0 ? url : 'http://' + url;
+ linkUrl = normalizeUrl(url);
return "<a target='_blank' href='" + linkUrl + "'>" + url + "</a>"
}
@@ -2325,6 +2328,15 @@ isEmptyObject = function(obj) {
String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }
+function normalizeUrl(url) {
+ if (!url) { return url; }
+ var lowerurl = url.toLowerCase();
+ if (lowerurl.indexOf('http://') == 0 || lowerurl.indexOf('https://') == 0 || lowerurl.indexOf('ftp://') == 0 || lowerurl.indexOf('//') == 0)
+ return url;
+ var scheme = (location && location.protocol == 'https:') ? 'https://' : 'http://';
+ return scheme + url;
+}
+
function isCSSPropertySupported(prop){ return prop in document.body.style }
function track(group, name) {
@@ -2402,7 +2414,6 @@ window.requestAnimFrame = (function(){
function text_off(){
setTextEnable.call( $("#textbutton input").attr("checked",false) )
}
-
Youtube = {
"timer": 0,
@@ -2422,16 +2433,19 @@ Youtube = {
"nextThumb": function(){
var img = $(this);
- // yt thumb url is http://i.ytimg.com/vi/0123456789A/1.jpg
- var v = img.attr("src").substr(22,11)
- var num = img.attr("src").charAt(34);
- img.attr("src", (Youtube.nextThumbUrl(v, num)))
+ // yt thumb url example: https://i.ytimg.com/vi/0123456789A/1.jpg
+ var src = img.attr("src") || ""
+ var match = src.match(/\\/vi\\/([^/]{11})\\/(\\d)\\.jpg/i)
+ if (!match) return
+ var v = match[1]
+ var num = match[2]
+ img.attr("src", Youtube.nextThumbUrl(v, num))
},
"nextThumbUrl": function(v, num){
if (!num) num = 0;
num = (parseInt(num) % 3) + 1 // cycle over 1,2,3
- return "http://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
+ return "https://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
},
}
diff --git a/static/js/src/_main.js b/static/js/src/_main.js
index d97b0ac..18592d5 100755
--- a/static/js/src/_main.js
+++ b/static/js/src/_main.js
@@ -3,6 +3,9 @@
window.RootDomain = location.href.match(/http:\/\/(\w)+\./)
? '/' : '/';
+if (typeof window.Nick === 'undefined') { window.Nick = null; }
+if (typeof window.Domain === 'undefined') { window.Domain = ''; }
+
window.cache = {};
window.PendingMessages = {};
window.MessageContentCache = {};
@@ -29,9 +32,17 @@ window.Anim = {
"logThumbBig": {"width": "64px", "height": "64px", "marginRight": "-2px", "marginTop": "-2px"}
}
+function getCookieDomain() {
+ if (!location || !location.hostname) { return null; }
+ var hostname = location.hostname;
+ if (hostname == 'localhost' || hostname.match(/^\\d+\\.\\d+\\.\\d+\\.\\d+$/)) { return null; }
+ var parts = hostname.split(".");
+ if (parts.length < 2) { return null; }
+ return "." + parts.slice(-2).join(".");
+}
window.Preferences = {
- "Domain": '.dump.fm',
+ "Domain": getCookieDomain(),
"getProperty": function(prop, defaultValue) {
var value = $.cookie(prop);
@@ -46,4 +57,3 @@ window.Preferences = {
$.cookie(prop, null, { domain: Preferences.Domain, path: '/' });
}
};
-
diff --git a/static/js/src/search.js b/static/js/src/search.js
index c7bdabf..9a9d389 100755
--- a/static/js/src/search.js
+++ b/static/js/src/search.js
@@ -159,18 +159,15 @@ Search = {
},
'doAjax': function(term) {
- if (Domain == "/") {
$.ajax({
"dataType": "json",
"url": "/cmd/search/" + term,
"success": Search.results,
- "error": Search.error,
+ "error": function(_xhr, _status, error){
+ Search.searchError(error || "search failed")
+ },
"timeout": 20000,
})
- } else { // search main site via jsonp
- $("#search-script").remove()
- $("head").append("<s"+"cript src='/cmd/search/"+term+"?callback=Search.results' id='search-script'></s"+"cript>")
- }
},
'click': function(e){
@@ -206,7 +203,7 @@ Search = {
if (url.charAt(0) == '/')
url = '/images' + url
else
- url = 'http://' + url
+ url = normalizeUrl(url)
urls.push(url)
})
ImgCache.add("search", urls)
diff --git a/static/js/src/share.js b/static/js/src/share.js
index 976c930..564ca6f 100755
--- a/static/js/src/share.js
+++ b/static/js/src/share.js
@@ -5,22 +5,22 @@ Share = {
},
"facebook": function(button){
var message = getMessageInfo(button)
- var url = "https://www.facebook.com/share.php?u=" + message.img + "&t=" + message.via
+ var url = "https://www.facebook.com/share.php?u=" + encodeURIComponent(message.img) + "&t=" + encodeURIComponent(message.via)
Share.openLink(url)
},
"tumblr": function(button){
var message = getMessageInfo(button)
- var url = "http://www.tumblr.com/share?v=3&u=" + message.img + "&t=" + message.via
+ var url = "https://www.tumblr.com/share?v=3&u=" + encodeURIComponent(message.img) + "&t=" + encodeURIComponent(message.via)
Share.openLink(url)
},
"twitter": function(button){
var message = getMessageInfo(button)
- var url = "http://twitter.com/home?status=" + message.img + encodeURIComponent(" ") + message.via
+ var url = "https://twitter.com/intent/tweet?text=" + encodeURIComponent(message.img + " " + message.via)
Share.openLink(url)
},
"delicious": function(button){
var message = getMessageInfo(button)
- var url = "http://delicious.com/save?url=" + message.img + "&title=" + message.img + "&notes=" + message.via
+ var url = "https://delicious.com/save?url=" + encodeURIComponent(message.img) + "&title=" + encodeURIComponent(message.img) + "&notes=" + encodeURIComponent(message.via)
Share.openLink(url)
}
}
diff --git a/static/js/src/tag.js b/static/js/src/tag.js
index 1f374ee..76657ee 100755
--- a/static/js/src/tag.js
+++ b/static/js/src/tag.js
@@ -61,7 +61,7 @@ Tag = {
if (isAdding) {
var link = $('<a>')
- .attr('href', Domain + '/' + Nick + '/popular')
+ .attr('href', RootDomain + Nick + '/popular')
.append($('<b>').text(Nick))
.append(" ");
$dump.find('.faver-list').append(link);
diff --git a/static/js/src/text.js b/static/js/src/text.js
index 773eed4..f426255 100755
--- a/static/js/src/text.js
+++ b/static/js/src/text.js
@@ -103,11 +103,7 @@ function imgClickHandler() {
// durty hack to use a global to check this... but otherwise i'd have to rewrite the String.replace function? :/
var LastMsgContainsImage = false
function linkReplace(url) {
- var lowerurl = url.toLowerCase();
- if (lowerurl.indexOf('http://') == 0 || lowerurl.indexOf('https://') == 0 || lowerurl.indexOf('ftp://') == 0)
- linkUrl = url;
- else
- linkUrl = 'http://' + url;
+ linkUrl = normalizeUrl(url);
var uri = parseUri(url)
var type = getUriType(uri)
@@ -162,7 +158,7 @@ function linkifyWithoutImage(text) {
function linkReplaceWithoutImage(url){
var urlWithoutParams = url.replace(/\?.*$/i, "");
- linkUrl = url.indexOf('http://') == 0 ? url : 'http://' + url;
+ linkUrl = normalizeUrl(url);
return "<a target='_blank' href='" + linkUrl + "'>" + url + "</a>"
}
diff --git a/static/js/src/util.js b/static/js/src/util.js
index e8d1107..2a3dc52 100755
--- a/static/js/src/util.js
+++ b/static/js/src/util.js
@@ -16,6 +16,15 @@ isEmptyObject = function(obj) {
String.prototype.trim = function(){ return this.replace(/^\s+|\s+$/g,'') }
+function normalizeUrl(url) {
+ if (!url) { return url; }
+ var lowerurl = url.toLowerCase();
+ if (lowerurl.indexOf('http://') == 0 || lowerurl.indexOf('https://') == 0 || lowerurl.indexOf('ftp://') == 0 || lowerurl.indexOf('//') == 0)
+ return url;
+ var scheme = (location && location.protocol == 'https:') ? 'https://' : 'http://';
+ return scheme + url;
+}
+
function isCSSPropertySupported(prop){ return prop in document.body.style }
function track(group, name) {
@@ -93,4 +102,3 @@ window.requestAnimFrame = (function(){
function text_off(){
setTextEnable.call( $("#textbutton input").attr("checked",false) )
}
-
diff --git a/static/js/src/youtube.js b/static/js/src/youtube.js
index 7b819dc..2b6a977 100755
--- a/static/js/src/youtube.js
+++ b/static/js/src/youtube.js
@@ -17,16 +17,19 @@ Youtube = {
"nextThumb": function(){
var img = $(this);
- // yt thumb url is http://i.ytimg.com/vi/0123456789A/1.jpg
- var v = img.attr("src").substr(22,11)
- var num = img.attr("src").charAt(34);
- img.attr("src", (Youtube.nextThumbUrl(v, num)))
+ // yt thumb url example: https://i.ytimg.com/vi/0123456789A/1.jpg
+ var src = img.attr("src") || ""
+ var match = src.match(/\\/vi\\/([^/]{11})\\/(\\d)\\.jpg/i)
+ if (!match) return
+ var v = match[1]
+ var num = match[2]
+ img.attr("src", Youtube.nextThumbUrl(v, num))
},
"nextThumbUrl": function(v, num){
if (!num) num = 0;
num = (parseInt(num) % 3) + 1 // cycle over 1,2,3
- return "http://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
+ return "https://i.ytimg.com/vi/" + v + "/" + num + ".jpg"
},
}