Release 4chan X v1.14.5.8.

This commit is contained in:
ccd0 2019-01-24 15:06:51 -08:00
parent 6671afc690
commit d4cd42ddfc
15 changed files with 123 additions and 59 deletions

View File

@ -4,6 +4,13 @@
### v1.14.5 ### v1.14.5
**v1.14.5.8** *(2019-01-24)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.8/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.8/builds/4chan-X-noupdate.crx)]
- Restore updating faster than 30 seconds after 4chan change.
- Fix false detection of posts added by updater on Tinyboard as own posts.
- Support recognizing quotelinks to pages with extensions other than .html.
- Add FLAC and M4A to embeddable audio types. #2202
- Fix issue from v1.14.5.6 causing display of 'NaN seconds' before index is loaded.
**v1.14.5.7** *(2019-01-06)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.7/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.7/builds/4chan-X-noupdate.crx)] **v1.14.5.7** *(2019-01-06)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.7/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.5.7/builds/4chan-X-noupdate.crx)]
- Work when site uses extensions for pages other than .html - Work when site uses extensions for pages other than .html

Binary file not shown.

View File

@ -1,6 +1,6 @@
// ==UserScript== // ==UserScript==
// @name 4chan X beta // @name 4chan X beta
// @version 1.14.5.7 // @version 1.14.5.8
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X

View File

