Merge branch 'master' of https://github.com/Spittie/4chan-x into v3
Conflicts: CHANGELOG.md LICENSE builds/4chan-X.meta.js builds/4chan-X.user.js builds/crx/script.js src/Archive/Redirect.coffee src/Posting/QR.coffee
This commit is contained in:
commit
6884039627
21
CHANGELOG.md
21
CHANGELOG.md
@ -6,6 +6,27 @@
|
|||||||
**ParrotParrot**:
|
**ParrotParrot**:
|
||||||
- Added `Original filename` variable to Sauce panel.
|
- Added `Original filename` variable to Sauce panel.
|
||||||
|
|
||||||
|
### v1.3.10
|
||||||
|
*2014-02-20*
|
||||||
|
|
||||||
|
**Spittie**
|
||||||
|
- I keep breaking and fixing stuff. But mostly breaking.
|
||||||
|
|
||||||
|
### v1.3.9
|
||||||
|
*2014-02-20*
|
||||||
|
|
||||||
|
**Spittie**
|
||||||
|
- Fix uploading (>me in charge of not being an idiot)
|
||||||
|
|
||||||
|
### v1.3.8
|
||||||
|
*2014-02-20*
|
||||||
|
|
||||||
|
**MayhemYDG**
|
||||||
|
- Fix QR
|
||||||
|
|
||||||
|
**Spittie**
|
||||||
|
- Better url handling
|
||||||
|
|
||||||
### v1.3.7
|
### v1.3.7
|
||||||
*2014-02-15*
|
*2014-02-15*
|
||||||
|
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.3.7 - 2014-02-23
|
* 4chan X - Version 1.3.10 - 2014-02-23
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
||||||
|
|||||||
@ -1,8 +1,10 @@
|
|||||||
Personal fork of Seaweed's 4chan X.
|
Personal fork of Seaweed's 4chan X.
|
||||||
|
|
||||||
|
#### [Why 4chan X needs to access data on every site?](https://github.com/Spittie/4chan-x/wiki/Why-4chan-X-needs-to-access-data-from-every-website%3F)
|
||||||
|
|
||||||
##[Install](https://github.com/Spittie/4chan-x/raw/master/builds/4chan-X.user.js) (Firefox)
|
##[Install](https://github.com/Spittie/4chan-x/raw/master/builds/4chan-X.user.js) (Firefox)
|
||||||
##[Install](https://github.com/Spittie/4chan-x/raw/master/builds/crx.crx) (Chrom*)
|
##[Install](https://github.com/Spittie/4chan-x/raw/master/builds/crx.crx) (Chrom*)
|
||||||
##[Install](http://a.pomf.se/pmnhcu.xpi) (Firefox Mobile)
|
##[Install](http://a.pomf.se/ermdzx.xpi) (Firefox Mobile)
|
||||||
|
|
||||||
## If you have any problems, try resetting your 4chan X settings before calling me a faggot (but feel free to do so)
|
## If you have any problems, try resetting your 4chan X settings before calling me a faggot (but feel free to do so)
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.3.7
|
// @version 1.3.10
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.3.7
|
// @version 1.3.10
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -24,7 +24,7 @@
|
|||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.3.7 - 2014-02-23
|
* 4chan X - Version 1.3.10 - 2014-02-23
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
||||||
@ -364,7 +364,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.3.7',
|
VERSION: '1.3.10',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -5909,8 +5909,26 @@
|
|||||||
QR.handleFiles(files);
|
QR.handleFiles(files);
|
||||||
return $.addClass(QR.nodes.el, 'dump');
|
return $.addClass(QR.nodes.el, 'dump');
|
||||||
},
|
},
|
||||||
handleBlob: function(blob) {
|
handleBlob: function(urlBlob, header, url) {
|
||||||
var _ref;
|
var blob, end, endnl, endsc, mime, name, name_end, name_start, start, _ref;
|
||||||
|
name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
start = header.indexOf("Content-Type: ") + 14;
|
||||||
|
endsc = header.substr(start, header.length).indexOf(";");
|
||||||
|
endnl = header.substr(start, header.length).indexOf("\n") - 1;
|
||||||
|
end = endnl;
|
||||||
|
if (endsc !== -1 && endsc < endnl) {
|
||||||
|
end = endsc;
|
||||||
|
}
|
||||||
|
mime = header.substr(start, end);
|
||||||
|
blob = new Blob([urlBlob], {
|
||||||
|
type: mime
|
||||||
|
});
|
||||||
|
blob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
name_start = header.indexOf('name="') + 6;
|
||||||
|
if (name_start - 6 !== -1) {
|
||||||
|
name_end = header.substr(name_start, header.length).indexOf('"');
|
||||||
|
blob.name = header.substr(name_start, name_end);
|
||||||
|
}
|
||||||
if (blob.type === null) {
|
if (blob.type === null) {
|
||||||
return QR.error("Unsupported file type.");
|
return QR.error("Unsupported file type.");
|
||||||
}
|
}
|
||||||
@ -5930,7 +5948,7 @@
|
|||||||
url: url,
|
url: url,
|
||||||
overrideMimeType: "text/plain; charset=x-user-defined",
|
overrideMimeType: "text/plain; charset=x-user-defined",
|
||||||
onload: function(xhr) {
|
onload: function(xhr) {
|
||||||
var data, end, header, i, mime, r, start, urlBlob;
|
var data, i, r;
|
||||||
r = xhr.responseText;
|
r = xhr.responseText;
|
||||||
data = new Uint8Array(r.length);
|
data = new Uint8Array(r.length);
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -5938,18 +5956,7 @@
|
|||||||
data[i] = r.charCodeAt(i);
|
data[i] = r.charCodeAt(i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
header = xhr.responseHeaders;
|
QR.handleBlob(data, xhr.responseHeaders, url);
|
||||||
start = header.indexOf("Content-Type: ") + 14;
|
|
||||||
end = header.substr(start, header.length).indexOf("\n") - 1;
|
|
||||||
mime = header.substr(start, end);
|
|
||||||
if (mime === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
urlBlob = new Blob([data], {
|
|
||||||
type: mime
|
|
||||||
});
|
|
||||||
urlBlob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
|
||||||
QR.handleBlob(urlBlob);
|
|
||||||
return;
|
return;
|
||||||
return {
|
return {
|
||||||
onerror: function(xhr) {
|
onerror: function(xhr) {
|
||||||
@ -10417,8 +10424,8 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
name: "Foolz Beta",
|
name: "Foolz Beta",
|
||||||
boards: ["a", "co", "gd", "jp", "m", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
boards: ["a", "biz", "co", "d", "gd", "jp", "m", "mlp", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
||||||
files: ["a", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
files: ["a", "biz", "d", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
||||||
data: {
|
data: {
|
||||||
domain: "beta.foolz.us",
|
domain: "beta.foolz.us",
|
||||||
http: true,
|
http: true,
|
||||||
|
|||||||
BIN
builds/crx.crx
BIN
builds/crx.crx
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "4chan X",
|
"name": "4chan X",
|
||||||
"version": "1.3.7",
|
"version": "1.3.10",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||||
"icons": {
|
"icons": {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.3.7 - 2014-02-23
|
* 4chan X - Version 1.3.10 - 2014-02-23
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
||||||
@ -340,7 +340,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.3.7',
|
VERSION: '1.3.10',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -5953,8 +5953,26 @@
|
|||||||
QR.handleFiles(files);
|
QR.handleFiles(files);
|
||||||
return $.addClass(QR.nodes.el, 'dump');
|
return $.addClass(QR.nodes.el, 'dump');
|
||||||
},
|
},
|
||||||
handleBlob: function(blob) {
|
handleBlob: function(urlBlob, header, url) {
|
||||||
var _ref;
|
var blob, end, endnl, endsc, mime, name, name_end, name_start, start, _ref;
|
||||||
|
name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
start = header.indexOf("Content-Type: ") + 14;
|
||||||
|
endsc = header.substr(start, header.length).indexOf(";");
|
||||||
|
endnl = header.substr(start, header.length).indexOf("\n") - 1;
|
||||||
|
end = endnl;
|
||||||
|
if (endsc !== -1 && endsc < endnl) {
|
||||||
|
end = endsc;
|
||||||
|
}
|
||||||
|
mime = header.substr(start, end);
|
||||||
|
blob = new Blob([urlBlob], {
|
||||||
|
type: mime
|
||||||
|
});
|
||||||
|
blob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
name_start = header.indexOf('name="') + 6;
|
||||||
|
if (name_start - 6 !== -1) {
|
||||||
|
name_end = header.substr(name_start, header.length).indexOf('"');
|
||||||
|
blob.name = header.substr(name_start, name_end);
|
||||||
|
}
|
||||||
if (blob.type === null) {
|
if (blob.type === null) {
|
||||||
return QR.error("Unsupported file type.");
|
return QR.error("Unsupported file type.");
|
||||||
}
|
}
|
||||||
@ -5973,13 +5991,8 @@
|
|||||||
xhr.open('GET', url, true);
|
xhr.open('GET', url, true);
|
||||||
xhr.responseType = 'blob';
|
xhr.responseType = 'blob';
|
||||||
xhr.onload = function(e) {
|
xhr.onload = function(e) {
|
||||||
var urlBlob;
|
|
||||||
if (this.readyState === this.DONE && xhr.status === 200) {
|
if (this.readyState === this.DONE && xhr.status === 200) {
|
||||||
urlBlob = new Blob([this.response], {
|
QR.handleBlob(this.response, this.getResponseHeader('Content-Type'), url);
|
||||||
type: this.getResponseHeader('content-type')
|
|
||||||
});
|
|
||||||
urlBlob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
|
||||||
QR.handleBlob(urlBlob);
|
|
||||||
} else {
|
} else {
|
||||||
QR.error("Can't load image.");
|
QR.error("Can't load image.");
|
||||||
}
|
}
|
||||||
@ -10414,8 +10427,8 @@
|
|||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
name: "Foolz Beta",
|
name: "Foolz Beta",
|
||||||
boards: ["a", "co", "gd", "jp", "m", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
boards: ["a", "biz", "co", "d", "gd", "jp", "m", "mlp", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
||||||
files: ["a", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
files: ["a", "biz", "d", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
||||||
data: {
|
data: {
|
||||||
domain: "beta.foolz.us",
|
domain: "beta.foolz.us",
|
||||||
http: true,
|
http: true,
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.3.7
|
// @version 1.3.10
|
||||||
// @minGMVer 1.13
|
// @minGMVer 1.13
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -23,7 +23,7 @@
|
|||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.3.7 - 2014-02-15
|
* 4chan X - Version 1.3.10 - 2014-02-21
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
* https://github.com/Spittie/4chan-x/blob/master/LICENSE
|
||||||
@ -360,7 +360,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.3.7',
|
VERSION: '1.3.10',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {},
|
boards: {},
|
||||||
threads: {},
|
threads: {},
|
||||||
@ -5339,6 +5339,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
QR = {
|
QR = {
|
||||||
|
mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/x-shockwave-flash', ''],
|
||||||
init: function() {
|
init: function() {
|
||||||
var sc;
|
var sc;
|
||||||
if (!Conf['Quick Reply']) {
|
if (!Conf['Quick Reply']) {
|
||||||
@ -5663,8 +5664,26 @@
|
|||||||
QR.handleFiles(files);
|
QR.handleFiles(files);
|
||||||
return $.addClass(QR.nodes.el, 'dump');
|
return $.addClass(QR.nodes.el, 'dump');
|
||||||
},
|
},
|
||||||
handleBlob: function(blob) {
|
handleBlob: function(urlBlob, header, url) {
|
||||||
var _ref;
|
var blob, end, endnl, endsc, mime, name, name_end, name_start, start, _ref;
|
||||||
|
name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
start = header.indexOf("Content-Type: ") + 14;
|
||||||
|
endsc = header.substr(start, header.length).indexOf(";");
|
||||||
|
endnl = header.substr(start, header.length).indexOf("\n") - 1;
|
||||||
|
end = endnl;
|
||||||
|
if (endsc !== -1 && endsc < endnl) {
|
||||||
|
end = endsc;
|
||||||
|
}
|
||||||
|
mime = header.substr(start, end);
|
||||||
|
blob = new Blob([urlBlob], {
|
||||||
|
type: mime
|
||||||
|
});
|
||||||
|
blob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
||||||
|
name_start = header.indexOf('name="') + 6;
|
||||||
|
if (name_start - 6 !== -1) {
|
||||||
|
name_end = header.substr(name_start, header.length).indexOf('"');
|
||||||
|
blob.name = header.substr(name_start, name_end);
|
||||||
|
}
|
||||||
if (blob.type === null) {
|
if (blob.type === null) {
|
||||||
return QR.error("Unsupported file type.");
|
return QR.error("Unsupported file type.");
|
||||||
}
|
}
|
||||||
@ -5684,7 +5703,7 @@
|
|||||||
url: url,
|
url: url,
|
||||||
overrideMimeType: "text/plain; charset=x-user-defined",
|
overrideMimeType: "text/plain; charset=x-user-defined",
|
||||||
onload: function(xhr) {
|
onload: function(xhr) {
|
||||||
var data, end, header, i, mime, r, start, urlBlob;
|
var data, i, r;
|
||||||
r = xhr.responseText;
|
r = xhr.responseText;
|
||||||
data = new Uint8Array(r.length);
|
data = new Uint8Array(r.length);
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -5692,18 +5711,7 @@
|
|||||||
data[i] = r.charCodeAt(i);
|
data[i] = r.charCodeAt(i);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
header = xhr.responseHeaders;
|
QR.handleBlob(data, xhr.responseHeaders, url);
|
||||||
start = header.indexOf("Content-Type: ") + 14;
|
|
||||||
end = header.substr(start, header.length).indexOf("\n") - 1;
|
|
||||||
mime = header.substr(start, end);
|
|
||||||
if (mime === null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
urlBlob = new Blob([data], {
|
|
||||||
type: mime
|
|
||||||
});
|
|
||||||
urlBlob.name = url.substr(url.lastIndexOf('/') + 1, url.length);
|
|
||||||
QR.handleBlob(urlBlob);
|
|
||||||
return;
|
return;
|
||||||
return {
|
return {
|
||||||
onerror: function(xhr) {
|
onerror: function(xhr) {
|
||||||
@ -5800,7 +5808,7 @@
|
|||||||
return list.value = g.VIEW === 'thread' ? g.THREADID : 'new';
|
return list.value = g.VIEW === 'thread' ? g.THREADID : 'new';
|
||||||
},
|
},
|
||||||
dialog: function() {
|
dialog: function() {
|
||||||
var check, dialog, elm, event, flagSelector, i, items, key, mimeTypes, name, node, nodes, save, value, _ref;
|
var dialog, elm, event, flagSelector, i, items, key, name, node, nodes, save, value, _ref;
|
||||||
QR.nodes = nodes = {
|
QR.nodes = nodes = {
|
||||||
el: dialog = UI.dialog('qr', 'top:0;right:0;', "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> ")
|
el: dialog = UI.dialog('qr', 'top:0;right:0;', "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> ")
|
||||||
};
|
};
|
||||||
@ -5834,16 +5842,6 @@
|
|||||||
value = _ref[key];
|
value = _ref[key];
|
||||||
nodes[key] = $(value, dialog);
|
nodes[key] = $(value, dialog);
|
||||||
}
|
}
|
||||||
check = {
|
|
||||||
jpg: 'image/jpeg',
|
|
||||||
pdf: 'application/pdf',
|
|
||||||
swf: 'application/x-shockwave-flash'
|
|
||||||
};
|
|
||||||
mimeTypes = $('ul.rules > li').textContent.trim().match(/: (.+)/)[1].toLowerCase().replace(/\w+/g, function(type) {
|
|
||||||
return check[type] || ("image/" + type);
|
|
||||||
});
|
|
||||||
QR.mimeTypes = mimeTypes.split(', ');
|
|
||||||
QR.mimeTypes.push('');
|
|
||||||
nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value;
|
nodes.fileInput.max = $('input[name=MAX_FILE_SIZE]').value;
|
||||||
QR.spoiler = !!$('input[name=spoiler]');
|
QR.spoiler = !!$('input[name=spoiler]');
|
||||||
if (QR.spoiler) {
|
if (QR.spoiler) {
|
||||||
@ -9910,16 +9908,38 @@
|
|||||||
|
|
||||||
Redirect = {
|
Redirect = {
|
||||||
init: function() {
|
init: function() {
|
||||||
var archive, archives, boardID, boards, data, files, id, name, o, record, software, type, _i, _len, _ref, _ref1;
|
var archive, archives, boardID, boards, data, files, id, name, o, record, software, type, _i, _j, _len, _len1, _ref, _ref1, _ref2;
|
||||||
o = {
|
o = {
|
||||||
thread: {},
|
thread: {},
|
||||||
post: {},
|
post: {},
|
||||||
file: {}
|
file: {}
|
||||||
};
|
};
|
||||||
archives = Redirect.archives;
|
archives = {};
|
||||||
_ref = Conf['selectedArchives'];
|
_ref = Redirect.archives;
|
||||||
for (boardID in _ref) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
record = _ref[boardID];
|
_ref1 = _ref[_i], name = _ref1.name, boards = _ref1.boards, files = _ref1.files, data = _ref1.data;
|
||||||
|
archives[name] = {
|
||||||
|
boards: boards,
|
||||||
|
files: files,
|
||||||
|
data: data
|
||||||
|
};
|
||||||
|
software = data.software;
|
||||||
|
for (_j = 0, _len1 = boards.length; _j < _len1; _j++) {
|
||||||
|
boardID = boards[_j];
|
||||||
|
if (!(boardID in o.thread)) {
|
||||||
|
o.thread[boardID] = data;
|
||||||
|
}
|
||||||
|
if (!(boardID in o.post || software !== 'foolfuuka')) {
|
||||||
|
o.post[boardID] = data;
|
||||||
|
}
|
||||||
|
if (!(boardID in o.file || __indexOf.call(files, boardID) < 0)) {
|
||||||
|
o.file[boardID] = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ref2 = Conf['selectedArchives'];
|
||||||
|
for (boardID in _ref2) {
|
||||||
|
record = _ref2[boardID];
|
||||||
for (type in record) {
|
for (type in record) {
|
||||||
id = record[type];
|
id = record[type];
|
||||||
if (!((archive = archives[id]))) {
|
if (!((archive = archives[id]))) {
|
||||||
@ -9932,26 +9952,11 @@
|
|||||||
o[type][boardID] = archive.data;
|
o[type][boardID] = archive.data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (name in archives) {
|
|
||||||
_ref1 = archives[name], data = _ref1.data, boards = _ref1.boards, files = _ref1.files;
|
|
||||||
software = data.software;
|
|
||||||
for (_i = 0, _len = boards.length; _i < _len; _i++) {
|
|
||||||
boardID = boards[_i];
|
|
||||||
if (!(boardID in o.thread)) {
|
|
||||||
o.thread[boardID] = data;
|
|
||||||
}
|
|
||||||
if (!(boardID in o.post || software !== 'foolfuuka')) {
|
|
||||||
o.post[boardID] = data;
|
|
||||||
}
|
|
||||||
if (!(boardID in o.file || __indexOf.call(files, boardID) < 0)) {
|
|
||||||
o.file[boardID] = data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Redirect.data = o;
|
return Redirect.data = o;
|
||||||
},
|
},
|
||||||
archives: {
|
archives: [
|
||||||
"Foolz": {
|
{
|
||||||
|
name: "Foolz",
|
||||||
boards: ["a", "biz", "co", "gd", "jp", "m", "sp", "tg", "tv", "v", "vg", "vp", "vr", "wsg"],
|
boards: ["a", "biz", "co", "gd", "jp", "m", "sp", "tg", "tv", "v", "vg", "vp", "vr", "wsg"],
|
||||||
files: ["a", "biz", "gd", "jp", "m", "tg", "vg", "vp", "vr", "wsg"],
|
files: ["a", "biz", "gd", "jp", "m", "tg", "vg", "vp", "vr", "wsg"],
|
||||||
data: {
|
data: {
|
||||||
@ -9960,8 +9965,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"NSFW Foolz": {
|
name: "NSFW Foolz",
|
||||||
boards: ["u"],
|
boards: ["u"],
|
||||||
files: ["u"],
|
files: ["u"],
|
||||||
data: {
|
data: {
|
||||||
@ -9970,8 +9975,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"The Dark Cave": {
|
name: "The Dark Cave",
|
||||||
boards: ["c", "int", "out", "po"],
|
boards: ["c", "int", "out", "po"],
|
||||||
files: ["c", "po"],
|
files: ["c", "po"],
|
||||||
data: {
|
data: {
|
||||||
@ -9980,8 +9985,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"4plebs": {
|
name: "4plebs",
|
||||||
boards: ["adv", "hr", "o", "pol", "s4s", "tg", "tv", "x"],
|
boards: ["adv", "hr", "o", "pol", "s4s", "tg", "tv", "x"],
|
||||||
files: ["adv", "hr", "o", "pol", "s4s", "tg", "tv", "x"],
|
files: ["adv", "hr", "o", "pol", "s4s", "tg", "tv", "x"],
|
||||||
data: {
|
data: {
|
||||||
@ -9990,8 +9995,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Nyafuu": {
|
name: "Nyafuu",
|
||||||
boards: ["c", "e", "w", "wg"],
|
boards: ["c", "e", "w", "wg"],
|
||||||
files: ["c", "e", "w", "wg"],
|
files: ["c", "e", "w", "wg"],
|
||||||
data: {
|
data: {
|
||||||
@ -10000,8 +10005,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Love is Over": {
|
name: "Love is Over",
|
||||||
boards: ["d", "i"],
|
boards: ["d", "i"],
|
||||||
files: ["d", "i"],
|
files: ["d", "i"],
|
||||||
data: {
|
data: {
|
||||||
@ -10010,8 +10015,8 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Install Gentoo (.net)": {
|
name: "Install Gentoo",
|
||||||
boards: ["diy", "g", "sci"],
|
boards: ["diy", "g", "sci"],
|
||||||
files: [],
|
files: [],
|
||||||
data: {
|
data: {
|
||||||
@ -10020,28 +10025,18 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "fuuka"
|
software: "fuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Install Gentoo (.com)": {
|
name: "Rebecca Black Tech",
|
||||||
boards: ["t", "g"],
|
|
||||||
files: ["t", "g"],
|
|
||||||
data: {
|
|
||||||
domain: "archive.installgentoo.com/",
|
|
||||||
http: true,
|
|
||||||
https: true,
|
|
||||||
software: "foolfuuka"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Rebecca Black Tech": {
|
|
||||||
boards: ["cgl", "g", "mu", "w"],
|
boards: ["cgl", "g", "mu", "w"],
|
||||||
files: ["cgl", "g", "mu", "w"],
|
files: ["cgl", "g", "mu", "w"],
|
||||||
data: {
|
data: {
|
||||||
domain: "rbt.asia",
|
domain: "archive.rebeccablacktech.com",
|
||||||
http: true,
|
http: true,
|
||||||
https: true,
|
https: true,
|
||||||
software: "fuuka"
|
software: "fuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Heinessen": {
|
name: "Heinessen",
|
||||||
boards: ["an", "fit", "k", "mlp", "r9k", "toy"],
|
boards: ["an", "fit", "k", "mlp", "r9k", "toy"],
|
||||||
files: ["an", "fit", "k", "r9k", "toy"],
|
files: ["an", "fit", "k", "r9k", "toy"],
|
||||||
data: {
|
data: {
|
||||||
@ -10049,18 +10044,17 @@
|
|||||||
http: true,
|
http: true,
|
||||||
software: "fuuka"
|
software: "fuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"warosu": {
|
name: "warosu",
|
||||||
boards: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"],
|
boards: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"],
|
||||||
files: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"],
|
files: ["3", "cgl", "ck", "fa", "ic", "jp", "lit", "tg", "vr"],
|
||||||
data: {
|
data: {
|
||||||
domain: "fuuka.warosu.org",
|
domain: "fuuka.warosu.org",
|
||||||
http: true,
|
|
||||||
https: true,
|
https: true,
|
||||||
software: "fuuka"
|
software: "fuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"fgst": {
|
name: "fgts",
|
||||||
boards: ["r", "soc"],
|
boards: ["r", "soc"],
|
||||||
files: ["r", "soc"],
|
files: ["r", "soc"],
|
||||||
data: {
|
data: {
|
||||||
@ -10069,20 +10063,28 @@
|
|||||||
https: true,
|
https: true,
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"maware": {
|
name: "maware",
|
||||||
boards: ["t"],
|
boards: ["t"],
|
||||||
files: ["t"],
|
files: ["t"],
|
||||||
data: {
|
data: {
|
||||||
domain: "archive.mawa.re",
|
domain: "archive.mawa.re",
|
||||||
http: true,
|
http: true,
|
||||||
https: false,
|
|
||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
},
|
}, {
|
||||||
"Foolz Beta": {
|
name: "installgentoo.com",
|
||||||
boards: ["a", "co", "gd", "jp", "m", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
boards: ["g", "t"],
|
||||||
files: ["a", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
files: ["g", "t"],
|
||||||
|
data: {
|
||||||
|
domain: "chan.installgentoo.com",
|
||||||
|
http: true,
|
||||||
|
software: "foolfuuka"
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
name: "Foolz Beta",
|
||||||
|
boards: ["a", "biz", "co", "d", "gd", "jp", "m", "mlp", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
||||||
|
files: ["a", "biz", "d", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"],
|
||||||
data: {
|
data: {
|
||||||
domain: "beta.foolz.us",
|
domain: "beta.foolz.us",
|
||||||
http: true,
|
http: true,
|
||||||
@ -10091,7 +10093,7 @@
|
|||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
],
|
||||||
to: function(dest, data) {
|
to: function(dest, data) {
|
||||||
var archive;
|
var archive;
|
||||||
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
postMessage({version:'1.3.7'},'*')
|
postMessage({version:'1.3.10'},'*')
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "4chan-X",
|
"name": "4chan-X",
|
||||||
"version": "1.3.7",
|
"version": "1.3.10",
|
||||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||||
"meta": {
|
"meta": {
|
||||||
"name": "4chan X",
|
"name": "4chan X",
|
||||||
|
|||||||
@ -137,8 +137,8 @@ Redirect =
|
|||||||
software: "foolfuuka"
|
software: "foolfuuka"
|
||||||
,
|
,
|
||||||
name: "Foolz Beta"
|
name: "Foolz Beta"
|
||||||
boards: ["a", "co", "gd", "jp", "m", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
boards: ["a", "biz", "co", "d", "gd", "jp", "m", "mlp", "s4s", "sp", "tg", "tv", "u", "v", "vg", "vp", "vr", "wsg"],
|
||||||
files: ["a", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"]
|
files: ["a", "biz", "d", "gd", "jp", "m", "s4s", "tg", "u", "vg", "vp", "vr", "wsg"]
|
||||||
data:
|
data:
|
||||||
domain: "beta.foolz.us"
|
domain: "beta.foolz.us"
|
||||||
http: true
|
http: true
|
||||||
|
|||||||
@ -276,7 +276,23 @@ QR =
|
|||||||
QR.handleFiles files
|
QR.handleFiles files
|
||||||
$.addClass QR.nodes.el, 'dump'
|
$.addClass QR.nodes.el, 'dump'
|
||||||
|
|
||||||
handleBlob: (blob) ->
|
handleBlob: (urlBlob, header, url) ->
|
||||||
|
name = url.substr(url.lastIndexOf('/')+1, url.length)
|
||||||
|
#QUALITY coding at work
|
||||||
|
start = header.indexOf("Content-Type: ") + 14
|
||||||
|
endsc = header.substr(start, header.length).indexOf(";")
|
||||||
|
endnl = header.substr(start, header.length).indexOf("\n") - 1
|
||||||
|
end = endnl
|
||||||
|
if (endsc != -1 and endsc < endnl)
|
||||||
|
end = endsc
|
||||||
|
mime = header.substr(start, end)
|
||||||
|
blob = new Blob([urlBlob], {type: mime})
|
||||||
|
blob.name = url.substr(url.lastIndexOf('/')+1, url.length)
|
||||||
|
name_start = header.indexOf('name="') + 6
|
||||||
|
if (name_start - 6 != -1)
|
||||||
|
name_end = header.substr(name_start, header.length).indexOf('"')
|
||||||
|
blob.name = header.substr(name_start, name_end)
|
||||||
|
|
||||||
return if blob.type is null
|
return if blob.type is null
|
||||||
QR.error "Unsupported file type."
|
QR.error "Unsupported file type."
|
||||||
return unless blob.type in QR.mimeTypes
|
return unless blob.type in QR.mimeTypes
|
||||||
@ -292,9 +308,7 @@ QR =
|
|||||||
xhr.responseType = 'blob'
|
xhr.responseType = 'blob'
|
||||||
xhr.onload = (e) ->
|
xhr.onload = (e) ->
|
||||||
if @readyState is @DONE && xhr.status is 200
|
if @readyState is @DONE && xhr.status is 200
|
||||||
urlBlob = new Blob([@response], {type : @getResponseHeader('content-type')})
|
QR.handleBlob(@response, @getResponseHeader('Content-Type'), url)
|
||||||
urlBlob.name = url.substr(url.lastIndexOf('/')+1, url.length)
|
|
||||||
QR.handleBlob(urlBlob)
|
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
QR.error "Can't load image."
|
QR.error "Can't load image."
|
||||||
@ -320,17 +334,8 @@ QR =
|
|||||||
while i < r.length
|
while i < r.length
|
||||||
data[i] = r.charCodeAt(i)
|
data[i] = r.charCodeAt(i)
|
||||||
i++
|
i++
|
||||||
#QUALITY coding at work
|
|
||||||
header = xhr.responseHeaders
|
|
||||||
start = header.indexOf("Content-Type: ") + 14
|
|
||||||
end = header.substr(start, header.length).indexOf("\n") - 1
|
|
||||||
mime = header.substr(start, end)
|
|
||||||
return if mime is null
|
|
||||||
|
|
||||||
urlBlob = new Blob([data], {type: mime})
|
QR.handleBlob(data, xhr.responseHeaders, url)
|
||||||
|
|
||||||
urlBlob.name = url.substr(url.lastIndexOf('/')+1, url.length)
|
|
||||||
QR.handleBlob(urlBlob)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
onerror: (xhr) ->
|
onerror: (xhr) ->
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user