Release 4chan X v1.9.10.1.
This commit is contained in:
parent
700085107f
commit
3f0981cb21
@ -3,6 +3,15 @@ The attributions below are for work that has been incorporated into the script a
|
|||||||
The links to individual versions below are to copies of the script with the update URL removed. If you want automatic updates, install the script from the links on the [main page](https://github.com/ccd0/4chan-x).
|
The links to individual versions below are to copies of the script with the update URL removed. If you want automatic updates, install the script from the links on the [main page](https://github.com/ccd0/4chan-x).
|
||||||
|
|
||||||
<!-- v1.9.10.x -->
|
<!-- v1.9.10.x -->
|
||||||
|
### v1.9.10.1
|
||||||
|
*2014-11-10* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.1/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.1/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||||
|
|
||||||
|
Backported from v1.9.11.1.
|
||||||
|
|
||||||
|
**ccd0**
|
||||||
|
- Add unique IP count to thread stats.
|
||||||
|
- The IP count in the thread stats is now optional, controlled by the IP Count in Stats setting (default: on).
|
||||||
|
|
||||||
### v1.9.10.0
|
### v1.9.10.0
|
||||||
*2014-11-02* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
*2014-11-02* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.9.10.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||||
|
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.9.10.0
|
* 4chan X - Version 1.9.10.1
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||||
|
|||||||
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X beta
|
// @name 4chan X beta
|
||||||
// @version 1.9.10.0
|
// @version 1.9.10.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X beta
|
// @name 4chan X beta
|
||||||
// @version 1.9.10.0
|
// @version 1.9.10.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -24,7 +24,7 @@
|
|||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.9.10.0
|
* 4chan X - Version 1.9.10.1
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||||
@ -212,7 +212,8 @@
|
|||||||
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
||||||
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
||||||
'Thread Stats': [true, 'Display reply and image count.'],
|
'Thread Stats': [true, 'Display reply and image count.'],
|
||||||
'Page Count in Stats': [true, 'Display the page count in the thread stats as well.'],
|
'IP Count in Stats': [true, 'Display the unique IP count in the thread stats.'],
|
||||||
|
'Page Count in Stats': [true, 'Display the page count in the thread stats.'],
|
||||||
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
||||||
'Thread Watcher': [true, 'Bookmark threads.'],
|
'Thread Watcher': [true, 'Bookmark threads.'],
|
||||||
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
||||||
@ -381,7 +382,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.9.10.0',
|
VERSION: '1.9.10.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
NAME: '4chan X',
|
NAME: '4chan X',
|
||||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||||
@ -10570,30 +10571,38 @@
|
|||||||
|
|
||||||
ThreadStats = {
|
ThreadStats = {
|
||||||
init: function() {
|
init: function() {
|
||||||
var countHTML, sc;
|
var sc, statsHTML, statsTitle;
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
countHTML = {
|
statsHTML = {
|
||||||
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
||||||
};
|
};
|
||||||
if (Conf['Page Count in Stats']) {
|
statsTitle = 'Post Count / File Count';
|
||||||
countHTML = {
|
if (Conf['IP Count in Stats']) {
|
||||||
innerHTML: countHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"ip-count\">?</span>"
|
||||||
};
|
};
|
||||||
|
statsTitle += ' / IP Count';
|
||||||
|
}
|
||||||
|
if (Conf['Page Count in Stats']) {
|
||||||
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
||||||
|
};
|
||||||
|
statsTitle += ' / Page Count';
|
||||||
}
|
}
|
||||||
if (Conf['Updater and Stats in Header']) {
|
if (Conf['Updater and Stats in Header']) {
|
||||||
this.dialog = sc = $.el('span', {
|
this.dialog = sc = $.el('span', {
|
||||||
id: 'thread-stats',
|
id: 'thread-stats',
|
||||||
title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "")
|
title: statsTitle
|
||||||
});
|
});
|
||||||
$.extend(sc, countHTML);
|
$.extend(sc, statsHTML);
|
||||||
$.ready(function() {
|
$.ready(function() {
|
||||||
return Header.addShortcut(sc);
|
return Header.addShortcut(sc);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
||||||
innerHTML: "<div class=\"move\" title=\"Post Count / File Count" + E(Conf["Page Count in Stats"] ? " / Page Count" : "") + "\">" + countHTML.innerHTML + "</div>"
|
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||||
});
|
});
|
||||||
$.ready((function(_this) {
|
$.ready((function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
@ -10603,6 +10612,7 @@
|
|||||||
}
|
}
|
||||||
this.postCountEl = $('#post-count', sc);
|
this.postCountEl = $('#post-count', sc);
|
||||||
this.fileCountEl = $('#file-count', sc);
|
this.fileCountEl = $('#file-count', sc);
|
||||||
|
this.ipCountEl = $('#ip-count', sc);
|
||||||
this.pageCountEl = $('#page-count', sc);
|
this.pageCountEl = $('#page-count', sc);
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Stats',
|
name: 'Thread Stats',
|
||||||
@ -10610,7 +10620,7 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
var fileCount, postCount;
|
var fileCount, ipCount, m, postCount, script, _i, _len, _ref;
|
||||||
postCount = 0;
|
postCount = 0;
|
||||||
fileCount = 0;
|
fileCount = 0;
|
||||||
this.posts.forEach(function(post) {
|
this.posts.forEach(function(post) {
|
||||||
@ -10622,18 +10632,26 @@
|
|||||||
return ThreadStats.lastPost = post.info.date;
|
return ThreadStats.lastPost = post.info.date;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
_ref = $$('script[type="text/javascript"]:not([src])', d.head);
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
script = _ref[_i];
|
||||||
|
if (m = script.textContent.match(/\bvar unique_ips = (\d+);/)) {
|
||||||
|
ipCount = +m[1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
ThreadStats.thread = this;
|
ThreadStats.thread = this;
|
||||||
ThreadStats.fetchPage();
|
ThreadStats.fetchPage();
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, newPosts, postCount, _ref, _ref1;
|
var fileCount, ipCount, newPosts, postCount, _ref, _ref1;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, newPosts = _ref.newPosts;
|
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, ipCount = _ref.ipCount, newPosts = _ref.newPosts;
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
if (!Conf["Page Count in Stats"]) {
|
if (!Conf["Page Count in Stats"]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -10644,11 +10662,14 @@
|
|||||||
return ThreadStats.fetchPage();
|
return ThreadStats.fetchPage();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
update: function(postCount, fileCount) {
|
update: function(postCount, fileCount, ipCount) {
|
||||||
var fileCountEl, postCountEl, thread;
|
var fileCountEl, ipCountEl, postCountEl, thread;
|
||||||
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl;
|
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl;
|
||||||
postCountEl.textContent = postCount;
|
postCountEl.textContent = postCount;
|
||||||
fileCountEl.textContent = fileCount;
|
fileCountEl.textContent = fileCount;
|
||||||
|
if (Conf["IP Count in Stats"]) {
|
||||||
|
ipCountEl.textContent = ipCount != null ? ipCount : '?';
|
||||||
|
}
|
||||||
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
||||||
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
||||||
},
|
},
|
||||||
@ -11090,7 +11111,8 @@
|
|||||||
return post.fullID;
|
return post.fullID;
|
||||||
}),
|
}),
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead)
|
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead),
|
||||||
|
ipCount: OP.unique_ips
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -13688,7 +13710,7 @@
|
|||||||
className: 'dialog'
|
className: 'dialog'
|
||||||
});
|
});
|
||||||
$.extend(dialog, {
|
$.extend(dialog, {
|
||||||
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.0</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.1</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
||||||
});
|
});
|
||||||
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
||||||
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.9.10.0
|
// @version 1.9.10.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -23,7 +23,7 @@
|
|||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.9.10.0
|
* 4chan X - Version 1.9.10.1
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||||
@ -211,7 +211,8 @@
|
|||||||
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
||||||
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
||||||
'Thread Stats': [true, 'Display reply and image count.'],
|
'Thread Stats': [true, 'Display reply and image count.'],
|
||||||
'Page Count in Stats': [true, 'Display the page count in the thread stats as well.'],
|
'IP Count in Stats': [true, 'Display the unique IP count in the thread stats.'],
|
||||||
|
'Page Count in Stats': [true, 'Display the page count in the thread stats.'],
|
||||||
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
||||||
'Thread Watcher': [true, 'Bookmark threads.'],
|
'Thread Watcher': [true, 'Bookmark threads.'],
|
||||||
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
||||||
@ -380,7 +381,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.9.10.0',
|
VERSION: '1.9.10.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
NAME: '4chan X',
|
NAME: '4chan X',
|
||||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||||
@ -10569,30 +10570,38 @@
|
|||||||
|
|
||||||
ThreadStats = {
|
ThreadStats = {
|
||||||
init: function() {
|
init: function() {
|
||||||
var countHTML, sc;
|
var sc, statsHTML, statsTitle;
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
countHTML = {
|
statsHTML = {
|
||||||
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
||||||
};
|
};
|
||||||
if (Conf['Page Count in Stats']) {
|
statsTitle = 'Post Count / File Count';
|
||||||
countHTML = {
|
if (Conf['IP Count in Stats']) {
|
||||||
innerHTML: countHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"ip-count\">?</span>"
|
||||||
};
|
};
|
||||||
|
statsTitle += ' / IP Count';
|
||||||
|
}
|
||||||
|
if (Conf['Page Count in Stats']) {
|
||||||
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
||||||
|
};
|
||||||
|
statsTitle += ' / Page Count';
|
||||||
}
|
}
|
||||||
if (Conf['Updater and Stats in Header']) {
|
if (Conf['Updater and Stats in Header']) {
|
||||||
this.dialog = sc = $.el('span', {
|
this.dialog = sc = $.el('span', {
|
||||||
id: 'thread-stats',
|
id: 'thread-stats',
|
||||||
title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "")
|
title: statsTitle
|
||||||
});
|
});
|
||||||
$.extend(sc, countHTML);
|
$.extend(sc, statsHTML);
|
||||||
$.ready(function() {
|
$.ready(function() {
|
||||||
return Header.addShortcut(sc);
|
return Header.addShortcut(sc);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
||||||
innerHTML: "<div class=\"move\" title=\"Post Count / File Count" + E(Conf["Page Count in Stats"] ? " / Page Count" : "") + "\">" + countHTML.innerHTML + "</div>"
|
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||||
});
|
});
|
||||||
$.ready((function(_this) {
|
$.ready((function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
@ -10602,6 +10611,7 @@
|
|||||||
}
|
}
|
||||||
this.postCountEl = $('#post-count', sc);
|
this.postCountEl = $('#post-count', sc);
|
||||||
this.fileCountEl = $('#file-count', sc);
|
this.fileCountEl = $('#file-count', sc);
|
||||||
|
this.ipCountEl = $('#ip-count', sc);
|
||||||
this.pageCountEl = $('#page-count', sc);
|
this.pageCountEl = $('#page-count', sc);
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Stats',
|
name: 'Thread Stats',
|
||||||
@ -10609,7 +10619,7 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
var fileCount, postCount;
|
var fileCount, ipCount, m, postCount, script, _i, _len, _ref;
|
||||||
postCount = 0;
|
postCount = 0;
|
||||||
fileCount = 0;
|
fileCount = 0;
|
||||||
this.posts.forEach(function(post) {
|
this.posts.forEach(function(post) {
|
||||||
@ -10621,18 +10631,26 @@
|
|||||||
return ThreadStats.lastPost = post.info.date;
|
return ThreadStats.lastPost = post.info.date;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
_ref = $$('script[type="text/javascript"]:not([src])', d.head);
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
script = _ref[_i];
|
||||||
|
if (m = script.textContent.match(/\bvar unique_ips = (\d+);/)) {
|
||||||
|
ipCount = +m[1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
ThreadStats.thread = this;
|
ThreadStats.thread = this;
|
||||||
ThreadStats.fetchPage();
|
ThreadStats.fetchPage();
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, newPosts, postCount, _ref, _ref1;
|
var fileCount, ipCount, newPosts, postCount, _ref, _ref1;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, newPosts = _ref.newPosts;
|
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, ipCount = _ref.ipCount, newPosts = _ref.newPosts;
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
if (!Conf["Page Count in Stats"]) {
|
if (!Conf["Page Count in Stats"]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -10643,11 +10661,14 @@
|
|||||||
return ThreadStats.fetchPage();
|
return ThreadStats.fetchPage();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
update: function(postCount, fileCount) {
|
update: function(postCount, fileCount, ipCount) {
|
||||||
var fileCountEl, postCountEl, thread;
|
var fileCountEl, ipCountEl, postCountEl, thread;
|
||||||
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl;
|
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl;
|
||||||
postCountEl.textContent = postCount;
|
postCountEl.textContent = postCount;
|
||||||
fileCountEl.textContent = fileCount;
|
fileCountEl.textContent = fileCount;
|
||||||
|
if (Conf["IP Count in Stats"]) {
|
||||||
|
ipCountEl.textContent = ipCount != null ? ipCount : '?';
|
||||||
|
}
|
||||||
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
||||||
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
||||||
},
|
},
|
||||||
@ -11089,7 +11110,8 @@
|
|||||||
return post.fullID;
|
return post.fullID;
|
||||||
}),
|
}),
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead)
|
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead),
|
||||||
|
ipCount: OP.unique_ips
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -13687,7 +13709,7 @@
|
|||||||
className: 'dialog'
|
className: 'dialog'
|
||||||
});
|
});
|
||||||
$.extend(dialog, {
|
$.extend(dialog, {
|
||||||
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.0</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.1</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
||||||
});
|
});
|
||||||
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
||||||
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
||||||
|
|||||||
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.9.10.0
|
// @version 1.9.10.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.9.10.0
|
// @version 1.9.10.1
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -24,7 +24,7 @@
|
|||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.9.10.0
|
* 4chan X - Version 1.9.10.1
|
||||||
*
|
*
|
||||||
* Licensed under the MIT license.
|
* Licensed under the MIT license.
|
||||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||||
@ -212,7 +212,8 @@
|
|||||||
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title for threads in /f/.'],
|
||||||
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
'Remove Thread Excerpt': [false, 'Replace the excerpt of the thread in the tab title with the board title.'],
|
||||||
'Thread Stats': [true, 'Display reply and image count.'],
|
'Thread Stats': [true, 'Display reply and image count.'],
|
||||||
'Page Count in Stats': [true, 'Display the page count in the thread stats as well.'],
|
'IP Count in Stats': [true, 'Display the unique IP count in the thread stats.'],
|
||||||
|
'Page Count in Stats': [true, 'Display the page count in the thread stats.'],
|
||||||
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
|
||||||
'Thread Watcher': [true, 'Bookmark threads.'],
|
'Thread Watcher': [true, 'Bookmark threads.'],
|
||||||
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
|
||||||
@ -381,7 +382,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.9.10.0',
|
VERSION: '1.9.10.1',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
NAME: '4chan X',
|
NAME: '4chan X',
|
||||||
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
|
||||||
@ -10570,30 +10571,38 @@
|
|||||||
|
|
||||||
ThreadStats = {
|
ThreadStats = {
|
||||||
init: function() {
|
init: function() {
|
||||||
var countHTML, sc;
|
var sc, statsHTML, statsTitle;
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
countHTML = {
|
statsHTML = {
|
||||||
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
innerHTML: "<span id=\"post-count\">?</span> / <span id=\"file-count\">?</span>"
|
||||||
};
|
};
|
||||||
if (Conf['Page Count in Stats']) {
|
statsTitle = 'Post Count / File Count';
|
||||||
countHTML = {
|
if (Conf['IP Count in Stats']) {
|
||||||
innerHTML: countHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"ip-count\">?</span>"
|
||||||
};
|
};
|
||||||
|
statsTitle += ' / IP Count';
|
||||||
|
}
|
||||||
|
if (Conf['Page Count in Stats']) {
|
||||||
|
statsHTML = {
|
||||||
|
innerHTML: statsHTML.innerHTML + " / <span id=\"page-count\">?</span>"
|
||||||
|
};
|
||||||
|
statsTitle += ' / Page Count';
|
||||||
}
|
}
|
||||||
if (Conf['Updater and Stats in Header']) {
|
if (Conf['Updater and Stats in Header']) {
|
||||||
this.dialog = sc = $.el('span', {
|
this.dialog = sc = $.el('span', {
|
||||||
id: 'thread-stats',
|
id: 'thread-stats',
|
||||||
title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "")
|
title: statsTitle
|
||||||
});
|
});
|
||||||
$.extend(sc, countHTML);
|
$.extend(sc, statsHTML);
|
||||||
$.ready(function() {
|
$.ready(function() {
|
||||||
return Header.addShortcut(sc);
|
return Header.addShortcut(sc);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
||||||
innerHTML: "<div class=\"move\" title=\"Post Count / File Count" + E(Conf["Page Count in Stats"] ? " / Page Count" : "") + "\">" + countHTML.innerHTML + "</div>"
|
innerHTML: "<div class=\"move\" title=\"" + E(statsTitle) + "\">" + statsHTML.innerHTML + "</div>"
|
||||||
});
|
});
|
||||||
$.ready((function(_this) {
|
$.ready((function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
@ -10603,6 +10612,7 @@
|
|||||||
}
|
}
|
||||||
this.postCountEl = $('#post-count', sc);
|
this.postCountEl = $('#post-count', sc);
|
||||||
this.fileCountEl = $('#file-count', sc);
|
this.fileCountEl = $('#file-count', sc);
|
||||||
|
this.ipCountEl = $('#ip-count', sc);
|
||||||
this.pageCountEl = $('#page-count', sc);
|
this.pageCountEl = $('#page-count', sc);
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Stats',
|
name: 'Thread Stats',
|
||||||
@ -10610,7 +10620,7 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
var fileCount, postCount;
|
var fileCount, ipCount, m, postCount, script, _i, _len, _ref;
|
||||||
postCount = 0;
|
postCount = 0;
|
||||||
fileCount = 0;
|
fileCount = 0;
|
||||||
this.posts.forEach(function(post) {
|
this.posts.forEach(function(post) {
|
||||||
@ -10622,18 +10632,26 @@
|
|||||||
return ThreadStats.lastPost = post.info.date;
|
return ThreadStats.lastPost = post.info.date;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
_ref = $$('script[type="text/javascript"]:not([src])', d.head);
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
script = _ref[_i];
|
||||||
|
if (m = script.textContent.match(/\bvar unique_ips = (\d+);/)) {
|
||||||
|
ipCount = +m[1];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
ThreadStats.thread = this;
|
ThreadStats.thread = this;
|
||||||
ThreadStats.fetchPage();
|
ThreadStats.fetchPage();
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, newPosts, postCount, _ref, _ref1;
|
var fileCount, ipCount, newPosts, postCount, _ref, _ref1;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, newPosts = _ref.newPosts;
|
_ref = e.detail, postCount = _ref.postCount, fileCount = _ref.fileCount, ipCount = _ref.ipCount, newPosts = _ref.newPosts;
|
||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount, ipCount);
|
||||||
if (!Conf["Page Count in Stats"]) {
|
if (!Conf["Page Count in Stats"]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -10644,11 +10662,14 @@
|
|||||||
return ThreadStats.fetchPage();
|
return ThreadStats.fetchPage();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
update: function(postCount, fileCount) {
|
update: function(postCount, fileCount, ipCount) {
|
||||||
var fileCountEl, postCountEl, thread;
|
var fileCountEl, ipCountEl, postCountEl, thread;
|
||||||
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl;
|
thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl;
|
||||||
postCountEl.textContent = postCount;
|
postCountEl.textContent = postCount;
|
||||||
fileCountEl.textContent = fileCount;
|
fileCountEl.textContent = fileCount;
|
||||||
|
if (Conf["IP Count in Stats"]) {
|
||||||
|
ipCountEl.textContent = ipCount != null ? ipCount : '?';
|
||||||
|
}
|
||||||
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
(thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning');
|
||||||
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning');
|
||||||
},
|
},
|
||||||
@ -11090,7 +11111,8 @@
|
|||||||
return post.fullID;
|
return post.fullID;
|
||||||
}),
|
}),
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead)
|
fileCount: OP.images + (!!ThreadUpdater.thread.OP.file && !ThreadUpdater.thread.OP.file.isDead),
|
||||||
|
ipCount: OP.unique_ips
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -13688,7 +13710,7 @@
|
|||||||
className: 'dialog'
|
className: 'dialog'
|
||||||
});
|
});
|
||||||
$.extend(dialog, {
|
$.extend(dialog, {
|
||||||
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.0</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
innerHTML: "<nav><div class=sections-list></div><p class='imp-exp-result warning'></p><div class=credits><a class=export>Export</a> | <a class=import>Import</a> | <a class=reset>Reset Settings</a> | <input type=file hidden><a href='https://github.com/ccd0/4chan-x' target=_blank>4chan X</a> | <a href='https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md' target=_blank>1.9.10.1</a> | <a href='https://github.com/ccd0/4chan-x/issues' target=_blank>Issues</a> | <a href=javascript:; class='close fa fa-times' title=Close></a></div></nav><div class=section-container><section></section></div>"
|
||||||
});
|
});
|
||||||
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
|
||||||
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
|
||||||
|
|||||||
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.9.10.0' />
|
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.9.10.1' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.9.10.0' />
|
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.9.10.1' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||||
"meta": {
|
"meta": {
|
||||||
"name": "4chan X",
|
"name": "4chan X",
|
||||||
"version": "1.9.10.0",
|
"version": "1.9.10.1",
|
||||||
"repo": "https://github.com/ccd0/4chan-x/",
|
"repo": "https://github.com/ccd0/4chan-x/",
|
||||||
"page": "https://github.com/ccd0/4chan-x",
|
"page": "https://github.com/ccd0/4chan-x",
|
||||||
"downloads": "https://ccd0.github.io/4chan-x/builds/",
|
"downloads": "https://ccd0.github.io/4chan-x/builds/",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user