Release 4chan X v1.11.22.1.
This commit is contained in:
parent
55da327b10
commit
6cec3f5927
@ -4,6 +4,11 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's wor
|
|||||||
|
|
||||||
### v1.11.22
|
### v1.11.22
|
||||||
|
|
||||||
|
**v1.11.22.1** *(2016-01-12)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.1/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||||
|
- Update archive image search URL, avoiding problem with image search on fireden.net.
|
||||||
|
- Add `%sMD5` (MD5 in URL-safe base64) and `%hMD5` (MD5 in hexadecimal) to available sauce parameters.
|
||||||
|
- Improve Violentmonkey support.
|
||||||
|
|
||||||
**v1.11.22.0** *(2016-01-10)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
**v1.11.22.0** *(2016-01-10)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.22.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||||
- Based on v1.11.21.5.
|
- Based on v1.11.21.5.
|
||||||
- Disable safe search in Google image search links.
|
- Disable safe search in Google image search links.
|
||||||
|
|||||||
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X beta
|
// @name 4chan X beta
|
||||||
// @version 1.11.22.0
|
// @version 1.11.22.1
|
||||||
// @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 beta
|
// @name 4chan X beta
|
||||||
// @version 1.11.22.0
|
// @version 1.11.22.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -309,7 +309,7 @@
|
|||||||
filesize: '',
|
filesize: '',
|
||||||
MD5: ''
|
MD5: ''
|
||||||
},
|
},
|
||||||
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%MD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%MD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/?task=search2&search_media_hash=%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%sMD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%sMD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/image/%sMD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
||||||
FappeT: {
|
FappeT: {
|
||||||
werk: false
|
werk: false
|
||||||
},
|
},
|
||||||
@ -434,7 +434,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.11.22.0',
|
VERSION: '1.11.22.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -1041,7 +1041,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
if ($.hasStorage) {
|
if ($.hasStorage) {
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1060,7 +1060,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
}
|
}
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
$.setValue = function() {};
|
$.setValue = function() {};
|
||||||
@ -1088,30 +1088,33 @@
|
|||||||
};
|
};
|
||||||
(function() {
|
(function() {
|
||||||
var onChange;
|
var onChange;
|
||||||
onChange = function(key) {
|
onChange = function(arg) {
|
||||||
var cb, newValue;
|
var cb, key, newValue;
|
||||||
|
key = arg.key, newValue = arg.newValue;
|
||||||
if (!(cb = $.syncing[key])) {
|
if (!(cb = $.syncing[key])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
newValue = $.getValue(key);
|
if (newValue != null) {
|
||||||
if (newValue === $.oldValue[key]) {
|
if (newValue === $.oldValue[key]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (newValue != null) {
|
|
||||||
$.oldValue[key] = newValue;
|
$.oldValue[key] = newValue;
|
||||||
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
||||||
} else {
|
} else {
|
||||||
|
if ($.oldValue[key] == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
return cb(void 0, key.slice(g.NAMESPACE.length));
|
return cb(void 0, key.slice(g.NAMESPACE.length));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.on(window, 'storage', function(arg) {
|
$.on(window, 'storage', onChange);
|
||||||
var key;
|
|
||||||
key = arg.key;
|
|
||||||
return onChange(key);
|
|
||||||
});
|
|
||||||
return $.forceSync = function(key) {
|
return $.forceSync = function(key) {
|
||||||
return onChange(g.NAMESPACE + key);
|
key = g.NAMESPACE + key;
|
||||||
|
return onChange({
|
||||||
|
key: key,
|
||||||
|
newValue: $.getValue(key)
|
||||||
|
});
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
} else {
|
} else {
|
||||||
@ -11528,23 +11531,14 @@
|
|||||||
ext = post.file.url.match(/[^.]*$/)[0];
|
ext = post.file.url.match(/[^.]*$/)[0];
|
||||||
skip = false;
|
skip = false;
|
||||||
for (key in parts) {
|
for (key in parts) {
|
||||||
parts[key] = parts[key].replace(/%(T?URL|IMG|MD5|board|name|%|semi)/g, function(parameter) {
|
parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) {
|
||||||
var type;
|
var type;
|
||||||
type = {
|
type = Sauce.formatters[parameter](post, ext);
|
||||||
'%TURL': post.file.thumbURL,
|
|
||||||
'%URL': post.file.url,
|
|
||||||
'%IMG': ext === 'gif' || ext === 'jpg' || ext === 'png' ? post.file.url : post.file.thumbURL,
|
|
||||||
'%MD5': post.file.MD5,
|
|
||||||
'%board': post.board.ID,
|
|
||||||
'%name': post.file.name,
|
|
||||||
'%%': '%',
|
|
||||||
'%semi': ';'
|
|
||||||
}[parameter];
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
skip = true;
|
skip = true;
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
if (key === 'url' && parameter !== '%%' && parameter !== '%semi') {
|
if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) {
|
||||||
if (/^javascript:/i.test(parts['url'])) {
|
if (/^javascript:/i.test(parts['url'])) {
|
||||||
type = JSON.stringify(type);
|
type = JSON.stringify(type);
|
||||||
}
|
}
|
||||||
@ -11591,6 +11585,60 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $.add(this.file.text, nodes);
|
return $.add(this.file.text, nodes);
|
||||||
|
},
|
||||||
|
formatters: {
|
||||||
|
TURL: function(post) {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
},
|
||||||
|
URL: function(post) {
|
||||||
|
return post.file.url;
|
||||||
|
},
|
||||||
|
IMG: function(post, ext) {
|
||||||
|
if (ext === 'gif' || ext === 'jpg' || ext === 'png') {
|
||||||
|
return post.file.url;
|
||||||
|
} else {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
MD5: function(post) {
|
||||||
|
return post.file.MD5;
|
||||||
|
},
|
||||||
|
sMD5: function(post) {
|
||||||
|
var ref;
|
||||||
|
return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
}) : void 0;
|
||||||
|
},
|
||||||
|
hMD5: function(post) {
|
||||||
|
if (post.file.MD5) {
|
||||||
|
return ((function() {
|
||||||
|
var k, len1, ref, results;
|
||||||
|
ref = atob(post.file.MD5);
|
||||||
|
results = [];
|
||||||
|
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||||
|
c = ref[k];
|
||||||
|
results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
})()).join('');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
board: function(post) {
|
||||||
|
return post.board.ID;
|
||||||
|
},
|
||||||
|
name: function(post) {
|
||||||
|
return post.file.name;
|
||||||
|
},
|
||||||
|
'%': function() {
|
||||||
|
return '%';
|
||||||
|
},
|
||||||
|
semi: function() {
|
||||||
|
return ';';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14690,9 +14738,17 @@
|
|||||||
value = {
|
value = {
|
||||||
'Developer': 'dev'
|
'Developer': 'dev'
|
||||||
}[value] || value.toLowerCase();
|
}[value] || value.toLowerCase();
|
||||||
|
} else if (type === 'image') {
|
||||||
|
value = value.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
value = encodeURIComponent(value);
|
value = encodeURIComponent(value);
|
||||||
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value : boardID + "/?task=search2&search_" + (type === 'image' ? 'media_hash' : type) + "=" + value;
|
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value;
|
||||||
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
||||||
},
|
},
|
||||||
report: function(archive, arg) {
|
report: function(archive, arg) {
|
||||||
@ -17314,7 +17370,7 @@
|
|||||||
sauce: function(section) {
|
sauce: function(section) {
|
||||||
var ta;
|
var ta;
|
||||||
$.extend(section, {
|
$.extend(section, {
|
||||||
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash in base64.</li><li><code>%sMD5</code>: MD5 hash in base64 using <code>-</code> and <code>_</code>.</li><li><code>%hMD5</code>: MD5 hash in hexadecimal.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
||||||
});
|
});
|
||||||
$('.warning', section).hidden = Conf['Sauce'];
|
$('.warning', section).hidden = Conf['Sauce'];
|
||||||
ta = $('textarea', section);
|
ta = $('textarea', section);
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.11.22.0
|
// @version 1.11.22.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -309,7 +309,7 @@
|
|||||||
filesize: '',
|
filesize: '',
|
||||||
MD5: ''
|
MD5: ''
|
||||||
},
|
},
|
||||||
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%MD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%MD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/?task=search2&search_media_hash=%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%sMD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%sMD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/image/%sMD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
||||||
FappeT: {
|
FappeT: {
|
||||||
werk: false
|
werk: false
|
||||||
},
|
},
|
||||||
@ -434,7 +434,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.11.22.0',
|
VERSION: '1.11.22.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -1041,7 +1041,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
if ($.hasStorage) {
|
if ($.hasStorage) {
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1060,7 +1060,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
}
|
}
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
$.setValue = function() {};
|
$.setValue = function() {};
|
||||||
@ -1088,30 +1088,33 @@
|
|||||||
};
|
};
|
||||||
(function() {
|
(function() {
|
||||||
var onChange;
|
var onChange;
|
||||||
onChange = function(key) {
|
onChange = function(arg) {
|
||||||
var cb, newValue;
|
var cb, key, newValue;
|
||||||
|
key = arg.key, newValue = arg.newValue;
|
||||||
if (!(cb = $.syncing[key])) {
|
if (!(cb = $.syncing[key])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
newValue = $.getValue(key);
|
if (newValue != null) {
|
||||||
if (newValue === $.oldValue[key]) {
|
if (newValue === $.oldValue[key]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (newValue != null) {
|
|
||||||
$.oldValue[key] = newValue;
|
$.oldValue[key] = newValue;
|
||||||
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
||||||
} else {
|
} else {
|
||||||
|
if ($.oldValue[key] == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
return cb(void 0, key.slice(g.NAMESPACE.length));
|
return cb(void 0, key.slice(g.NAMESPACE.length));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.on(window, 'storage', function(arg) {
|
$.on(window, 'storage', onChange);
|
||||||
var key;
|
|
||||||
key = arg.key;
|
|
||||||
return onChange(key);
|
|
||||||
});
|
|
||||||
return $.forceSync = function(key) {
|
return $.forceSync = function(key) {
|
||||||
return onChange(g.NAMESPACE + key);
|
key = g.NAMESPACE + key;
|
||||||
|
return onChange({
|
||||||
|
key: key,
|
||||||
|
newValue: $.getValue(key)
|
||||||
|
});
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
} else {
|
} else {
|
||||||
@ -11528,23 +11531,14 @@
|
|||||||
ext = post.file.url.match(/[^.]*$/)[0];
|
ext = post.file.url.match(/[^.]*$/)[0];
|
||||||
skip = false;
|
skip = false;
|
||||||
for (key in parts) {
|
for (key in parts) {
|
||||||
parts[key] = parts[key].replace(/%(T?URL|IMG|MD5|board|name|%|semi)/g, function(parameter) {
|
parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) {
|
||||||
var type;
|
var type;
|
||||||
type = {
|
type = Sauce.formatters[parameter](post, ext);
|
||||||
'%TURL': post.file.thumbURL,
|
|
||||||
'%URL': post.file.url,
|
|
||||||
'%IMG': ext === 'gif' || ext === 'jpg' || ext === 'png' ? post.file.url : post.file.thumbURL,
|
|
||||||
'%MD5': post.file.MD5,
|
|
||||||
'%board': post.board.ID,
|
|
||||||
'%name': post.file.name,
|
|
||||||
'%%': '%',
|
|
||||||
'%semi': ';'
|
|
||||||
}[parameter];
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
skip = true;
|
skip = true;
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
if (key === 'url' && parameter !== '%%' && parameter !== '%semi') {
|
if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) {
|
||||||
if (/^javascript:/i.test(parts['url'])) {
|
if (/^javascript:/i.test(parts['url'])) {
|
||||||
type = JSON.stringify(type);
|
type = JSON.stringify(type);
|
||||||
}
|
}
|
||||||
@ -11591,6 +11585,60 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $.add(this.file.text, nodes);
|
return $.add(this.file.text, nodes);
|
||||||
|
},
|
||||||
|
formatters: {
|
||||||
|
TURL: function(post) {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
},
|
||||||
|
URL: function(post) {
|
||||||
|
return post.file.url;
|
||||||
|
},
|
||||||
|
IMG: function(post, ext) {
|
||||||
|
if (ext === 'gif' || ext === 'jpg' || ext === 'png') {
|
||||||
|
return post.file.url;
|
||||||
|
} else {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
MD5: function(post) {
|
||||||
|
return post.file.MD5;
|
||||||
|
},
|
||||||
|
sMD5: function(post) {
|
||||||
|
var ref;
|
||||||
|
return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
}) : void 0;
|
||||||
|
},
|
||||||
|
hMD5: function(post) {
|
||||||
|
if (post.file.MD5) {
|
||||||
|
return ((function() {
|
||||||
|
var k, len1, ref, results;
|
||||||
|
ref = atob(post.file.MD5);
|
||||||
|
results = [];
|
||||||
|
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||||
|
c = ref[k];
|
||||||
|
results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
})()).join('');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
board: function(post) {
|
||||||
|
return post.board.ID;
|
||||||
|
},
|
||||||
|
name: function(post) {
|
||||||
|
return post.file.name;
|
||||||
|
},
|
||||||
|
'%': function() {
|
||||||
|
return '%';
|
||||||
|
},
|
||||||
|
semi: function() {
|
||||||
|
return ';';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14690,9 +14738,17 @@
|
|||||||
value = {
|
value = {
|
||||||
'Developer': 'dev'
|
'Developer': 'dev'
|
||||||
}[value] || value.toLowerCase();
|
}[value] || value.toLowerCase();
|
||||||
|
} else if (type === 'image') {
|
||||||
|
value = value.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
value = encodeURIComponent(value);
|
value = encodeURIComponent(value);
|
||||||
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value : boardID + "/?task=search2&search_" + (type === 'image' ? 'media_hash' : type) + "=" + value;
|
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value;
|
||||||
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
||||||
},
|
},
|
||||||
report: function(archive, arg) {
|
report: function(archive, arg) {
|
||||||
@ -17314,7 +17370,7 @@
|
|||||||
sauce: function(section) {
|
sauce: function(section) {
|
||||||
var ta;
|
var ta;
|
||||||
$.extend(section, {
|
$.extend(section, {
|
||||||
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash in base64.</li><li><code>%sMD5</code>: MD5 hash in base64 using <code>-</code> and <code>_</code>.</li><li><code>%hMD5</code>: MD5 hash in hexadecimal.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
||||||
});
|
});
|
||||||
$('.warning', section).hidden = Conf['Sauce'];
|
$('.warning', section).hidden = Conf['Sauce'];
|
||||||
ta = $('textarea', section);
|
ta = $('textarea', section);
|
||||||
|
|||||||
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.11.22.0
|
// @version 1.11.22.1
|
||||||
// @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.11.22.0
|
// @version 1.11.22.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -309,7 +309,7 @@
|
|||||||
filesize: '',
|
filesize: '',
|
||||||
MD5: ''
|
MD5: ''
|
||||||
},
|
},
|
||||||
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%MD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%MD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/?task=search2&search_media_hash=%MD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
sauces: "https://www.google.com/searchbyimage?image_url=%IMG&safe=off\n//iqdb.org/?url=%IMG\nhttp://eye.swfchan.com/search/?q=%name;types:swf;sandbox\n#//tineye.com/search?url=%IMG\n#https://www.yandex.com/images/search?rpt=imageview&img_url=%IMG\n#//saucenao.com/search.php?url=%IMG\n#http://3d.iqdb.org/?url=%IMG\n# tools:\n#http://regex.info/exif.cgi?imgurl=%URL\n#//imgops.com/%URL;types:gif,jpg,png\n# uploaders:\n#//imgur.com/upload?url=%URL;types:gif,jpg,png,pdf;text:Upload to imgur\n# \"View Same\" in archives:\n#https://archive.4plebs.org/_/search/image/%sMD5/;text:View same on 4plebs\n#https://archive.4plebs.org/%board/search/image/%sMD5/;text:View same on 4plebs /%board/;boards:adv,f,hr,o,pol,s4s,sp,tg,trv,tv,x\n#https://rbt.asia/%board/image/%sMD5;text:View same on RBT /%board/;boards:cgl,g,mu,qa,w",
|
||||||
FappeT: {
|
FappeT: {
|
||||||
werk: false
|
werk: false
|
||||||
},
|
},
|
||||||
@ -434,7 +434,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.11.22.0',
|
VERSION: '1.11.22.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -1041,7 +1041,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
if ($.hasStorage) {
|
if ($.hasStorage) {
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -1060,7 +1060,7 @@
|
|||||||
if (key in $.syncing) {
|
if (key in $.syncing) {
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
}
|
}
|
||||||
return delete localStorage[key];
|
return localStorage.removeItem(key);
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
$.setValue = function() {};
|
$.setValue = function() {};
|
||||||
@ -1088,30 +1088,33 @@
|
|||||||
};
|
};
|
||||||
(function() {
|
(function() {
|
||||||
var onChange;
|
var onChange;
|
||||||
onChange = function(key) {
|
onChange = function(arg) {
|
||||||
var cb, newValue;
|
var cb, key, newValue;
|
||||||
|
key = arg.key, newValue = arg.newValue;
|
||||||
if (!(cb = $.syncing[key])) {
|
if (!(cb = $.syncing[key])) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
newValue = $.getValue(key);
|
if (newValue != null) {
|
||||||
if (newValue === $.oldValue[key]) {
|
if (newValue === $.oldValue[key]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (newValue != null) {
|
|
||||||
$.oldValue[key] = newValue;
|
$.oldValue[key] = newValue;
|
||||||
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length));
|
||||||
} else {
|
} else {
|
||||||
|
if ($.oldValue[key] == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
delete $.oldValue[key];
|
delete $.oldValue[key];
|
||||||
return cb(void 0, key.slice(g.NAMESPACE.length));
|
return cb(void 0, key.slice(g.NAMESPACE.length));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.on(window, 'storage', function(arg) {
|
$.on(window, 'storage', onChange);
|
||||||
var key;
|
|
||||||
key = arg.key;
|
|
||||||
return onChange(key);
|
|
||||||
});
|
|
||||||
return $.forceSync = function(key) {
|
return $.forceSync = function(key) {
|
||||||
return onChange(g.NAMESPACE + key);
|
key = g.NAMESPACE + key;
|
||||||
|
return onChange({
|
||||||
|
key: key,
|
||||||
|
newValue: $.getValue(key)
|
||||||
|
});
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
} else {
|
} else {
|
||||||
@ -11528,23 +11531,14 @@
|
|||||||
ext = post.file.url.match(/[^.]*$/)[0];
|
ext = post.file.url.match(/[^.]*$/)[0];
|
||||||
skip = false;
|
skip = false;
|
||||||
for (key in parts) {
|
for (key in parts) {
|
||||||
parts[key] = parts[key].replace(/%(T?URL|IMG|MD5|board|name|%|semi)/g, function(parameter) {
|
parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) {
|
||||||
var type;
|
var type;
|
||||||
type = {
|
type = Sauce.formatters[parameter](post, ext);
|
||||||
'%TURL': post.file.thumbURL,
|
|
||||||
'%URL': post.file.url,
|
|
||||||
'%IMG': ext === 'gif' || ext === 'jpg' || ext === 'png' ? post.file.url : post.file.thumbURL,
|
|
||||||
'%MD5': post.file.MD5,
|
|
||||||
'%board': post.board.ID,
|
|
||||||
'%name': post.file.name,
|
|
||||||
'%%': '%',
|
|
||||||
'%semi': ';'
|
|
||||||
}[parameter];
|
|
||||||
if (type == null) {
|
if (type == null) {
|
||||||
skip = true;
|
skip = true;
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
if (key === 'url' && parameter !== '%%' && parameter !== '%semi') {
|
if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) {
|
||||||
if (/^javascript:/i.test(parts['url'])) {
|
if (/^javascript:/i.test(parts['url'])) {
|
||||||
type = JSON.stringify(type);
|
type = JSON.stringify(type);
|
||||||
}
|
}
|
||||||
@ -11591,6 +11585,60 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $.add(this.file.text, nodes);
|
return $.add(this.file.text, nodes);
|
||||||
|
},
|
||||||
|
formatters: {
|
||||||
|
TURL: function(post) {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
},
|
||||||
|
URL: function(post) {
|
||||||
|
return post.file.url;
|
||||||
|
},
|
||||||
|
IMG: function(post, ext) {
|
||||||
|
if (ext === 'gif' || ext === 'jpg' || ext === 'png') {
|
||||||
|
return post.file.url;
|
||||||
|
} else {
|
||||||
|
return post.file.thumbURL;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
MD5: function(post) {
|
||||||
|
return post.file.MD5;
|
||||||
|
},
|
||||||
|
sMD5: function(post) {
|
||||||
|
var ref;
|
||||||
|
return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
}) : void 0;
|
||||||
|
},
|
||||||
|
hMD5: function(post) {
|
||||||
|
if (post.file.MD5) {
|
||||||
|
return ((function() {
|
||||||
|
var k, len1, ref, results;
|
||||||
|
ref = atob(post.file.MD5);
|
||||||
|
results = [];
|
||||||
|
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||||
|
c = ref[k];
|
||||||
|
results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2));
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
})()).join('');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
board: function(post) {
|
||||||
|
return post.board.ID;
|
||||||
|
},
|
||||||
|
name: function(post) {
|
||||||
|
return post.file.name;
|
||||||
|
},
|
||||||
|
'%': function() {
|
||||||
|
return '%';
|
||||||
|
},
|
||||||
|
semi: function() {
|
||||||
|
return ';';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -14690,9 +14738,17 @@
|
|||||||
value = {
|
value = {
|
||||||
'Developer': 'dev'
|
'Developer': 'dev'
|
||||||
}[value] || value.toLowerCase();
|
}[value] || value.toLowerCase();
|
||||||
|
} else if (type === 'image') {
|
||||||
|
value = value.replace(/[+\/=]/g, function(c) {
|
||||||
|
return {
|
||||||
|
'+': '-',
|
||||||
|
'/': '_',
|
||||||
|
'=': ''
|
||||||
|
}[c];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
value = encodeURIComponent(value);
|
value = encodeURIComponent(value);
|
||||||
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value : boardID + "/?task=search2&search_" + (type === 'image' ? 'media_hash' : type) + "=" + value;
|
path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value;
|
||||||
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path;
|
||||||
},
|
},
|
||||||
report: function(archive, arg) {
|
report: function(archive, arg) {
|
||||||
@ -17314,7 +17370,7 @@
|
|||||||
sauce: function(section) {
|
sauce: function(section) {
|
||||||
var ta;
|
var ta;
|
||||||
$.extend(section, {
|
$.extend(section, {
|
||||||
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
innerHTML: "<div class=\"warning\"><code>Sauce</code> is disabled.</div><div>Lines starting with a <code>#</code> will be ignored.</div><div>You can specify a display text by appending <code>;text:[text]</code> to the URL.</div><div>You can specify the applicable boards by appending <code>;boards:[board1],[board2]</code>.</div><div>You can specify the applicable file types by appending <code>;types:[extension1],[extension2]</code>.</div><div>You can open links with scripts and popups disabled by appending <code>;sandbox</code>.</div><ul>These parameters will be replaced by their corresponding values:<li><code>%TURL</code>: Thumbnail URL.</li><li><code>%URL</code>: Full image URL.</li><li><code>%IMG</code>: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.</li><li><code>%MD5</code>: MD5 hash in base64.</li><li><code>%sMD5</code>: MD5 hash in base64 using <code>-</code> and <code>_</code>.</li><li><code>%hMD5</code>: MD5 hash in hexadecimal.</li><li><code>%name</code>: Original file name.</li><li><code>%board</code>: Current board.</li><li><code>%%</code>, <code>%semi</code>: Literal <code>%</code> and <code>;</code>.</li></ul><textarea name=\"sauces\" class=\"field\" spellcheck=\"false\"></textarea>"
|
||||||
});
|
});
|
||||||
$('.warning', section).hidden = Conf['Sauce'];
|
$('.warning', section).hidden = Conf['Sauce'];
|
||||||
ta = $('textarea', section);
|
ta = $('textarea', section);
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.22.0' />
|
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.22.1' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.11.22.0' />
|
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.11.22.1' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": "1.11.22.0",
|
"version": "1.11.22.1",
|
||||||
"date": "2016-01-11T01:04:20.341Z"
|
"date": "2016-01-12T10:18:55.491Z"
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user