Release 4chan X v1.10.1.1.
This commit is contained in:
parent
33e91eaea4
commit
89035bf024
@ -4,6 +4,9 @@ The links to individual versions below are to copies of the script with the upda
|
||||
|
||||
### v1.10.1
|
||||
|
||||
**v1.10.1.1** *(2015-02-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.1.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.1.1/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
- Extend `Mouse Wheel Volume` to work on expanded videos (via mouse wheel over the file name) and in the gallery.
|
||||
|
||||
**v1.10.1.0** *(2015-02-14)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.1.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.10.1.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
- Based on v1.10.0.5.
|
||||
- Improve settings/data storage, expecially in Chromium, where failures in syncing data no longer result in failures in saving data.
|
||||
|
||||
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 4chan X - Version 1.10.1.0
|
||||
* 4chan X - Version 1.10.1.1
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.10.1.0
|
||||
// @version 1.10.1.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.10.1.0
|
||||
// @version 1.10.1.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -25,7 +25,7 @@
|
||||
// ==/UserScript==
|
||||
|
||||
/*
|
||||
* 4chan X - Version 1.10.1.0
|
||||
* 4chan X - Version 1.10.1.1
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
@ -181,7 +181,6 @@
|
||||
'Image Expansion': [true, 'Expand images / videos.'],
|
||||
'Image Hover': [true, 'Show full image / video on mouseover.'],
|
||||
'Image Hover in Catalog': [false, 'Show full image / video on mouseover in 4chan X catalog.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of hovering videos with mouse wheel.'],
|
||||
'Gallery': [true, 'Adds a simple and cute image gallery.'],
|
||||
'Fullscreen Gallery': [false, 'Open gallery in fullscreen mode.', 1],
|
||||
'PDF in Gallery': [false, 'Show PDF files in gallery.', 1],
|
||||
@ -200,6 +199,7 @@
|
||||
'Show Controls': [true, 'Show controls on videos expanded inline.'],
|
||||
'Click Passthrough': [false, 'Clicks on videos trigger your browser\'s default behavior. Videos can be contracted with button / dragging to the left.', 1],
|
||||
'Allow Sound': [true, 'Open videos with the sound unmuted.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of videos with the mouse wheel over the thumbnail/filename/gallery.'],
|
||||
'Loop in New Tab': [true, 'Loop videos opened in their own tabs.'],
|
||||
'Volume in New Tab': [true, 'Apply 4chan X mute and volume settings to videos opened in their own tabs.']
|
||||
},
|
||||
@ -405,7 +405,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.10.1.0',
|
||||
VERSION: '1.10.1.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
NAME: '4chan X',
|
||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||
@ -1211,18 +1211,12 @@
|
||||
return this.ID;
|
||||
};
|
||||
|
||||
function Post(root, thread, board, that) {
|
||||
function Post(root, thread, board) {
|
||||
var capcode, clone, date, email, flag, info, name, post, subject, tripcode, uniqueID, _i, _len, _ref;
|
||||
this.thread = thread;
|
||||
this.board = board;
|
||||
if (that == null) {
|
||||
that = {};
|
||||
}
|
||||
this.ID = +root.id.slice(2);
|
||||
this.fullID = "" + this.board + "." + this.ID;
|
||||
if (that.isOriginalMarkup) {
|
||||
this.cleanup(root);
|
||||
}
|
||||
post = $('.post', root);
|
||||
info = $('.postInfo', post);
|
||||
this.nodes = {
|
||||
@ -1281,7 +1275,7 @@
|
||||
}
|
||||
this.parseComment();
|
||||
this.parseQuotes();
|
||||
this.parseFile(that);
|
||||
this.parseFile();
|
||||
this.isDead = false;
|
||||
this.isHidden = false;
|
||||
this.clones = [];
|
||||
@ -1295,9 +1289,6 @@
|
||||
}
|
||||
}
|
||||
g.posts.push(this.fullID, thread.posts.push(this, board.posts.push(this, this)));
|
||||
if (that.isArchived) {
|
||||
this.kill();
|
||||
}
|
||||
}
|
||||
|
||||
Post.prototype.parseComment = function() {
|
||||
@ -1361,7 +1352,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.parseFile = function(that) {
|
||||
Post.prototype.parseFile = function() {
|
||||
var anchor, fileEl, fileText, nameNode, size, thumb, unit;
|
||||
if (!((fileEl = $('.file', this.nodes.post)) && (thumb = $('img[data-md5]', fileEl)))) {
|
||||
return;
|
||||
@ -1392,20 +1383,6 @@
|
||||
return this.file.name = fileText.title || nameNode.title || nameNode.textContent;
|
||||
};
|
||||
|
||||
Post.prototype.cleanup = function(root) {
|
||||
var node, _i, _j, _len, _len1, _ref, _ref1;
|
||||
_ref = $$('.mobile', root);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
node = _ref[_i];
|
||||
$.rm(node);
|
||||
}
|
||||
_ref1 = $$('.desktop', root);
|
||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||
node = _ref1[_j];
|
||||
$.rmClass(node, 'desktop');
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.kill = function(file) {
|
||||
var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1;
|
||||
if (file) {
|
||||
@ -2291,9 +2268,8 @@
|
||||
}
|
||||
board = g.boards[this.boardID] || new Board(this.boardID);
|
||||
thread = g.threads["" + this.boardID + "." + this.threadID] || new Thread(this.threadID, board);
|
||||
post = new Post(Build.post(o), thread, board, {
|
||||
isArchived: true
|
||||
});
|
||||
post = new Post(Build.post(o), thread, board);
|
||||
post.kill();
|
||||
if (post.file) {
|
||||
post.file.thumbURL = o.file.turl;
|
||||
}
|
||||
@ -2806,7 +2782,7 @@
|
||||
return $.rmClass(Header.bar, 'autohide');
|
||||
}
|
||||
},
|
||||
toggleHideBarOnScroll: function(e) {
|
||||
toggleHideBarOnScroll: function() {
|
||||
var hide;
|
||||
hide = this.checked;
|
||||
$.cb.checked.call(this);
|
||||
@ -6941,7 +6917,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
scrollLock: function(e) {
|
||||
scrollLock: function() {
|
||||
if (d.activeElement && QR.nodes.el.contains(d.activeElement) && d.activeElement.nodeName === 'IFRAME') {
|
||||
return window.scroll(window.scrollX, QR.scrollY);
|
||||
} else {
|
||||
@ -8595,11 +8571,9 @@
|
||||
return _this.rm();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', (function(_this) {
|
||||
return function(e) {
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', function(e) {
|
||||
return e.stopPropagation();
|
||||
});
|
||||
$.on(this.nodes.spoiler, 'change', (function(_this) {
|
||||
return function(e) {
|
||||
_this.spoiler = e.target.checked;
|
||||
@ -9067,6 +9041,9 @@
|
||||
nodes.menu = new UI.Menu('gallery');
|
||||
cb = Gallery.cb;
|
||||
$.on(nodes.frame, 'click', cb.blank);
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
$.on(nodes.frame, 'wheel', Volume.wheel);
|
||||
}
|
||||
$.on(nodes.next, 'click', cb.click);
|
||||
$.on(nodes.name, 'click', ImageCommon.download);
|
||||
$.on($('.gal-prev', dialog), 'click', cb.prev);
|
||||
@ -9667,7 +9644,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
playVideos: function(e) {
|
||||
playVideos: function() {
|
||||
return g.posts.forEach(function(post) {
|
||||
var file, video, visible, _i, _len, _ref;
|
||||
_ref = [post].concat(__slice.call(post.clones));
|
||||
@ -9994,10 +9971,7 @@
|
||||
if (!(this.file && (this.file.isImage || this.file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
if (Conf['Mouse Wheel Volume'] && this.file.isVideo) {
|
||||
return $.on(this.file.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
@ -10005,10 +9979,7 @@
|
||||
if (!(file && (file.isImage || file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
if (Conf['Mouse Wheel Volume'] && this.thread.OP.file.isVideo) {
|
||||
return $.on(this.nodes.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
},
|
||||
mouseover: function(post) {
|
||||
return function(e) {
|
||||
@ -10097,24 +10068,6 @@
|
||||
};
|
||||
})(this));
|
||||
};
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $.id('ihover'))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -10510,10 +10463,20 @@
|
||||
el: unmuteEntry,
|
||||
order: 200
|
||||
});
|
||||
return Header.menu.addEntry({
|
||||
Header.menu.addEntry({
|
||||
el: volumeEntry,
|
||||
order: 201
|
||||
});
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
Post.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.node
|
||||
});
|
||||
return CatalogThread.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.catalogNode
|
||||
});
|
||||
}
|
||||
},
|
||||
setup: function(video) {
|
||||
video.muted = !Conf['Allow Sound'];
|
||||
@ -10533,6 +10496,40 @@
|
||||
Volume.inputs.unmute.checked = !muted;
|
||||
return Volume.inputs.volume.value = volume;
|
||||
}
|
||||
},
|
||||
node: function() {
|
||||
var _ref;
|
||||
if (!((_ref = this.file) != null ? _ref.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
file = this.thread.OP.file;
|
||||
if (!(file != null ? file.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $('video:not([data-md5])', this))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -11811,11 +11808,9 @@
|
||||
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||
});
|
||||
$.addClass(doc, 'float');
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
return $.add(d.body, sc);
|
||||
};
|
||||
})(this));
|
||||
$.ready(function() {
|
||||
return $.add(d.body, sc);
|
||||
});
|
||||
}
|
||||
this.postCountEl = $('#post-count', sc);
|
||||
this.fileCountEl = $('#file-count', sc);
|
||||
@ -12061,7 +12056,7 @@
|
||||
return !d.hidden;
|
||||
};
|
||||
},
|
||||
autoUpdate: function(e) {
|
||||
autoUpdate: function() {
|
||||
return ThreadUpdater.count(ThreadUpdater.isUpdating = this.checked);
|
||||
},
|
||||
interval: function(e) {
|
||||
@ -12075,7 +12070,7 @@
|
||||
return $.cb.value.call(this);
|
||||
}
|
||||
},
|
||||
load: function(e) {
|
||||
load: function() {
|
||||
var req;
|
||||
req = ThreadUpdater.req;
|
||||
switch (req.status) {
|
||||
@ -13499,7 +13494,7 @@
|
||||
});
|
||||
return $.sync('hiddenPSA', PSAHiding.sync);
|
||||
},
|
||||
toggle: function(e) {
|
||||
toggle: function() {
|
||||
var UTC;
|
||||
if ($.hasClass(this, 'hide-announcement')) {
|
||||
UTC = +$.id('globalMessage').dataset.utc;
|
||||
@ -14068,10 +14063,10 @@
|
||||
if (thread.ID in ExpandThread.statuses) {
|
||||
return ExpandThread.contract(thread, a, threadRoot);
|
||||
} else {
|
||||
return ExpandThread.expand(thread, a, threadRoot);
|
||||
return ExpandThread.expand(thread, a);
|
||||
}
|
||||
},
|
||||
expand: function(thread, a, threadRoot) {
|
||||
expand: function(thread, a) {
|
||||
var status;
|
||||
ExpandThread.statuses[thread] = status = {};
|
||||
a.textContent = ExpandThread.text.apply(ExpandThread, ['...'].concat(__slice.call(a.textContent.match(/\d+/g))));
|
||||
@ -15116,7 +15111,7 @@
|
||||
});
|
||||
}
|
||||
},
|
||||
node: function(post) {
|
||||
node: function() {
|
||||
return RemoveSpoilers.unspoiler(this.nodes.comment);
|
||||
},
|
||||
unspoiler: function(el) {
|
||||
|
||||
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.10.1.0
|
||||
// @version 1.10.1.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -24,7 +24,7 @@
|
||||
// ==/UserScript==
|
||||
|
||||
/*
|
||||
* 4chan X - Version 1.10.1.0
|
||||
* 4chan X - Version 1.10.1.1
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
@ -180,7 +180,6 @@
|
||||
'Image Expansion': [true, 'Expand images / videos.'],
|
||||
'Image Hover': [true, 'Show full image / video on mouseover.'],
|
||||
'Image Hover in Catalog': [false, 'Show full image / video on mouseover in 4chan X catalog.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of hovering videos with mouse wheel.'],
|
||||
'Gallery': [true, 'Adds a simple and cute image gallery.'],
|
||||
'Fullscreen Gallery': [false, 'Open gallery in fullscreen mode.', 1],
|
||||
'PDF in Gallery': [false, 'Show PDF files in gallery.', 1],
|
||||
@ -199,6 +198,7 @@
|
||||
'Show Controls': [true, 'Show controls on videos expanded inline.'],
|
||||
'Click Passthrough': [false, 'Clicks on videos trigger your browser\'s default behavior. Videos can be contracted with button / dragging to the left.', 1],
|
||||
'Allow Sound': [true, 'Open videos with the sound unmuted.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of videos with the mouse wheel over the thumbnail/filename/gallery.'],
|
||||
'Loop in New Tab': [true, 'Loop videos opened in their own tabs.'],
|
||||
'Volume in New Tab': [true, 'Apply 4chan X mute and volume settings to videos opened in their own tabs.']
|
||||
},
|
||||
@ -404,7 +404,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.10.1.0',
|
||||
VERSION: '1.10.1.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
NAME: '4chan X',
|
||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||
@ -1210,18 +1210,12 @@
|
||||
return this.ID;
|
||||
};
|
||||
|
||||
function Post(root, thread, board, that) {
|
||||
function Post(root, thread, board) {
|
||||
var capcode, clone, date, email, flag, info, name, post, subject, tripcode, uniqueID, _i, _len, _ref;
|
||||
this.thread = thread;
|
||||
this.board = board;
|
||||
if (that == null) {
|
||||
that = {};
|
||||
}
|
||||
this.ID = +root.id.slice(2);
|
||||
this.fullID = "" + this.board + "." + this.ID;
|
||||
if (that.isOriginalMarkup) {
|
||||
this.cleanup(root);
|
||||
}
|
||||
post = $('.post', root);
|
||||
info = $('.postInfo', post);
|
||||
this.nodes = {
|
||||
@ -1280,7 +1274,7 @@
|
||||
}
|
||||
this.parseComment();
|
||||
this.parseQuotes();
|
||||
this.parseFile(that);
|
||||
this.parseFile();
|
||||
this.isDead = false;
|
||||
this.isHidden = false;
|
||||
this.clones = [];
|
||||
@ -1294,9 +1288,6 @@
|
||||
}
|
||||
}
|
||||
g.posts.push(this.fullID, thread.posts.push(this, board.posts.push(this, this)));
|
||||
if (that.isArchived) {
|
||||
this.kill();
|
||||
}
|
||||
}
|
||||
|
||||
Post.prototype.parseComment = function() {
|
||||
@ -1360,7 +1351,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.parseFile = function(that) {
|
||||
Post.prototype.parseFile = function() {
|
||||
var anchor, fileEl, fileText, nameNode, size, thumb, unit;
|
||||
if (!((fileEl = $('.file', this.nodes.post)) && (thumb = $('img[data-md5]', fileEl)))) {
|
||||
return;
|
||||
@ -1391,20 +1382,6 @@
|
||||
return this.file.name = fileText.title || nameNode.title || nameNode.textContent;
|
||||
};
|
||||
|
||||
Post.prototype.cleanup = function(root) {
|
||||
var node, _i, _j, _len, _len1, _ref, _ref1;
|
||||
_ref = $$('.mobile', root);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
node = _ref[_i];
|
||||
$.rm(node);
|
||||
}
|
||||
_ref1 = $$('.desktop', root);
|
||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||
node = _ref1[_j];
|
||||
$.rmClass(node, 'desktop');
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.kill = function(file) {
|
||||
var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1;
|
||||
if (file) {
|
||||
@ -2290,9 +2267,8 @@
|
||||
}
|
||||
board = g.boards[this.boardID] || new Board(this.boardID);
|
||||
thread = g.threads["" + this.boardID + "." + this.threadID] || new Thread(this.threadID, board);
|
||||
post = new Post(Build.post(o), thread, board, {
|
||||
isArchived: true
|
||||
});
|
||||
post = new Post(Build.post(o), thread, board);
|
||||
post.kill();
|
||||
if (post.file) {
|
||||
post.file.thumbURL = o.file.turl;
|
||||
}
|
||||
@ -2805,7 +2781,7 @@
|
||||
return $.rmClass(Header.bar, 'autohide');
|
||||
}
|
||||
},
|
||||
toggleHideBarOnScroll: function(e) {
|
||||
toggleHideBarOnScroll: function() {
|
||||
var hide;
|
||||
hide = this.checked;
|
||||
$.cb.checked.call(this);
|
||||
@ -6940,7 +6916,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
scrollLock: function(e) {
|
||||
scrollLock: function() {
|
||||
if (d.activeElement && QR.nodes.el.contains(d.activeElement) && d.activeElement.nodeName === 'IFRAME') {
|
||||
return window.scroll(window.scrollX, QR.scrollY);
|
||||
} else {
|
||||
@ -8594,11 +8570,9 @@
|
||||
return _this.rm();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', (function(_this) {
|
||||
return function(e) {
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', function(e) {
|
||||
return e.stopPropagation();
|
||||
});
|
||||
$.on(this.nodes.spoiler, 'change', (function(_this) {
|
||||
return function(e) {
|
||||
_this.spoiler = e.target.checked;
|
||||
@ -9066,6 +9040,9 @@
|
||||
nodes.menu = new UI.Menu('gallery');
|
||||
cb = Gallery.cb;
|
||||
$.on(nodes.frame, 'click', cb.blank);
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
$.on(nodes.frame, 'wheel', Volume.wheel);
|
||||
}
|
||||
$.on(nodes.next, 'click', cb.click);
|
||||
$.on(nodes.name, 'click', ImageCommon.download);
|
||||
$.on($('.gal-prev', dialog), 'click', cb.prev);
|
||||
@ -9666,7 +9643,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
playVideos: function(e) {
|
||||
playVideos: function() {
|
||||
return g.posts.forEach(function(post) {
|
||||
var file, video, visible, _i, _len, _ref;
|
||||
_ref = [post].concat(__slice.call(post.clones));
|
||||
@ -9993,10 +9970,7 @@
|
||||
if (!(this.file && (this.file.isImage || this.file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
if (Conf['Mouse Wheel Volume'] && this.file.isVideo) {
|
||||
return $.on(this.file.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
@ -10004,10 +9978,7 @@
|
||||
if (!(file && (file.isImage || file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
if (Conf['Mouse Wheel Volume'] && this.thread.OP.file.isVideo) {
|
||||
return $.on(this.nodes.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
},
|
||||
mouseover: function(post) {
|
||||
return function(e) {
|
||||
@ -10096,24 +10067,6 @@
|
||||
};
|
||||
})(this));
|
||||
};
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $.id('ihover'))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -10509,10 +10462,20 @@
|
||||
el: unmuteEntry,
|
||||
order: 200
|
||||
});
|
||||
return Header.menu.addEntry({
|
||||
Header.menu.addEntry({
|
||||
el: volumeEntry,
|
||||
order: 201
|
||||
});
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
Post.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.node
|
||||
});
|
||||
return CatalogThread.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.catalogNode
|
||||
});
|
||||
}
|
||||
},
|
||||
setup: function(video) {
|
||||
video.muted = !Conf['Allow Sound'];
|
||||
@ -10532,6 +10495,40 @@
|
||||
Volume.inputs.unmute.checked = !muted;
|
||||
return Volume.inputs.volume.value = volume;
|
||||
}
|
||||
},
|
||||
node: function() {
|
||||
var _ref;
|
||||
if (!((_ref = this.file) != null ? _ref.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
file = this.thread.OP.file;
|
||||
if (!(file != null ? file.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $('video:not([data-md5])', this))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -11810,11 +11807,9 @@
|
||||
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||
});
|
||||
$.addClass(doc, 'float');
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
return $.add(d.body, sc);
|
||||
};
|
||||
})(this));
|
||||
$.ready(function() {
|
||||
return $.add(d.body, sc);
|
||||
});
|
||||
}
|
||||
this.postCountEl = $('#post-count', sc);
|
||||
this.fileCountEl = $('#file-count', sc);
|
||||
@ -12060,7 +12055,7 @@
|
||||
return !d.hidden;
|
||||
};
|
||||
},
|
||||
autoUpdate: function(e) {
|
||||
autoUpdate: function() {
|
||||
return ThreadUpdater.count(ThreadUpdater.isUpdating = this.checked);
|
||||
},
|
||||
interval: function(e) {
|
||||
@ -12074,7 +12069,7 @@
|
||||
return $.cb.value.call(this);
|
||||
}
|
||||
},
|
||||
load: function(e) {
|
||||
load: function() {
|
||||
var req;
|
||||
req = ThreadUpdater.req;
|
||||
switch (req.status) {
|
||||
@ -13498,7 +13493,7 @@
|
||||
});
|
||||
return $.sync('hiddenPSA', PSAHiding.sync);
|
||||
},
|
||||
toggle: function(e) {
|
||||
toggle: function() {
|
||||
var UTC;
|
||||
if ($.hasClass(this, 'hide-announcement')) {
|
||||
UTC = +$.id('globalMessage').dataset.utc;
|
||||
@ -14067,10 +14062,10 @@
|
||||
if (thread.ID in ExpandThread.statuses) {
|
||||
return ExpandThread.contract(thread, a, threadRoot);
|
||||
} else {
|
||||
return ExpandThread.expand(thread, a, threadRoot);
|
||||
return ExpandThread.expand(thread, a);
|
||||
}
|
||||
},
|
||||
expand: function(thread, a, threadRoot) {
|
||||
expand: function(thread, a) {
|
||||
var status;
|
||||
ExpandThread.statuses[thread] = status = {};
|
||||
a.textContent = ExpandThread.text.apply(ExpandThread, ['...'].concat(__slice.call(a.textContent.match(/\d+/g))));
|
||||
@ -15115,7 +15110,7 @@
|
||||
});
|
||||
}
|
||||
},
|
||||
node: function(post) {
|
||||
node: function() {
|
||||
return RemoveSpoilers.unspoiler(this.nodes.comment);
|
||||
},
|
||||
unspoiler: function(el) {
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.10.1.0
|
||||
// @version 1.10.1.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.10.1.0
|
||||
// @version 1.10.1.1
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -25,7 +25,7 @@
|
||||
// ==/UserScript==
|
||||
|
||||
/*
|
||||
* 4chan X - Version 1.10.1.0
|
||||
* 4chan X - Version 1.10.1.1
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
@ -181,7 +181,6 @@
|
||||
'Image Expansion': [true, 'Expand images / videos.'],
|
||||
'Image Hover': [true, 'Show full image / video on mouseover.'],
|
||||
'Image Hover in Catalog': [false, 'Show full image / video on mouseover in 4chan X catalog.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of hovering videos with mouse wheel.'],
|
||||
'Gallery': [true, 'Adds a simple and cute image gallery.'],
|
||||
'Fullscreen Gallery': [false, 'Open gallery in fullscreen mode.', 1],
|
||||
'PDF in Gallery': [false, 'Show PDF files in gallery.', 1],
|
||||
@ -200,6 +199,7 @@
|
||||
'Show Controls': [true, 'Show controls on videos expanded inline.'],
|
||||
'Click Passthrough': [false, 'Clicks on videos trigger your browser\'s default behavior. Videos can be contracted with button / dragging to the left.', 1],
|
||||
'Allow Sound': [true, 'Open videos with the sound unmuted.'],
|
||||
'Mouse Wheel Volume': [true, 'Adjust volume of videos with the mouse wheel over the thumbnail/filename/gallery.'],
|
||||
'Loop in New Tab': [true, 'Loop videos opened in their own tabs.'],
|
||||
'Volume in New Tab': [true, 'Apply 4chan X mute and volume settings to videos opened in their own tabs.']
|
||||
},
|
||||
@ -405,7 +405,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.10.1.0',
|
||||
VERSION: '1.10.1.1',
|
||||
NAMESPACE: '4chan X.',
|
||||
NAME: '4chan X',
|
||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||
@ -1211,18 +1211,12 @@
|
||||
return this.ID;
|
||||
};
|
||||
|
||||
function Post(root, thread, board, that) {
|
||||
function Post(root, thread, board) {
|
||||
var capcode, clone, date, email, flag, info, name, post, subject, tripcode, uniqueID, _i, _len, _ref;
|
||||
this.thread = thread;
|
||||
this.board = board;
|
||||
if (that == null) {
|
||||
that = {};
|
||||
}
|
||||
this.ID = +root.id.slice(2);
|
||||
this.fullID = "" + this.board + "." + this.ID;
|
||||
if (that.isOriginalMarkup) {
|
||||
this.cleanup(root);
|
||||
}
|
||||
post = $('.post', root);
|
||||
info = $('.postInfo', post);
|
||||
this.nodes = {
|
||||
@ -1281,7 +1275,7 @@
|
||||
}
|
||||
this.parseComment();
|
||||
this.parseQuotes();
|
||||
this.parseFile(that);
|
||||
this.parseFile();
|
||||
this.isDead = false;
|
||||
this.isHidden = false;
|
||||
this.clones = [];
|
||||
@ -1295,9 +1289,6 @@
|
||||
}
|
||||
}
|
||||
g.posts.push(this.fullID, thread.posts.push(this, board.posts.push(this, this)));
|
||||
if (that.isArchived) {
|
||||
this.kill();
|
||||
}
|
||||
}
|
||||
|
||||
Post.prototype.parseComment = function() {
|
||||
@ -1361,7 +1352,7 @@
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.parseFile = function(that) {
|
||||
Post.prototype.parseFile = function() {
|
||||
var anchor, fileEl, fileText, nameNode, size, thumb, unit;
|
||||
if (!((fileEl = $('.file', this.nodes.post)) && (thumb = $('img[data-md5]', fileEl)))) {
|
||||
return;
|
||||
@ -1392,20 +1383,6 @@
|
||||
return this.file.name = fileText.title || nameNode.title || nameNode.textContent;
|
||||
};
|
||||
|
||||
Post.prototype.cleanup = function(root) {
|
||||
var node, _i, _j, _len, _len1, _ref, _ref1;
|
||||
_ref = $$('.mobile', root);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
node = _ref[_i];
|
||||
$.rm(node);
|
||||
}
|
||||
_ref1 = $$('.desktop', root);
|
||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
||||
node = _ref1[_j];
|
||||
$.rmClass(node, 'desktop');
|
||||
}
|
||||
};
|
||||
|
||||
Post.prototype.kill = function(file) {
|
||||
var clone, quotelink, strong, _i, _j, _len, _len1, _ref, _ref1;
|
||||
if (file) {
|
||||
@ -2291,9 +2268,8 @@
|
||||
}
|
||||
board = g.boards[this.boardID] || new Board(this.boardID);
|
||||
thread = g.threads["" + this.boardID + "." + this.threadID] || new Thread(this.threadID, board);
|
||||
post = new Post(Build.post(o), thread, board, {
|
||||
isArchived: true
|
||||
});
|
||||
post = new Post(Build.post(o), thread, board);
|
||||
post.kill();
|
||||
if (post.file) {
|
||||
post.file.thumbURL = o.file.turl;
|
||||
}
|
||||
@ -2806,7 +2782,7 @@
|
||||
return $.rmClass(Header.bar, 'autohide');
|
||||
}
|
||||
},
|
||||
toggleHideBarOnScroll: function(e) {
|
||||
toggleHideBarOnScroll: function() {
|
||||
var hide;
|
||||
hide = this.checked;
|
||||
$.cb.checked.call(this);
|
||||
@ -6941,7 +6917,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
scrollLock: function(e) {
|
||||
scrollLock: function() {
|
||||
if (d.activeElement && QR.nodes.el.contains(d.activeElement) && d.activeElement.nodeName === 'IFRAME') {
|
||||
return window.scroll(window.scrollX, QR.scrollY);
|
||||
} else {
|
||||
@ -8595,11 +8571,9 @@
|
||||
return _this.rm();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', (function(_this) {
|
||||
return function(e) {
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
$.on(this.nodes.label, 'click', function(e) {
|
||||
return e.stopPropagation();
|
||||
});
|
||||
$.on(this.nodes.spoiler, 'change', (function(_this) {
|
||||
return function(e) {
|
||||
_this.spoiler = e.target.checked;
|
||||
@ -9067,6 +9041,9 @@
|
||||
nodes.menu = new UI.Menu('gallery');
|
||||
cb = Gallery.cb;
|
||||
$.on(nodes.frame, 'click', cb.blank);
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
$.on(nodes.frame, 'wheel', Volume.wheel);
|
||||
}
|
||||
$.on(nodes.next, 'click', cb.click);
|
||||
$.on(nodes.name, 'click', ImageCommon.download);
|
||||
$.on($('.gal-prev', dialog), 'click', cb.prev);
|
||||
@ -9667,7 +9644,7 @@
|
||||
}
|
||||
});
|
||||
},
|
||||
playVideos: function(e) {
|
||||
playVideos: function() {
|
||||
return g.posts.forEach(function(post) {
|
||||
var file, video, visible, _i, _len, _ref;
|
||||
_ref = [post].concat(__slice.call(post.clones));
|
||||
@ -9994,10 +9971,7 @@
|
||||
if (!(this.file && (this.file.isImage || this.file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
if (Conf['Mouse Wheel Volume'] && this.file.isVideo) {
|
||||
return $.on(this.file.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
@ -10005,10 +9979,7 @@
|
||||
if (!(file && (file.isImage || file.isVideo))) {
|
||||
return;
|
||||
}
|
||||
$.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
if (Conf['Mouse Wheel Volume'] && this.thread.OP.file.isVideo) {
|
||||
return $.on(this.nodes.thumb, 'wheel', ImageHover.wheel);
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP));
|
||||
},
|
||||
mouseover: function(post) {
|
||||
return function(e) {
|
||||
@ -10097,24 +10068,6 @@
|
||||
};
|
||||
})(this));
|
||||
};
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $.id('ihover'))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -10510,10 +10463,20 @@
|
||||
el: unmuteEntry,
|
||||
order: 200
|
||||
});
|
||||
return Header.menu.addEntry({
|
||||
Header.menu.addEntry({
|
||||
el: volumeEntry,
|
||||
order: 201
|
||||
});
|
||||
if (Conf['Mouse Wheel Volume']) {
|
||||
Post.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.node
|
||||
});
|
||||
return CatalogThread.callbacks.push({
|
||||
name: 'Mouse Wheel Volume',
|
||||
cb: this.catalogNode
|
||||
});
|
||||
}
|
||||
},
|
||||
setup: function(video) {
|
||||
video.muted = !Conf['Allow Sound'];
|
||||
@ -10533,6 +10496,40 @@
|
||||
Volume.inputs.unmute.checked = !muted;
|
||||
return Volume.inputs.volume.value = volume;
|
||||
}
|
||||
},
|
||||
node: function() {
|
||||
var _ref;
|
||||
if (!((_ref = this.file) != null ? _ref.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
$.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode));
|
||||
},
|
||||
catalogNode: function() {
|
||||
var file;
|
||||
file = this.thread.OP.file;
|
||||
if (!(file != null ? file.isVideo : void 0)) {
|
||||
return;
|
||||
}
|
||||
return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover));
|
||||
},
|
||||
wheel: function(e) {
|
||||
var el, volume;
|
||||
if (!(el = $('video:not([data-md5])', this))) {
|
||||
return;
|
||||
}
|
||||
if (el.muted || !$.hasAudio(el)) {
|
||||
return;
|
||||
}
|
||||
volume = el.volume + 0.1;
|
||||
if (e.deltaY < 0) {
|
||||
volume *= 1.1;
|
||||
}
|
||||
if (e.deltaY > 0) {
|
||||
volume /= 1.1;
|
||||
}
|
||||
el.volume = $.minmax(volume - 0.1, 0, 1);
|
||||
return e.preventDefault();
|
||||
}
|
||||
};
|
||||
|
||||
@ -11811,11 +11808,9 @@
|
||||
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||
});
|
||||
$.addClass(doc, 'float');
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
return $.add(d.body, sc);
|
||||
};
|
||||
})(this));
|
||||
$.ready(function() {
|
||||
return $.add(d.body, sc);
|
||||
});
|
||||
}
|
||||
this.postCountEl = $('#post-count', sc);
|
||||
this.fileCountEl = $('#file-count', sc);
|
||||
@ -12061,7 +12056,7 @@
|
||||
return !d.hidden;
|
||||
};
|
||||
},
|
||||
autoUpdate: function(e) {
|
||||
autoUpdate: function() {
|
||||
return ThreadUpdater.count(ThreadUpdater.isUpdating = this.checked);
|
||||
},
|
||||
interval: function(e) {
|
||||
@ -12075,7 +12070,7 @@
|
||||
return $.cb.value.call(this);
|
||||
}
|
||||
},
|
||||
load: function(e) {
|
||||
load: function() {
|
||||
var req;
|
||||
req = ThreadUpdater.req;
|
||||
switch (req.status) {
|
||||
@ -13499,7 +13494,7 @@
|
||||
});
|
||||
return $.sync('hiddenPSA', PSAHiding.sync);
|
||||
},
|
||||
toggle: function(e) {
|
||||
toggle: function() {
|
||||
var UTC;
|
||||
if ($.hasClass(this, 'hide-announcement')) {
|
||||
UTC = +$.id('globalMessage').dataset.utc;
|
||||
@ -14068,10 +14063,10 @@
|
||||
if (thread.ID in ExpandThread.statuses) {
|
||||
return ExpandThread.contract(thread, a, threadRoot);
|
||||
} else {
|
||||
return ExpandThread.expand(thread, a, threadRoot);
|
||||
return ExpandThread.expand(thread, a);
|
||||
}
|
||||
},
|
||||
expand: function(thread, a, threadRoot) {
|
||||
expand: function(thread, a) {
|
||||
var status;
|
||||
ExpandThread.statuses[thread] = status = {};
|
||||
a.textContent = ExpandThread.text.apply(ExpandThread, ['...'].concat(__slice.call(a.textContent.match(/\d+/g))));
|
||||
@ -15116,7 +15111,7 @@
|
||||
});
|
||||
}
|
||||
},
|
||||
node: function(post) {
|
||||
node: function() {
|
||||
return RemoveSpoilers.unspoiler(this.nodes.comment);
|
||||
},
|
||||
unspoiler: function(el) {
|
||||
|
||||
Binary file not shown.
@ -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://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.10.1.0' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.10.1.1' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -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://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.10.1.0' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.10.1.1' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||
"meta": {
|
||||
"name": "4chan X",
|
||||
"version": "1.10.1.0",
|
||||
"version": "1.10.1.1",
|
||||
"repo": "https://github.com/ccd0/4chan-x/",
|
||||
"page": "https://github.com/ccd0/4chan-x",
|
||||
"downloads": "https://ccd0.github.io/4chan-x/builds/",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user