@ -1,6 +1,6 @@
// ==UserScript== // ==UserScript==
// @name 4chan X beta // @name 4chan X beta
// @version 1.14.5.7 // @version 1.14.5.8
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -198,7 +198,7 @@ docSet = function() {
}; };
g = { g = {
VERSION: '1.14.5.7', VERSION: '1.14.5.8',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -4603,7 +4603,7 @@ $ = (function() {
pageXHR = XMLHttpRequest; pageXHR = XMLHttpRequest;
} }
return function(url, options, extra) { return function(url, options, extra) {
var err, event, form, j, len, r, ref, ref1, type, upCallbacks, whenModified; var err, event, form, j, len, params, r, ref, ref1, type, upCallbacks, url0, whenModified;
if (options == null) { if (options == null) {
options = {}; options = {};
} }
@ -4617,19 +4617,29 @@ $ = (function() {
} }
} }
url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/');
if ($.engine === 'blink' && whenModified) { if (whenModified) {
url += "?s=" + whenModified; params = [];
if ($.engine === 'blink') {
params.push("s=" + whenModified);
}
if (Site.software === 'yotsuba') {
params.push("t=" + (Date.now()));
}
url0 = url;
if (params.length) {
url += '?' + params.join('&');
}
} }
r = new pageXHR(); r = new pageXHR();
type || (type = form && 'post' || 'get'); type || (type = form && 'post' || 'get');
try { try {
r.open(type, url, true); r.open(type, url, true);
if (whenModified) { if (whenModified) {
if (((ref = lastModified[whenModified]) != null ? ref[url] : void 0) != null) { if (((ref = lastModified[whenModified]) != null ? ref[url0] : void 0) != null) {
r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url0]);
} }
$.on(r, 'load', function() { $.on(r, 'load', function() {
return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url0] = r.getResponseHeader('Last-Modified');
}); });
} }
$.extend(r, options); $.extend(r, options);
@ -7382,8 +7392,8 @@ SW = {};
postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]' postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]'
}, },
regexp: { regexp: {
quotelink: /\/([^\/]+)\/res\/(\d+)\.html#(\d+)$/, quotelink: /\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)$/,
quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.html#(\d+)"/g quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)"/g
}, },
bgColoredEl: function() { bgColoredEl: function() {
return $.el('div', { return $.el('div', {
@ -10356,7 +10366,7 @@ Index = (function() {
return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); return d.title = d.title.replace(/\ -\ Page\ \d+/, '');
}); });
$.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() {
var board, el, len3, m, ref9, topNavPos; var board, el, len3, m, ref9, timeEl, topNavPos;
Build.hat = $('.board > .thread > img:first-child'); Build.hat = $('.board > .thread > img:first-child');
if (Build.hat) { if (Build.hat) {
g.BOARD.threads.forEach(function(thread) { g.BOARD.threads.forEach(function(thread) {
@ -10384,7 +10394,10 @@ Index = (function() {
topNavPos = $.id('delform').previousElementSibling; topNavPos = $.id('delform').previousElementSibling;
$.before(topNavPos, $.el('hr')); $.before(topNavPos, $.el('hr'));
$.before(topNavPos, Index.navLinks); $.before(topNavPos, Index.navLinks);
return RelativeDates.update($('#index-last-refresh time', Index.navLinks)); timeEl = $('#index-last-refresh time', Index.navLinks);
if (timeEl.dataset.utc) {
return RelativeDates.update(timeEl);
}
}); });
return Main.ready(function() { return Main.ready(function() {
var pagelist; var pagelist;
@ -15481,7 +15494,7 @@ Embedding = (function() {
ordered_types: [ ordered_types: [
{ {
key: 'audio', key: 'audio',
regExp: /^[^?#]+\.(?:mp3|oga|wav)(?:[?#]|$)/i, regExp: /^[^?#]+\.(?:mp3|m4a|oga|wav|flac)(?:[?#]|$)/i,
style: '', style: '',
el: function(a) { el: function(a) {
return $.el('audio', { return $.el('audio', {
@ -18943,12 +18956,18 @@ Tinyboard = (function() {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
return Main.ready(function() { return Main.ready(function() {
return $.global(function() { return $.global(function() {
var boardID, ref, threadID; var boardID, form, ref, threadID;
ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID; ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID;
threadID = +threadID; threadID = +threadID;
return window.$(document).on('new_post', function(e, post) { form = document.querySelector('form[name="post"]');
var detail, event, postID; return window.$(document).ajaxComplete(function(event, request, settings) {
postID = +post.id.match(/\d*$/)[0]; var detail, postID, ref1;
if (settings.url !== form.action) {
return;
}
if (!(postID = +((ref1 = request.responseJSON) != null ? ref1.id : void 0))) {
return;
}
detail = { detail = {
boardID: boardID, boardID: boardID,
threadID: threadID, threadID: threadID,

Binary file not shown.

View File

@ -1,6 +1,6 @@
// ==UserScript== // ==UserScript==
// @name 4chan X // @name 4chan X
// @version 1.14.5.7 // @version 1.14.5.8
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -198,7 +198,7 @@ docSet = function() {
}; };
g = { g = {
VERSION: '1.14.5.7', VERSION: '1.14.5.8',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -4603,7 +4603,7 @@ $ = (function() {
pageXHR = XMLHttpRequest; pageXHR = XMLHttpRequest;
} }
return function(url, options, extra) { return function(url, options, extra) {
var err, event, form, j, len, r, ref, ref1, type, upCallbacks, whenModified; var err, event, form, j, len, params, r, ref, ref1, type, upCallbacks, url0, whenModified;
if (options == null) { if (options == null) {
options = {}; options = {};
} }
@ -4617,19 +4617,29 @@ $ = (function() {
} }
} }
url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/');
if ($.engine === 'blink' && whenModified) { if (whenModified) {
url += "?s=" + whenModified; params = [];
if ($.engine === 'blink') {
params.push("s=" + whenModified);
}
if (Site.software === 'yotsuba') {
params.push("t=" + (Date.now()));
}
url0 = url;
if (params.length) {
url += '?' + params.join('&');
}
} }
r = new pageXHR(); r = new pageXHR();
type || (type = form && 'post' || 'get'); type || (type = form && 'post' || 'get');
try { try {
r.open(type, url, true); r.open(type, url, true);
if (whenModified) { if (whenModified) {
if (((ref = lastModified[whenModified]) != null ? ref[url] : void 0) != null) { if (((ref = lastModified[whenModified]) != null ? ref[url0] : void 0) != null) {
r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url0]);
} }
$.on(r, 'load', function() { $.on(r, 'load', function() {
return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url0] = r.getResponseHeader('Last-Modified');
}); });
} }
$.extend(r, options); $.extend(r, options);
@ -7382,8 +7392,8 @@ SW = {};
postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]' postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]'
}, },
regexp: { regexp: {
quotelink: /\/([^\/]+)\/res\/(\d+)\.html#(\d+)$/, quotelink: /\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)$/,
quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.html#(\d+)"/g quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)"/g
}, },
bgColoredEl: function() { bgColoredEl: function() {
return $.el('div', { return $.el('div', {
@ -10356,7 +10366,7 @@ Index = (function() {
return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); return d.title = d.title.replace(/\ -\ Page\ \d+/, '');
}); });
$.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() {
var board, el, len3, m, ref9, topNavPos; var board, el, len3, m, ref9, timeEl, topNavPos;
Build.hat = $('.board > .thread > img:first-child'); Build.hat = $('.board > .thread > img:first-child');
if (Build.hat) { if (Build.hat) {
g.BOARD.threads.forEach(function(thread) { g.BOARD.threads.forEach(function(thread) {
@ -10384,7 +10394,10 @@ Index = (function() {
topNavPos = $.id('delform').previousElementSibling; topNavPos = $.id('delform').previousElementSibling;
$.before(topNavPos, $.el('hr')); $.before(topNavPos, $.el('hr'));
$.before(topNavPos, Index.navLinks); $.before(topNavPos, Index.navLinks);
return RelativeDates.update($('#index-last-refresh time', Index.navLinks)); timeEl = $('#index-last-refresh time', Index.navLinks);
if (timeEl.dataset.utc) {
return RelativeDates.update(timeEl);
}
}); });
return Main.ready(function() { return Main.ready(function() {
var pagelist; var pagelist;
@ -15481,7 +15494,7 @@ Embedding = (function() {
ordered_types: [ ordered_types: [
{ {
key: 'audio', key: 'audio',
regExp: /^[^?#]+\.(?:mp3|oga|wav)(?:[?#]|$)/i, regExp: /^[^?#]+\.(?:mp3|m4a|oga|wav|flac)(?:[?#]|$)/i,
style: '', style: '',
el: function(a) { el: function(a) {
return $.el('audio', { return $.el('audio', {
@ -18943,12 +18956,18 @@ Tinyboard = (function() {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
return Main.ready(function() { return Main.ready(function() {
return $.global(function() { return $.global(function() {
var boardID, ref, threadID; var boardID, form, ref, threadID;
ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID; ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID;
threadID = +threadID; threadID = +threadID;
return window.$(document).on('new_post', function(e, post) { form = document.querySelector('form[name="post"]');
var detail, event, postID; return window.$(document).ajaxComplete(function(event, request, settings) {
postID = +post.id.match(/\d*$/)[0]; var detail, postID, ref1;
if (settings.url !== form.action) {
return;
}
if (!(postID = +((ref1 = request.responseJSON) != null ? ref1.id : void 0))) {
return;
}
detail = { detail = {
boardID: boardID, boardID: boardID,
threadID: threadID, threadID: threadID,

Binary file not shown.

View File

@ -1,6 +1,6 @@
// ==UserScript== // ==UserScript==
// @name 4chan X // @name 4chan X
// @version 1.14.5.7 // @version 1.14.5.8
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X

View File

@ -1,6 +1,6 @@
// ==UserScript== // ==UserScript==
// @name 4chan X // @name 4chan X
// @version 1.14.5.7 // @version 1.14.5.8
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -198,7 +198,7 @@ docSet = function() {
}; };
g = { g = {
VERSION: '1.14.5.7', VERSION: '1.14.5.8',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -4603,7 +4603,7 @@ $ = (function() {
pageXHR = XMLHttpRequest; pageXHR = XMLHttpRequest;
} }
return function(url, options, extra) { return function(url, options, extra) {
var err, event, form, j, len, r, ref, ref1, type, upCallbacks, whenModified; var err, event, form, j, len, params, r, ref, ref1, type, upCallbacks, url0, whenModified;
if (options == null) { if (options == null) {
options = {}; options = {};
} }
@ -4617,19 +4617,29 @@ $ = (function() {
} }
} }
url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/');
if ($.engine === 'blink' && whenModified) { if (whenModified) {
url += "?s=" + whenModified; params = [];
if ($.engine === 'blink') {
params.push("s=" + whenModified);
}
if (Site.software === 'yotsuba') {
params.push("t=" + (Date.now()));
}
url0 = url;
if (params.length) {
url += '?' + params.join('&');
}
} }
r = new pageXHR(); r = new pageXHR();
type || (type = form && 'post' || 'get'); type || (type = form && 'post' || 'get');
try { try {
r.open(type, url, true); r.open(type, url, true);
if (whenModified) { if (whenModified) {
if (((ref = lastModified[whenModified]) != null ? ref[url] : void 0) != null) { if (((ref = lastModified[whenModified]) != null ? ref[url0] : void 0) != null) {
r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url0]);
} }
$.on(r, 'load', function() { $.on(r, 'load', function() {
return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url0] = r.getResponseHeader('Last-Modified');
}); });
} }
$.extend(r, options); $.extend(r, options);
@ -7382,8 +7392,8 @@ SW = {};
postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]' postContainer: 'div[starts-with(@id,"reply_") or starts-with(@id,"thread_")]'
}, },
regexp: { regexp: {
quotelink: /\/([^\/]+)\/res\/(\d+)\.html#(\d+)$/, quotelink: /\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)$/,
quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.html#(\d+)"/g quotelinkHTML: /<a [^>]*\bhref="[^"]*\/([^\/]+)\/res\/(\d+)\.\w+#(\d+)"/g
}, },
bgColoredEl: function() { bgColoredEl: function() {
return $.el('div', { return $.el('div', {
@ -10356,7 +10366,7 @@ Index = (function() {
return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); return d.title = d.title.replace(/\ -\ Page\ \d+/, '');
}); });
$.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() {
var board, el, len3, m, ref9, topNavPos; var board, el, len3, m, ref9, timeEl, topNavPos;
Build.hat = $('.board > .thread > img:first-child'); Build.hat = $('.board > .thread > img:first-child');
if (Build.hat) { if (Build.hat) {
g.BOARD.threads.forEach(function(thread) { g.BOARD.threads.forEach(function(thread) {
@ -10384,7 +10394,10 @@ Index = (function() {
topNavPos = $.id('delform').previousElementSibling; topNavPos = $.id('delform').previousElementSibling;
$.before(topNavPos, $.el('hr')); $.before(topNavPos, $.el('hr'));
$.before(topNavPos, Index.navLinks); $.before(topNavPos, Index.navLinks);
return RelativeDates.update($('#index-last-refresh time', Index.navLinks)); timeEl = $('#index-last-refresh time', Index.navLinks);
if (timeEl.dataset.utc) {
return RelativeDates.update(timeEl);
}
}); });
return Main.ready(function() { return Main.ready(function() {
var pagelist; var pagelist;
@ -15481,7 +15494,7 @@ Embedding = (function() {
ordered_types: [ ordered_types: [
{ {
key: 'audio', key: 'audio',
regExp: /^[^?#]+\.(?:mp3|oga|wav)(?:[?#]|$)/i, regExp: /^[^?#]+\.(?:mp3|m4a|oga|wav|flac)(?:[?#]|$)/i,
style: '', style: '',
el: function(a) { el: function(a) {
return $.el('audio', { return $.el('audio', {
@ -18943,12 +18956,18 @@ Tinyboard = (function() {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
return Main.ready(function() { return Main.ready(function() {
return $.global(function() { return $.global(function() {
var boardID, ref, threadID; var boardID, form, ref, threadID;
ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID; ref = document.currentScript.dataset, boardID = ref.boardID, threadID = ref.threadID;
threadID = +threadID; threadID = +threadID;
return window.$(document).on('new_post', function(e, post) { form = document.querySelector('form[name="post"]');
var detail, event, postID; return window.$(document).ajaxComplete(function(event, request, settings) {
postID = +post.id.match(/\d*$/)[0]; var detail, postID, ref1;
if (settings.url !== form.action) {
return;
}
if (!(postID = +((ref1 = request.responseJSON) != null ? ref1.id : void 0))) {
return;
}
detail = { detail = {
boardID: boardID, boardID: boardID,
threadID: threadID, threadID: threadID,

Binary file not shown.

View File

@ -3,7 +3,7 @@
"4chan-x@4chan-x.net": { "4chan-x@4chan-x.net": {
"updates": [ "updates": [
{ {
"version": "1.14.5.7", "version": "1.14.5.8",
"update_link": "https://www.4chan-x.net/builds/4chan-X-beta.crx" "update_link": "https://www.4chan-x.net/builds/4chan-X-beta.crx"
} }
] ]

View File

@ -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.14.5.7' /> <updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.14.5.8' />
</app> </app>
</gupdate> </gupdate>

View File

@ -3,7 +3,7 @@
"4chan-x@4chan-x.net": { "4chan-x@4chan-x.net": {
"updates": [ "updates": [
{ {
"version": "1.14.5.7", "version": "1.14.5.8",
"update_link": "https://www.4chan-x.net/builds/4chan-X.crx" "update_link": "https://www.4chan-x.net/builds/4chan-X.crx"
} }
] ]

View File

@ -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.14.5.7' /> <updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.14.5.8' />
</app> </app>
</gupdate> </gupdate>

View File

@ -1,4 +1,4 @@
{ {
"version": "1.14.5.7", "version": "1.14.5.8",
"date": "2019-01-06T10:39:52.004Z" "date": "2019-01-24T22:03:35.429Z"
} }