Release 4chan X v1.14.15.1.
This commit is contained in:
parent
85c3894002
commit
4dfc6c2346
@ -4,6 +4,12 @@
|
||||
|
||||
### v1.14.15
|
||||
|
||||
**v1.14.15.1** *(2019-12-17)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.15.1/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.15.1/builds/4chan-X-noupdate.crx)]
|
||||
- Enable 4chan X by default on more sites.
|
||||
- Fix spurious linkification bug on infinity-based sites. #2356
|
||||
- Fix clash between 4chan X header bar and native header bars. #2171
|
||||
- Fix unwanted spaces in full board list on Tinyboard sites.
|
||||
|
||||
**v1.14.15.0** *(2019-12-13)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.15.0/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.14.15.0/builds/4chan-X-noupdate.crx)]
|
||||
- Based on v1.14.14.5.
|
||||
- Support archived threads on kissu.moe.
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.14.15.0
|
||||
// @version 1.14.15.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -28,6 +28,8 @@
|
||||
// @include https://is.4channel.org/*
|
||||
// @include http://is2.4channel.org/*
|
||||
// @include https://is2.4channel.org/*
|
||||
// @include https://erischan.org/*
|
||||
// @include https://www.erischan.org/*
|
||||
// @include https://fufufu.moe/*
|
||||
// @include https://gnfos.com/*
|
||||
// @include https://himasugi.blog/*
|
||||
@ -44,6 +46,7 @@
|
||||
// @include https://ponyville.us/*
|
||||
// @include https://www.ponyville.us/*
|
||||
// @include https://samachan.org/*
|
||||
// @include https://smuglo.li/*
|
||||
// @include https://sportschan.org/*
|
||||
// @include https://www.sportschan.org/*
|
||||
// @include https://sushigirl.us/*
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.14.15.0
|
||||
// @version 1.14.15.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -28,6 +28,8 @@
|
||||
// @include https://is.4channel.org/*
|
||||
// @include http://is2.4channel.org/*
|
||||
// @include https://is2.4channel.org/*
|
||||
// @include https://erischan.org/*
|
||||
// @include https://www.erischan.org/*
|
||||
// @include https://fufufu.moe/*
|
||||
// @include https://gnfos.com/*
|
||||
// @include https://himasugi.blog/*
|
||||
@ -44,6 +46,7 @@
|
||||
// @include https://ponyville.us/*
|
||||
// @include https://www.ponyville.us/*
|
||||
// @include https://samachan.org/*
|
||||
// @include https://smuglo.li/*
|
||||
// @include https://sportschan.org/*
|
||||
// @include https://www.sportschan.org/*
|
||||
// @include https://sushigirl.us/*
|
||||
@ -211,7 +214,7 @@ docSet = function() {
|
||||
};
|
||||
|
||||
g = {
|
||||
VERSION: '1.14.15.0',
|
||||
VERSION: '1.14.15.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
sites: Object.create(null),
|
||||
boards: Object.create(null)
|
||||
@ -1507,7 +1510,15 @@ body.hasDropDownNav{\n\
|
||||
.gal-buttons.gal-buttons a {\n\
|
||||
font-size: inherit;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style fixes */\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .bar.top {\n\
|
||||
position: static;\n\
|
||||
}\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .bar.top {\n\
|
||||
z-index: 3;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style conflicts */\n\
|
||||
:root[data-host=\"fufufu.moe\"].fixed.top-header:not(.autohide) div.pages.top,\n\
|
||||
:root[data-host=\"merorin.com\"].fixed.top-header:not(.autohide) span.settings {\n\
|
||||
top: 26px;\n\
|
||||
@ -1515,6 +1526,12 @@ body.hasDropDownNav{\n\
|
||||
:root[data-host=\"fufufu.moe\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 38px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"lainchan.org\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 17px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"smuglo.li\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 8px;\n\
|
||||
}\n\
|
||||
/* Anti-autoplay */\n\
|
||||
audio.controls-added {\n\
|
||||
display: block;\n\
|
||||
@ -1713,52 +1730,52 @@ audio.controls-added {\n\
|
||||
font-weight: bold;\n\
|
||||
}\n\
|
||||
@media (min-width: 1300px) {\n\
|
||||
:root.fixed:not(.centered-links) #header-bar {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #header-bar {\n\
|
||||
white-space: nowrap;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
-webkit-align-items: center;\n\
|
||||
align-items: center;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #board-list {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list {\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
margin-right: 5px;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
padding: .17em;\n\
|
||||
margin: -.17em -.32em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
pointer-events: none;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
-webkit-flex: 0 .63 .63em;\n\
|
||||
flex: 0 .63 .63em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
-webkit-flex: 0 .38 .38em;\n\
|
||||
flex: 0 .38 .38em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #shortcuts {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #shortcuts {\n\
|
||||
float: initial;\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
@ -8369,6 +8386,44 @@ SW = {};
|
||||
return this.enabled = 'true';
|
||||
}
|
||||
});
|
||||
},
|
||||
transformBoardList: function() {
|
||||
var a, chr, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(SW.yotsuba.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
nodes.push(a);
|
||||
}
|
||||
}
|
||||
return nodes;
|
||||
}
|
||||
};
|
||||
|
||||
@ -10554,7 +10609,8 @@ Get = (function() {
|
||||
}).call(this);
|
||||
|
||||
Header = (function() {
|
||||
var Header;
|
||||
var Header,
|
||||
slice = [].slice;
|
||||
|
||||
Header = {
|
||||
init: function() {
|
||||
@ -10652,7 +10708,7 @@ Header = (function() {
|
||||
this.setBoardList();
|
||||
$.onExists(doc, g.SITE.selectors.boardList + " + *", Header.generateFullBoardList);
|
||||
Main.ready(function() {
|
||||
var a, absbot, footer, j, len, ref;
|
||||
var a, absbot, footer, i, len, ref;
|
||||
if (g.SITE.software === 'yotsuba' && !(footer = $.id('boardNavDesktopFoot'))) {
|
||||
if (!(absbot = $.id('absbot'))) {
|
||||
return;
|
||||
@ -10668,8 +10724,8 @@ Header = (function() {
|
||||
}
|
||||
if ((Header.bottomBoardList = $(g.SITE.selectors.boardListBottom))) {
|
||||
ref = $$('a', Header.bottomBoardList);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
a = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
@ -10725,46 +10781,21 @@ Header = (function() {
|
||||
return $.sync('boardnav', Header.generateBoardList);
|
||||
},
|
||||
generateFullBoardList: function() {
|
||||
var a, chr, fullBoardList, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(g.SITE.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
nodes.push(a);
|
||||
}
|
||||
var a, fullBoardList, i, len, nodes, ref;
|
||||
if (g.SITE.transformBoardList) {
|
||||
nodes = g.SITE.transformBoardList();
|
||||
} else {
|
||||
nodes = slice.call($(g.SITE.selectors.boardList).cloneNode(true).childNodes);
|
||||
}
|
||||
fullBoardList = $('.boardList', Header.boardList);
|
||||
$.add(fullBoardList, nodes);
|
||||
ref = $$('a', fullBoardList);
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
}
|
||||
return CatalogLinks.setLinks(fullBoardList);
|
||||
},
|
||||
generateBoardList: function(boardnav) {
|
||||
@ -10777,11 +10808,11 @@ Header = (function() {
|
||||
boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' ');
|
||||
re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|nt|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g;
|
||||
nodes = (function() {
|
||||
var j, len, ref, results;
|
||||
var i, len, ref, results;
|
||||
ref = boardnav.match(re);
|
||||
results = [];
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
t = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
t = ref[i];
|
||||
results.push(Header.mapCustomNavigation(t));
|
||||
}
|
||||
return results;
|
||||
@ -11165,7 +11196,7 @@ Header = (function() {
|
||||
}
|
||||
},
|
||||
addShortcut: function(id, el, index) {
|
||||
var item, j, len, ref, shortcut;
|
||||
var i, item, len, ref, shortcut;
|
||||
shortcut = $.el('span', {
|
||||
id: "shortcut-" + id,
|
||||
className: 'shortcut brackets-wrap'
|
||||
@ -11173,8 +11204,8 @@ Header = (function() {
|
||||
$.add(shortcut, el);
|
||||
shortcut.dataset.index = index;
|
||||
ref = $$('[data-index]', Header.shortcuts);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
item = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
item = ref[i];
|
||||
if (!(+item.dataset.index > +index)) {
|
||||
continue;
|
||||
}
|
||||
@ -17347,7 +17378,7 @@ Linkify = (function() {
|
||||
if ((length = index + word.length) === data.length) {
|
||||
test.lastIndex = 0;
|
||||
while ((saved = snapshot.snapshotItem(i++))) {
|
||||
if (saved.nodeName === 'BR') {
|
||||
if (saved.nodeName === 'BR' || (saved.parentElement.nodeName === 'P' && !saved.previousSibling)) {
|
||||
if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) {
|
||||
continue;
|
||||
} else {
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.14.15.0
|
||||
// @version 1.14.15.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -28,6 +28,8 @@
|
||||
// @include https://is.4channel.org/*
|
||||
// @include http://is2.4channel.org/*
|
||||
// @include https://is2.4channel.org/*
|
||||
// @include https://erischan.org/*
|
||||
// @include https://www.erischan.org/*
|
||||
// @include https://fufufu.moe/*
|
||||
// @include https://gnfos.com/*
|
||||
// @include https://himasugi.blog/*
|
||||
@ -44,6 +46,7 @@
|
||||
// @include https://ponyville.us/*
|
||||
// @include https://www.ponyville.us/*
|
||||
// @include https://samachan.org/*
|
||||
// @include https://smuglo.li/*
|
||||
// @include https://sportschan.org/*
|
||||
// @include https://www.sportschan.org/*
|
||||
// @include https://sushigirl.us/*
|
||||
@ -211,7 +214,7 @@ docSet = function() {
|
||||
};
|
||||
|
||||
g = {
|
||||
VERSION: '1.14.15.0',
|
||||
VERSION: '1.14.15.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
sites: Object.create(null),
|
||||
boards: Object.create(null)
|
||||
@ -1507,7 +1510,15 @@ body.hasDropDownNav{\n\
|
||||
.gal-buttons.gal-buttons a {\n\
|
||||
font-size: inherit;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style fixes */\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .bar.top {\n\
|
||||
position: static;\n\
|
||||
}\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .bar.top {\n\
|
||||
z-index: 3;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style conflicts */\n\
|
||||
:root[data-host=\"fufufu.moe\"].fixed.top-header:not(.autohide) div.pages.top,\n\
|
||||
:root[data-host=\"merorin.com\"].fixed.top-header:not(.autohide) span.settings {\n\
|
||||
top: 26px;\n\
|
||||
@ -1515,6 +1526,12 @@ body.hasDropDownNav{\n\
|
||||
:root[data-host=\"fufufu.moe\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 38px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"lainchan.org\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 17px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"smuglo.li\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 8px;\n\
|
||||
}\n\
|
||||
/* Anti-autoplay */\n\
|
||||
audio.controls-added {\n\
|
||||
display: block;\n\
|
||||
@ -1713,52 +1730,52 @@ audio.controls-added {\n\
|
||||
font-weight: bold;\n\
|
||||
}\n\
|
||||
@media (min-width: 1300px) {\n\
|
||||
:root.fixed:not(.centered-links) #header-bar {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #header-bar {\n\
|
||||
white-space: nowrap;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
-webkit-align-items: center;\n\
|
||||
align-items: center;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #board-list {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list {\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
margin-right: 5px;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
padding: .17em;\n\
|
||||
margin: -.17em -.32em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
pointer-events: none;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
-webkit-flex: 0 .63 .63em;\n\
|
||||
flex: 0 .63 .63em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
-webkit-flex: 0 .38 .38em;\n\
|
||||
flex: 0 .38 .38em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #shortcuts {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #shortcuts {\n\
|
||||
float: initial;\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
@ -8369,6 +8386,44 @@ SW = {};
|
||||
return this.enabled = 'true';
|
||||
}
|
||||
});
|
||||
},
|
||||
transformBoardList: function() {
|
||||
var a, chr, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(SW.yotsuba.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
nodes.push(a);
|
||||
}
|
||||
}
|
||||
return nodes;
|
||||
}
|
||||
};
|
||||
|
||||
@ -10554,7 +10609,8 @@ Get = (function() {
|
||||
}).call(this);
|
||||
|
||||
Header = (function() {
|
||||
var Header;
|
||||
var Header,
|
||||
slice = [].slice;
|
||||
|
||||
Header = {
|
||||
init: function() {
|
||||
@ -10652,7 +10708,7 @@ Header = (function() {
|
||||
this.setBoardList();
|
||||
$.onExists(doc, g.SITE.selectors.boardList + " + *", Header.generateFullBoardList);
|
||||
Main.ready(function() {
|
||||
var a, absbot, footer, j, len, ref;
|
||||
var a, absbot, footer, i, len, ref;
|
||||
if (g.SITE.software === 'yotsuba' && !(footer = $.id('boardNavDesktopFoot'))) {
|
||||
if (!(absbot = $.id('absbot'))) {
|
||||
return;
|
||||
@ -10668,8 +10724,8 @@ Header = (function() {
|
||||
}
|
||||
if ((Header.bottomBoardList = $(g.SITE.selectors.boardListBottom))) {
|
||||
ref = $$('a', Header.bottomBoardList);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
a = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
@ -10725,46 +10781,21 @@ Header = (function() {
|
||||
return $.sync('boardnav', Header.generateBoardList);
|
||||
},
|
||||
generateFullBoardList: function() {
|
||||
var a, chr, fullBoardList, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(g.SITE.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
nodes.push(a);
|
||||
}
|
||||
var a, fullBoardList, i, len, nodes, ref;
|
||||
if (g.SITE.transformBoardList) {
|
||||
nodes = g.SITE.transformBoardList();
|
||||
} else {
|
||||
nodes = slice.call($(g.SITE.selectors.boardList).cloneNode(true).childNodes);
|
||||
}
|
||||
fullBoardList = $('.boardList', Header.boardList);
|
||||
$.add(fullBoardList, nodes);
|
||||
ref = $$('a', fullBoardList);
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
}
|
||||
return CatalogLinks.setLinks(fullBoardList);
|
||||
},
|
||||
generateBoardList: function(boardnav) {
|
||||
@ -10777,11 +10808,11 @@ Header = (function() {
|
||||
boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' ');
|
||||
re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|nt|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g;
|
||||
nodes = (function() {
|
||||
var j, len, ref, results;
|
||||
var i, len, ref, results;
|
||||
ref = boardnav.match(re);
|
||||
results = [];
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
t = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
t = ref[i];
|
||||
results.push(Header.mapCustomNavigation(t));
|
||||
}
|
||||
return results;
|
||||
@ -11165,7 +11196,7 @@ Header = (function() {
|
||||
}
|
||||
},
|
||||
addShortcut: function(id, el, index) {
|
||||
var item, j, len, ref, shortcut;
|
||||
var i, item, len, ref, shortcut;
|
||||
shortcut = $.el('span', {
|
||||
id: "shortcut-" + id,
|
||||
className: 'shortcut brackets-wrap'
|
||||
@ -11173,8 +11204,8 @@ Header = (function() {
|
||||
$.add(shortcut, el);
|
||||
shortcut.dataset.index = index;
|
||||
ref = $$('[data-index]', Header.shortcuts);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
item = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
item = ref[i];
|
||||
if (!(+item.dataset.index > +index)) {
|
||||
continue;
|
||||
}
|
||||
@ -17347,7 +17378,7 @@ Linkify = (function() {
|
||||
if ((length = index + word.length) === data.length) {
|
||||
test.lastIndex = 0;
|
||||
while ((saved = snapshot.snapshotItem(i++))) {
|
||||
if (saved.nodeName === 'BR') {
|
||||
if (saved.nodeName === 'BR' || (saved.parentElement.nodeName === 'P' && !saved.previousSibling)) {
|
||||
if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) {
|
||||
continue;
|
||||
} else {
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.14.15.0
|
||||
// @version 1.14.15.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -28,6 +28,8 @@
|
||||
// @include https://is.4channel.org/*
|
||||
// @include http://is2.4channel.org/*
|
||||
// @include https://is2.4channel.org/*
|
||||
// @include https://erischan.org/*
|
||||
// @include https://www.erischan.org/*
|
||||
// @include https://fufufu.moe/*
|
||||
// @include https://gnfos.com/*
|
||||
// @include https://himasugi.blog/*
|
||||
@ -44,6 +46,7 @@
|
||||
// @include https://ponyville.us/*
|
||||
// @include https://www.ponyville.us/*
|
||||
// @include https://samachan.org/*
|
||||
// @include https://smuglo.li/*
|
||||
// @include https://sportschan.org/*
|
||||
// @include https://www.sportschan.org/*
|
||||
// @include https://sushigirl.us/*
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.14.15.0
|
||||
// @version 1.14.15.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -28,6 +28,8 @@
|
||||
// @include https://is.4channel.org/*
|
||||
// @include http://is2.4channel.org/*
|
||||
// @include https://is2.4channel.org/*
|
||||
// @include https://erischan.org/*
|
||||
// @include https://www.erischan.org/*
|
||||
// @include https://fufufu.moe/*
|
||||
// @include https://gnfos.com/*
|
||||
// @include https://himasugi.blog/*
|
||||
@ -44,6 +46,7 @@
|
||||
// @include https://ponyville.us/*
|
||||
// @include https://www.ponyville.us/*
|
||||
// @include https://samachan.org/*
|
||||
// @include https://smuglo.li/*
|
||||
// @include https://sportschan.org/*
|
||||
// @include https://www.sportschan.org/*
|
||||
// @include https://sushigirl.us/*
|
||||
@ -211,7 +214,7 @@ docSet = function() {
|
||||
};
|
||||
|
||||
g = {
|
||||
VERSION: '1.14.15.0',
|
||||
VERSION: '1.14.15.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
sites: Object.create(null),
|
||||
boards: Object.create(null)
|
||||
@ -1507,7 +1510,15 @@ body.hasDropDownNav{\n\
|
||||
.gal-buttons.gal-buttons a {\n\
|
||||
font-size: inherit;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style fixes */\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header:not(.autohide) .bar.top {\n\
|
||||
position: static;\n\
|
||||
}\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .boardlist,\n\
|
||||
:root.sw-tinyboard.fixed.top-header.autohide .bar.top {\n\
|
||||
z-index: 3;\n\
|
||||
}\n\
|
||||
/* Tinyboard site style conflicts */\n\
|
||||
:root[data-host=\"fufufu.moe\"].fixed.top-header:not(.autohide) div.pages.top,\n\
|
||||
:root[data-host=\"merorin.com\"].fixed.top-header:not(.autohide) span.settings {\n\
|
||||
top: 26px;\n\
|
||||
@ -1515,6 +1526,12 @@ body.hasDropDownNav{\n\
|
||||
:root[data-host=\"fufufu.moe\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 38px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"lainchan.org\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 17px;\n\
|
||||
}\n\
|
||||
:root[data-host=\"smuglo.li\"]:not(.fixed) #header-bar {\n\
|
||||
margin-top: 8px;\n\
|
||||
}\n\
|
||||
/* Anti-autoplay */\n\
|
||||
audio.controls-added {\n\
|
||||
display: block;\n\
|
||||
@ -1713,52 +1730,52 @@ audio.controls-added {\n\
|
||||
font-weight: bold;\n\
|
||||
}\n\
|
||||
@media (min-width: 1300px) {\n\
|
||||
:root.fixed:not(.centered-links) #header-bar {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #header-bar {\n\
|
||||
white-space: nowrap;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
-webkit-align-items: center;\n\
|
||||
align-items: center;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #board-list {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list {\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) .hide-board-list-container {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
margin-right: 5px;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList {\n\
|
||||
-webkit-flex: auto;\n\
|
||||
flex: auto;\n\
|
||||
display: -webkit-flex;\n\
|
||||
display: flex;\n\
|
||||
width: 0px; /* XXX Fixes Edge not shrinking the board list below default size when needed */\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > a,\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span:not(.space):not(.spacer) {\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
padding: .17em;\n\
|
||||
margin: -.17em -.32em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span {\n\
|
||||
pointer-events: none;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.space {\n\
|
||||
-webkit-flex: 0 .63 .63em;\n\
|
||||
flex: 0 .63 .63em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #full-board-list > .boardList > span.spacer {\n\
|
||||
-webkit-flex: 0 .38 .38em;\n\
|
||||
flex: 0 .38 .38em;\n\
|
||||
}\n\
|
||||
:root.fixed:not(.centered-links) #shortcuts {\n\
|
||||
:root.sw-yotsuba.fixed:not(.centered-links) #shortcuts {\n\
|
||||
float: initial;\n\
|
||||
-webkit-flex: none;\n\
|
||||
flex: none;\n\
|
||||
@ -8369,6 +8386,44 @@ SW = {};
|
||||
return this.enabled = 'true';
|
||||
}
|
||||
});
|
||||
},
|
||||
transformBoardList: function() {
|
||||
var a, chr, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(SW.yotsuba.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
nodes.push(a);
|
||||
}
|
||||
}
|
||||
return nodes;
|
||||
}
|
||||
};
|
||||
|
||||
@ -10554,7 +10609,8 @@ Get = (function() {
|
||||
}).call(this);
|
||||
|
||||
Header = (function() {
|
||||
var Header;
|
||||
var Header,
|
||||
slice = [].slice;
|
||||
|
||||
Header = {
|
||||
init: function() {
|
||||
@ -10652,7 +10708,7 @@ Header = (function() {
|
||||
this.setBoardList();
|
||||
$.onExists(doc, g.SITE.selectors.boardList + " + *", Header.generateFullBoardList);
|
||||
Main.ready(function() {
|
||||
var a, absbot, footer, j, len, ref;
|
||||
var a, absbot, footer, i, len, ref;
|
||||
if (g.SITE.software === 'yotsuba' && !(footer = $.id('boardNavDesktopFoot'))) {
|
||||
if (!(absbot = $.id('absbot'))) {
|
||||
return;
|
||||
@ -10668,8 +10724,8 @@ Header = (function() {
|
||||
}
|
||||
if ((Header.bottomBoardList = $(g.SITE.selectors.boardListBottom))) {
|
||||
ref = $$('a', Header.bottomBoardList);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
a = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
@ -10725,46 +10781,21 @@ Header = (function() {
|
||||
return $.sync('boardnav', Header.generateBoardList);
|
||||
},
|
||||
generateFullBoardList: function() {
|
||||
var a, chr, fullBoardList, i, items, j, len, node, nodes, ref, spacer, span;
|
||||
nodes = [];
|
||||
spacer = function() {
|
||||
return $.el('span', {
|
||||
className: 'spacer'
|
||||
});
|
||||
};
|
||||
items = $.X('.//a|.//text()[not(ancestor::a)]', $(g.SITE.selectors.boardList));
|
||||
i = 0;
|
||||
while (node = items.snapshotItem(i++)) {
|
||||
switch (node.nodeName) {
|
||||
case '#text':
|
||||
ref = node.nodeValue;
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
chr = ref[j];
|
||||
span = $.el('span', {
|
||||
textContent: chr
|
||||
});
|
||||
if (chr === ' ') {
|
||||
span.className = 'space';
|
||||
}
|
||||
if (chr === ']') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
nodes.push(span);
|
||||
if (chr === '[') {
|
||||
nodes.push(spacer());
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'A':
|
||||
a = node.cloneNode(true);
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
nodes.push(a);
|
||||
}
|
||||
var a, fullBoardList, i, len, nodes, ref;
|
||||
if (g.SITE.transformBoardList) {
|
||||
nodes = g.SITE.transformBoardList();
|
||||
} else {
|
||||
nodes = slice.call($(g.SITE.selectors.boardList).cloneNode(true).childNodes);
|
||||
}
|
||||
fullBoardList = $('.boardList', Header.boardList);
|
||||
$.add(fullBoardList, nodes);
|
||||
ref = $$('a', fullBoardList);
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
a = ref[i];
|
||||
if (a.hostname === location.hostname && a.pathname.split('/')[1] === g.BOARD.ID) {
|
||||
a.className = 'current';
|
||||
}
|
||||
}
|
||||
return CatalogLinks.setLinks(fullBoardList);
|
||||
},
|
||||
generateBoardList: function(boardnav) {
|
||||
@ -10777,11 +10808,11 @@ Header = (function() {
|
||||
boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' ');
|
||||
re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|nt|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g;
|
||||
nodes = (function() {
|
||||
var j, len, ref, results;
|
||||
var i, len, ref, results;
|
||||
ref = boardnav.match(re);
|
||||
results = [];
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
t = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
t = ref[i];
|
||||
results.push(Header.mapCustomNavigation(t));
|
||||
}
|
||||
return results;
|
||||
@ -11165,7 +11196,7 @@ Header = (function() {
|
||||
}
|
||||
},
|
||||
addShortcut: function(id, el, index) {
|
||||
var item, j, len, ref, shortcut;
|
||||
var i, item, len, ref, shortcut;
|
||||
shortcut = $.el('span', {
|
||||
id: "shortcut-" + id,
|
||||
className: 'shortcut brackets-wrap'
|
||||
@ -11173,8 +11204,8 @@ Header = (function() {
|
||||
$.add(shortcut, el);
|
||||
shortcut.dataset.index = index;
|
||||
ref = $$('[data-index]', Header.shortcuts);
|
||||
for (j = 0, len = ref.length; j < len; j++) {
|
||||
item = ref[j];
|
||||
for (i = 0, len = ref.length; i < len; i++) {
|
||||
item = ref[i];
|
||||
if (!(+item.dataset.index > +index)) {
|
||||
continue;
|
||||
}
|
||||
@ -17347,7 +17378,7 @@ Linkify = (function() {
|
||||
if ((length = index + word.length) === data.length) {
|
||||
test.lastIndex = 0;
|
||||
while ((saved = snapshot.snapshotItem(i++))) {
|
||||
if (saved.nodeName === 'BR') {
|
||||
if (saved.nodeName === 'BR' || (saved.parentElement.nodeName === 'P' && !saved.previousSibling)) {
|
||||
if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) {
|
||||
continue;
|
||||
} else {
|
||||
|
||||
Binary file not shown.
@ -3,7 +3,7 @@
|
||||
"4chan-x@4chan-x.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.14.15.0",
|
||||
"version": "1.14.15.1",
|
||||
"update_link": "https://www.4chan-x.net/builds/4chan-X-beta.crx"
|
||||
}
|
||||
]
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.14.15.0' />
|
||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.14.15.1' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"4chan-x@4chan-x.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.14.15.0",
|
||||
"version": "1.14.15.1",
|
||||
"update_link": "https://www.4chan-x.net/builds/4chan-X.crx"
|
||||
}
|
||||
]
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.14.15.0' />
|
||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.14.15.1' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
{
|
||||
"version": "1.14.15.0",
|
||||
"date": "2019-12-13T21:49:13.339Z"
|
||||
"version": "1.14.15.1",
|
||||
"date": "2019-12-17T19:48:51.458Z"
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user