Release 4chan X v1.10.1.1.

This commit is contained in:
ccd0 2015-02-15 01:42:35 -08:00
parent 33e91eaea4
commit 89035bf024
14 changed files with 231 additions and 243 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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>

View File

@ -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>

View File

@ -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/",