Release 4chan X v1.8.0.
This commit is contained in:
parent
ed425449da
commit
38ba927c8b
@ -1,3 +1,6 @@
|
|||||||
|
## v1.8.0
|
||||||
|
*2014-06-18*
|
||||||
|
|
||||||
**ccd0**
|
**ccd0**
|
||||||
- Add compatibility with Greasemonkey 2.0.
|
- Add compatibility with Greasemonkey 2.0.
|
||||||
- Much of Mayhem's [API](https://github.com/MayhemYDG/4chan-x/wiki) has been removed due to issues with Greasemonkey 2.0.
|
- Much of Mayhem's [API](https://github.com/MayhemYDG/4chan-x/wiki) has been removed due to issues with Greasemonkey 2.0.
|
||||||
|
|||||||
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.7.63 - 2014-06-16
|
* 4chan X - Version 1.8.0 - 2014-06-18
|
||||||
*
|
*
|
||||||
* 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
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.7.63
|
// @version 1.8.0
|
||||||
// @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.7.63
|
// @version 1.8.0
|
||||||
// @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.7.63 - 2014-06-16
|
* 4chan X - Version 1.8.0 - 2014-06-18
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@ -374,7 +374,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.7.63',
|
VERSION: '1.8.0',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -386,16 +386,6 @@
|
|||||||
return root.querySelector(selector);
|
return root.querySelector(selector);
|
||||||
};
|
};
|
||||||
|
|
||||||
$.extend = function(obj, prop) {
|
|
||||||
var key, val;
|
|
||||||
for (key in prop) {
|
|
||||||
val = prop[key];
|
|
||||||
if (prop.hasOwnProperty(key)) {
|
|
||||||
obj[key] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
||||||
|
|
||||||
$.id = function(id) {
|
$.id = function(id) {
|
||||||
@ -659,6 +649,9 @@
|
|||||||
if (root == null) {
|
if (root == null) {
|
||||||
root = d;
|
root = d;
|
||||||
}
|
}
|
||||||
|
if (typeof cloneInto === 'function') {
|
||||||
|
detail = cloneInto(detail, document.defaultView);
|
||||||
|
}
|
||||||
return root.dispatchEvent(new CustomEvent(event, {
|
return root.dispatchEvent(new CustomEvent(event, {
|
||||||
bubbles: true,
|
bubbles: true,
|
||||||
detail: detail
|
detail: detail
|
||||||
@ -840,36 +833,19 @@
|
|||||||
Callbacks.prototype.push = function(_arg) {
|
Callbacks.prototype.push = function(_arg) {
|
||||||
var cb, name;
|
var cb, name;
|
||||||
name = _arg.name, cb = _arg.cb;
|
name = _arg.name, cb = _arg.cb;
|
||||||
if (this[name]) {
|
|
||||||
this.connect(name);
|
|
||||||
}
|
|
||||||
if (!this[name]) {
|
if (!this[name]) {
|
||||||
this.keys.push(name);
|
this.keys.push(name);
|
||||||
}
|
}
|
||||||
return this[name] = cb;
|
return this[name] = cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
Callbacks.prototype.connect = function(name) {
|
|
||||||
if (this[name].disconnected) {
|
|
||||||
return delete this[name].disconnected;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.disconnect = function(name) {
|
|
||||||
if (this[name]) {
|
|
||||||
return this[name].disconnected = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.execute = function(node) {
|
Callbacks.prototype.execute = function(node) {
|
||||||
var err, errors, name, _i, _len, _ref;
|
var err, errors, name, _i, _len, _ref;
|
||||||
_ref = this.keys;
|
_ref = this.keys;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
name = _ref[_i];
|
name = _ref[_i];
|
||||||
try {
|
try {
|
||||||
if (!this[name].disconnected) {
|
this[name].call(node);
|
||||||
this[name].call(node);
|
|
||||||
}
|
|
||||||
} catch (_error) {
|
} catch (_error) {
|
||||||
err = _error;
|
err = _error;
|
||||||
if (!errors) {
|
if (!errors) {
|
||||||
@ -1515,12 +1491,6 @@
|
|||||||
return typeof this.sync === "function" ? this.sync() : void 0;
|
return typeof this.sync === "function" ? this.sync() : void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
DataBoard.prototype.disconnect = function() {
|
|
||||||
$.desync(this.key);
|
|
||||||
delete this.sync;
|
|
||||||
return delete this.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
return DataBoard;
|
return DataBoard;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
@ -1843,7 +1813,7 @@
|
|||||||
$.sync('Header auto-hide', this.setBarVisibility);
|
$.sync('Header auto-hide', this.setBarVisibility);
|
||||||
$.sync('Centered links', this.setLinkJustify);
|
$.sync('Centered links', this.setLinkJustify);
|
||||||
this.addShortcut(menuButton);
|
this.addShortcut(menuButton);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Header'
|
textContent: 'Header'
|
||||||
@ -2251,12 +2221,9 @@
|
|||||||
return Header.menu.toggle(e, this, g);
|
return Header.menu.toggle(e, this, g);
|
||||||
},
|
},
|
||||||
createNotification: function(e) {
|
createNotification: function(e) {
|
||||||
var cb, content, lifetime, notice, type, _ref;
|
var content, lifetime, notice, type, _ref;
|
||||||
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb;
|
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime;
|
||||||
notice = new Notice(type, content, lifetime);
|
return notice = new Notice(type, content, lifetime);
|
||||||
if (cb) {
|
|
||||||
return cb(notice);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
areNotificationsEnabled: false,
|
areNotificationsEnabled: false,
|
||||||
enableDesktopNotifications: function() {
|
enableDesktopNotifications: function() {
|
||||||
@ -2396,7 +2363,7 @@
|
|||||||
$.on(input, 'change', this.cb.sort);
|
$.on(input, 'change', this.cb.sort);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Index Navigation'
|
textContent: 'Index Navigation'
|
||||||
@ -2922,14 +2889,12 @@
|
|||||||
return nodes;
|
return nodes;
|
||||||
},
|
},
|
||||||
buildStructure: function(nodes) {
|
buildStructure: function(nodes) {
|
||||||
var i, node, result;
|
var node, _i, _len;
|
||||||
result = $.frag();
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
i = 0;
|
node = nodes[_i];
|
||||||
while (node = nodes[i++]) {
|
$.add(Index.root, [node, $.el('hr')]);
|
||||||
$.add(result, [node, $.el('hr')]);
|
|
||||||
}
|
}
|
||||||
$.event('IndexBuild', result.children);
|
return ThreadHiding.onIndexBuild(nodes);
|
||||||
return $.add(Index.root, result);
|
|
||||||
},
|
},
|
||||||
isSearching: false,
|
isSearching: false,
|
||||||
clearSearch: function() {
|
clearSearch: function() {
|
||||||
@ -3573,7 +3538,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
UI = (function() {
|
UI = (function() {
|
||||||
var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove;
|
var Menu, addMenuEntry, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, menus, rmMenuEntry, touchend, touchmove;
|
||||||
dialog = function(id, position, properties) {
|
dialog = function(id, position, properties) {
|
||||||
var child, el, move, _i, _len, _ref;
|
var child, el, move, _i, _len, _ref;
|
||||||
el = $.el('div', {
|
el = $.el('div', {
|
||||||
@ -3599,6 +3564,13 @@
|
|||||||
}
|
}
|
||||||
return el;
|
return el;
|
||||||
};
|
};
|
||||||
|
menus = {};
|
||||||
|
addMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
|
rmMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
Menu = (function() {
|
Menu = (function() {
|
||||||
var currentMenu, lastToggledButton;
|
var currentMenu, lastToggledButton;
|
||||||
|
|
||||||
@ -3613,9 +3585,19 @@
|
|||||||
this.onFocus = __bind(this.onFocus, this);
|
this.onFocus = __bind(this.onFocus, this);
|
||||||
this.keybinds = __bind(this.keybinds, this);
|
this.keybinds = __bind(this.keybinds, this);
|
||||||
this.close = __bind(this.close, this);
|
this.close = __bind(this.close, this);
|
||||||
$.on(d, 'AddMenuEntry', this.addEntry);
|
$.on(d, 'AddMenuEntry', (function(_this) {
|
||||||
$.on(d, 'rmMenuEntry', this.rmEntry);
|
return function(_arg) {
|
||||||
|
var detail;
|
||||||
|
detail = _arg.detail;
|
||||||
|
if (detail.type !== _this.type) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delete detail.open;
|
||||||
|
return _this.addEntry(detail);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
this.entries = [];
|
this.entries = [];
|
||||||
|
menus[this.type] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu.prototype.makeMenu = function() {
|
Menu.prototype.makeMenu = function() {
|
||||||
@ -3806,22 +3788,13 @@
|
|||||||
return style.right = right;
|
return style.right = right;
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.addEntry = function(e) {
|
Menu.prototype.addEntry = function(entry) {
|
||||||
var entry;
|
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.parseEntry(entry);
|
this.parseEntry(entry);
|
||||||
return this.entries.push(entry);
|
return this.entries.push(entry);
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.rmEntry = function(e) {
|
Menu.prototype.rmEntry = function(entry) {
|
||||||
var entry, index;
|
var index;
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
index = this.entries.indexOf(entry);
|
index = this.entries.indexOf(entry);
|
||||||
return this.entries.splice(index, 1);
|
return this.entries.splice(index, 1);
|
||||||
};
|
};
|
||||||
@ -4011,7 +3984,9 @@
|
|||||||
dialog: dialog,
|
dialog: dialog,
|
||||||
Menu: Menu,
|
Menu: Menu,
|
||||||
hover: hoverstart,
|
hover: hoverstart,
|
||||||
checkbox: checkbox
|
checkbox: checkbox,
|
||||||
|
addMenuEntry: addMenuEntry,
|
||||||
|
rmMenuEntry: rmMenuEntry
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
@ -4309,7 +4284,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el;
|
var el;
|
||||||
@ -4415,7 +4390,7 @@
|
|||||||
thisPost = UI.checkbox('thisPost', ' This post', true);
|
thisPost = UI.checkbox('thisPost', ' This post', true);
|
||||||
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
||||||
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4454,7 +4429,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4485,7 +4460,7 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -4723,7 +4698,6 @@
|
|||||||
}
|
}
|
||||||
this.db = new DataBoard('hiddenThreads');
|
this.db = new DataBoard('hiddenThreads');
|
||||||
this.syncCatalog();
|
this.syncCatalog();
|
||||||
$.on(d, 'IndexBuild', this.onIndexBuild);
|
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Hiding',
|
name: 'Thread Hiding',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
@ -4742,16 +4716,12 @@
|
|||||||
}
|
}
|
||||||
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
||||||
},
|
},
|
||||||
onIndexBuild: function(_arg) {
|
onIndexBuild: function(nodes) {
|
||||||
var i, nodes, root, thread, _i, _len;
|
var root, thread, _i, _len;
|
||||||
nodes = _arg.detail;
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
for (i = _i = 0, _len = nodes.length; _i < _len; i = _i += 2) {
|
root = nodes[_i];
|
||||||
root = nodes[i];
|
|
||||||
thread = Get.threadFromRoot(root);
|
thread = Get.threadFromRoot(root);
|
||||||
if (!thread.isHidden) {
|
if (thread.isHidden && thread.stub && !root.contains(thread.stub)) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (thread.stub && root.contains(thread.stub)) {
|
|
||||||
ThreadHiding.makeStub(thread, root);
|
ThreadHiding.makeStub(thread, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4822,7 +4792,7 @@
|
|||||||
});
|
});
|
||||||
$.on(apply, 'click', ThreadHiding.menu.hide);
|
$.on(apply, 'click', ThreadHiding.menu.hide);
|
||||||
makeStub = UI.checkbox('Stubs', ' Make stub');
|
makeStub = UI.checkbox('Stubs', ' Make stub');
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4849,7 +4819,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(div, 'click', ThreadHiding.menu.show);
|
$.on(div, 'click', ThreadHiding.menu.show);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4868,7 +4838,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -5396,7 +5366,7 @@
|
|||||||
});
|
});
|
||||||
input = $('input', this.controls);
|
input = $('input', this.controls);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: this.controls,
|
el: this.controls,
|
||||||
order: 98
|
order: 98
|
||||||
@ -5409,19 +5379,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var input;
|
|
||||||
if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
input = $('input', this.controls);
|
|
||||||
$.off(input, 'change', this.toggle);
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
delete this.enabled;
|
|
||||||
delete this.controls;
|
|
||||||
delete this.entry;
|
|
||||||
return Post.callbacks.disconnect('Quote Threading');
|
|
||||||
},
|
|
||||||
ready: function() {
|
ready: function() {
|
||||||
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
||||||
return QuoteThreading.force();
|
return QuoteThreading.force();
|
||||||
@ -5824,16 +5781,6 @@
|
|||||||
$.prepend($('.navLinksBot'), linkBot);
|
$.prepend($('.navLinksBot'), linkBot);
|
||||||
}
|
}
|
||||||
$.before($.id('togglePostFormLink'), link);
|
$.before($.id('togglePostFormLink'), link);
|
||||||
$.on(d, 'QRGetSelectedPost', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return cb(QR.selected);
|
|
||||||
});
|
|
||||||
$.on(d, 'QRAddPreSubmitHook', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return QR.preSubmitHooks.push(cb);
|
|
||||||
});
|
|
||||||
$.on(d, 'paste', QR.paste);
|
$.on(d, 'paste', QR.paste);
|
||||||
$.on(d, 'dragover', QR.dragOver);
|
$.on(d, 'dragover', QR.dragOver);
|
||||||
$.on(d, 'drop', QR.dropFile);
|
$.on(d, 'drop', QR.dropFile);
|
||||||
@ -6455,9 +6402,8 @@
|
|||||||
return $.add(nodes.form, flag);
|
return $.add(nodes.form, flag);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
preSubmitHooks: [],
|
|
||||||
submit: function(e) {
|
submit: function(e) {
|
||||||
var challenge, err, extra, filetag, formData, hook, options, post, response, textOnly, thread, threadID, _i, _len, _ref, _ref1;
|
var challenge, err, extra, filetag, formData, options, post, response, textOnly, thread, threadID, _ref;
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
@ -6490,17 +6436,9 @@
|
|||||||
err = 'No file selected.';
|
err = 'No file selected.';
|
||||||
} else if (post.file && thread.fileLimit) {
|
} else if (post.file && thread.fileLimit) {
|
||||||
err = 'Max limit of image replies has been reached.';
|
err = 'Max limit of image replies has been reached.';
|
||||||
} else {
|
|
||||||
_ref = QR.preSubmitHooks;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
hook = _ref[_i];
|
|
||||||
if (err = hook(post, thread)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (QR.captcha.isEnabled && !err) {
|
if (QR.captcha.isEnabled && !err) {
|
||||||
_ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response;
|
_ref = QR.captcha.getOne(), challenge = _ref.challenge, response = _ref.response;
|
||||||
if (!response) {
|
if (!response) {
|
||||||
err = 'No valid captcha.';
|
err = 'No valid captcha.';
|
||||||
}
|
}
|
||||||
@ -6633,7 +6571,9 @@
|
|||||||
});
|
});
|
||||||
ThreadUpdater.postID = postID;
|
ThreadUpdater.postID = postID;
|
||||||
$.event('QRPostSuccessful', {
|
$.event('QRPostSuccessful', {
|
||||||
board: g.BOARD,
|
board: {
|
||||||
|
ID: g.BOARD.ID
|
||||||
|
},
|
||||||
threadID: threadID,
|
threadID: threadID,
|
||||||
postID: postID
|
postID: postID
|
||||||
});
|
});
|
||||||
@ -7260,8 +7200,7 @@
|
|||||||
rectEl = this.nodes.el.getBoundingClientRect();
|
rectEl = this.nodes.el.getBoundingClientRect();
|
||||||
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
||||||
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
||||||
this.load();
|
return this.load();
|
||||||
return $.event('QRPostSelection', this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_Class.prototype.load = function() {
|
_Class.prototype.load = function() {
|
||||||
@ -7533,7 +7472,7 @@
|
|||||||
el.title = "" + type + " Tyme";
|
el.title = "" + type + " Tyme";
|
||||||
FappeTyme[lc] = input = el.firstElementChild;
|
FappeTyme[lc] = input = el.firstElementChild;
|
||||||
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 97
|
order: 97
|
||||||
@ -7633,7 +7572,7 @@
|
|||||||
createSubEntry = Gallery.menu.createSubEntry;
|
createSubEntry = Gallery.menu.createSubEntry;
|
||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
el = createSubEntry(name).el;
|
el = createSubEntry(name).el;
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'gallery',
|
type: 'gallery',
|
||||||
el: el,
|
el: el,
|
||||||
order: 0
|
order: 0
|
||||||
@ -7868,7 +7807,7 @@
|
|||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
subEntries.push(createSubEntry(name));
|
subEntries.push(createSubEntry(name));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8213,7 +8152,7 @@
|
|||||||
conf = _ref[name];
|
conf = _ref[name];
|
||||||
subEntries.push(createSubEntry(name, conf[1]));
|
subEntries.push(createSubEntry(name, conf[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8386,7 +8325,7 @@
|
|||||||
});
|
});
|
||||||
this.el = prefetch.firstElementChild;
|
this.el = prefetch.firstElementChild;
|
||||||
$.on(this.el, 'change', this.toggle);
|
$.on(this.el, 'change', this.toggle);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: prefetch,
|
el: prefetch,
|
||||||
order: 104
|
order: 104
|
||||||
@ -9163,7 +9102,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el, open;
|
var el, open;
|
||||||
@ -9240,7 +9179,7 @@
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 40,
|
order: 40,
|
||||||
@ -9365,7 +9304,7 @@
|
|||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 100,
|
order: 100,
|
||||||
@ -9434,7 +9373,7 @@
|
|||||||
textContent: 'Report this post'
|
textContent: 'Report this post'
|
||||||
});
|
});
|
||||||
$.on(a, 'click', ReportLink.report);
|
$.on(a, 'click', ReportLink.report);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 10,
|
order: 10,
|
||||||
@ -9512,12 +9451,6 @@
|
|||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
return d.title = Get.threadExcerpt(this);
|
return d.title = Get.threadExcerpt(this);
|
||||||
},
|
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Excerpt');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9569,25 +9502,6 @@
|
|||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
clearTimeout(this.timeout);
|
|
||||||
delete this.timeout;
|
|
||||||
delete this.thread;
|
|
||||||
delete this.postCountEl;
|
|
||||||
delete this.fileCountEl;
|
|
||||||
delete this.pageCountEl;
|
|
||||||
delete this.dialog;
|
|
||||||
Thread.callbacks.disconnect('Thread Stats');
|
|
||||||
return $.off(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
|
||||||
},
|
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, postCount, _ref;
|
var fileCount, postCount, _ref;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
@ -9707,7 +9621,7 @@
|
|||||||
subEntries.push({
|
subEntries.push({
|
||||||
el: this.settings
|
el: this.settings
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Updater'
|
textContent: 'Updater'
|
||||||
@ -9720,45 +9634,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var el, entry, input, name, _i, _j, _len, _len1, _ref, _ref1;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Updater']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$.off(this.timer, 'click', this.update);
|
|
||||||
$.off(this.status, 'click', this.update);
|
|
||||||
if (this.timeoutID) {
|
|
||||||
clearTimeout(this.timeoutID);
|
|
||||||
}
|
|
||||||
_ref = this.entry.subEntries;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
entry = _ref[_i];
|
|
||||||
el = entry.el;
|
|
||||||
input = el.firstElementChild;
|
|
||||||
$.off(input, 'change', $.cb.checked);
|
|
||||||
$.off(input, 'change', this.cb.scrollBG);
|
|
||||||
$.off(input, 'change', this.cb.update);
|
|
||||||
}
|
|
||||||
$.off(this.settings, 'click', this.intervalShortcut);
|
|
||||||
$.off(window, 'online offline', this.cb.online);
|
|
||||||
$.off(d, 'QRPostSuccessful', this.cb.checkpost);
|
|
||||||
$.off(d, 'visibilitychange', this.cb.visibility);
|
|
||||||
this.set('timer', null);
|
|
||||||
this.set('status', 'Offline');
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rmClass(doc, 'float');
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
_ref1 = ['checkPostCount', 'timer', 'status', 'isUpdating', 'entry', 'dialog', 'thread', 'root', 'lastPost', 'outdateCount', 'online', 'seconds', 'timeoutID'];
|
|
||||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
|
||||||
name = _ref1[_j];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Updater');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
ThreadUpdater.thread = this;
|
ThreadUpdater.thread = this;
|
||||||
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
||||||
@ -9857,7 +9732,9 @@
|
|||||||
ThreadUpdater.thread.kill();
|
ThreadUpdater.thread.kill();
|
||||||
$.event('ThreadUpdate', {
|
$.event('ThreadUpdate', {
|
||||||
404: true,
|
404: true,
|
||||||
thread: ThreadUpdater.thread
|
thread: {
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -9983,12 +9860,18 @@
|
|||||||
ID = +post.ID;
|
ID = +post.ID;
|
||||||
if (__indexOf.call(index, ID) < 0) {
|
if (__indexOf.call(index, ID) < 0) {
|
||||||
post.kill();
|
post.kill();
|
||||||
deletedPosts.push(post);
|
deletedPosts.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
} else if (post.isDead) {
|
} else if (post.isDead) {
|
||||||
post.resurrect();
|
post.resurrect();
|
||||||
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
||||||
post.kill(true);
|
post.kill(true);
|
||||||
deletedFiles.push(post);
|
deletedFiles.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
||||||
return ThreadUpdater.foundPost = true;
|
return ThreadUpdater.foundPost = true;
|
||||||
@ -10040,8 +9923,22 @@
|
|||||||
}
|
}
|
||||||
return $.event('ThreadUpdate', {
|
return $.event('ThreadUpdate', {
|
||||||
404: false,
|
404: false,
|
||||||
thread: ThreadUpdater.thread,
|
thread: {
|
||||||
newPosts: posts,
|
ID: ThreadUpdater.thread.ID,
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
},
|
||||||
|
newPosts: (function() {
|
||||||
|
var _k, _len2, _results;
|
||||||
|
_results = [];
|
||||||
|
for (_k = 0, _len2 = posts.length; _k < _len2; _k++) {
|
||||||
|
post = posts[_k];
|
||||||
|
_results.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})(),
|
||||||
deletedPosts: deletedPosts,
|
deletedPosts: deletedPosts,
|
||||||
deletedFiles: deletedFiles,
|
deletedFiles: deletedFiles,
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
@ -10070,9 +9967,6 @@
|
|||||||
this.status = $('#watcher-status', this.dialog);
|
this.status = $('#watcher-status', this.dialog);
|
||||||
this.list = this.dialog.lastElementChild;
|
this.list = this.dialog.lastElementChild;
|
||||||
$.on(d, 'QRPostSuccessful', this.cb.post);
|
$.on(d, 'QRPostSuccessful', this.cb.post);
|
||||||
if (g.VIEW === 'thread') {
|
|
||||||
$.on(d, 'ThreadUpdate', this.cb.threadUpdate);
|
|
||||||
}
|
|
||||||
$.on(sc, 'click', this.toggleWatcher);
|
$.on(sc, 'click', this.toggleWatcher);
|
||||||
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
||||||
$.on(d, '4chanXInitFinished', this.ready);
|
$.on(d, '4chanXInitFinished', this.ready);
|
||||||
@ -10188,7 +10082,7 @@
|
|||||||
return $.set('AutoWatch', threadID);
|
return $.set('AutoWatch', threadID);
|
||||||
}
|
}
|
||||||
} else if (Conf['Auto Watch Reply']) {
|
} else if (Conf['Auto Watch Reply']) {
|
||||||
return ThreadWatcher.add(board.threads[threadID]);
|
return ThreadWatcher.add(g.boards[board.ID].threads[threadID]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onIndexRefresh: function() {
|
onIndexRefresh: function() {
|
||||||
@ -10218,7 +10112,7 @@
|
|||||||
},
|
},
|
||||||
onThreadRefresh: function(e) {
|
onThreadRefresh: function(e) {
|
||||||
var thread;
|
var thread;
|
||||||
thread = e.detail.thread;
|
thread = g.threads[e.detail.thread.fullID];
|
||||||
if (!(e.detail[404] && ThreadWatcher.db.get({
|
if (!(e.detail[404] && ThreadWatcher.db.get({
|
||||||
boardID: thread.board.ID,
|
boardID: thread.board.ID,
|
||||||
threadID: thread.ID
|
threadID: thread.ID
|
||||||
@ -10445,7 +10339,7 @@
|
|||||||
entryEl = $.el('a', {
|
entryEl = $.el('a', {
|
||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: entryEl,
|
el: entryEl,
|
||||||
order: 60
|
order: 60
|
||||||
@ -10526,7 +10420,7 @@
|
|||||||
if (refresh) {
|
if (refresh) {
|
||||||
this.refreshers.push(refresh.bind(entry));
|
this.refreshers.push(refresh.bind(entry));
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
createSubEntry: function(name, desc) {
|
createSubEntry: function(name, desc) {
|
||||||
@ -10562,28 +10456,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var hr, name, _i, _len, _ref;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon'] && !Conf['Desktop Notifications']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Unread.db.disconnect();
|
|
||||||
if (hr = Unread.hr, Unread) {
|
|
||||||
$.rm(hr);
|
|
||||||
}
|
|
||||||
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost'];
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
name = _ref[_i];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
$.off(d, '4chanXInitFinished', this.ready);
|
|
||||||
$.off(d, 'ThreadUpdate', this.onUpdate);
|
|
||||||
$.off(d, 'scroll visibilitychange', this.read);
|
|
||||||
if (Conf['Unread Line'] && !Conf['Quote Threading']) {
|
|
||||||
$.off(d, 'visibilitychange', this.setLine);
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Unread');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
Unread.thread = this;
|
Unread.thread = this;
|
||||||
Unread.title = d.title;
|
Unread.title = d.title;
|
||||||
@ -10725,10 +10597,20 @@
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
|
var post;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
} else if (!QuoteThreading.enabled) {
|
} else if (!QuoteThreading.enabled) {
|
||||||
return Unread.addPosts(e.detail.newPosts);
|
return Unread.addPosts((function() {
|
||||||
|
var _i, _len, _ref, _results;
|
||||||
|
_ref = e.detail.newPosts;
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
post = _ref[_i];
|
||||||
|
_results.push(g.posts[post.fullID]);
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})());
|
||||||
} else {
|
} else {
|
||||||
Unread.read();
|
Unread.read();
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
@ -10948,7 +10830,7 @@
|
|||||||
return psa.hidden;
|
return psa.hidden;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
$.on(entry.el, 'click', PSAHiding.toggle);
|
$.on(entry.el, 'click', PSAHiding.toggle);
|
||||||
PSAHiding.btn = btn = $.el('span', {
|
PSAHiding.btn = btn = $.el('span', {
|
||||||
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
||||||
@ -11101,7 +10983,7 @@
|
|||||||
input = $('input', el);
|
input = $('input', el);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.sync('Header catalog links', CatalogLinks.set);
|
$.sync('Header catalog links', CatalogLinks.set);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 95
|
order: 95
|
||||||
@ -11599,7 +11481,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (board === 'sci') {
|
if (board === 'sci') {
|
||||||
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(e.detail);\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(document.getElementById(\'p\' + e.detail));\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
||||||
return Post.callbacks.push({
|
return Post.callbacks.push({
|
||||||
name: 'Parse /sci/ math',
|
name: 'Parse /sci/ math',
|
||||||
cb: this.math
|
cb: this.math
|
||||||
@ -11632,7 +11514,7 @@
|
|||||||
};
|
};
|
||||||
})(this)), (function(_this) {
|
})(this)), (function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
return $.event('jsmath', _this.nodes.post, window);
|
return $.event('jsmath', _this.ID, window);
|
||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
},
|
},
|
||||||
@ -12480,7 +12362,7 @@
|
|||||||
Settings.dialog = dialog = $.el('div', {
|
Settings.dialog = dialog = $.el('div', {
|
||||||
id: 'fourchanx-settings',
|
id: 'fourchanx-settings',
|
||||||
className: 'dialog',
|
className: '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.7.63</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.8.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>'
|
||||||
});
|
});
|
||||||
$.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"]);
|
||||||
@ -13185,7 +13067,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.on(d, 'AddCallback', Main.addCallback);
|
|
||||||
return $.ready(Main.initReady);
|
return $.ready(Main.initReady);
|
||||||
},
|
},
|
||||||
initStyle: function() {
|
initStyle: function() {
|
||||||
@ -13325,7 +13206,7 @@
|
|||||||
}
|
}
|
||||||
if (previousversion) {
|
if (previousversion) {
|
||||||
el = $.el('span', {
|
el = $.el('span', {
|
||||||
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.7.63</a>.'
|
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.8.0</a>.'
|
||||||
});
|
});
|
||||||
new Notice('info', el, 15);
|
new Notice('info', el, 15);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Binary file not shown.
BIN
builds/crx.crx
BIN
builds/crx.crx
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "4chan X",
|
"name": "4chan X",
|
||||||
"version": "1.7.63",
|
"version": "1.8.0",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||||
"icons": {
|
"icons": {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.7.63 - 2014-06-16
|
* 4chan X - Version 1.8.0 - 2014-06-18
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@ -349,7 +349,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.7.63',
|
VERSION: '1.8.0',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -361,16 +361,6 @@
|
|||||||
return root.querySelector(selector);
|
return root.querySelector(selector);
|
||||||
};
|
};
|
||||||
|
|
||||||
$.extend = function(obj, prop) {
|
|
||||||
var key, val;
|
|
||||||
for (key in prop) {
|
|
||||||
val = prop[key];
|
|
||||||
if (prop.hasOwnProperty(key)) {
|
|
||||||
obj[key] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
||||||
|
|
||||||
$.id = function(id) {
|
$.id = function(id) {
|
||||||
@ -875,36 +865,19 @@
|
|||||||
Callbacks.prototype.push = function(_arg) {
|
Callbacks.prototype.push = function(_arg) {
|
||||||
var cb, name;
|
var cb, name;
|
||||||
name = _arg.name, cb = _arg.cb;
|
name = _arg.name, cb = _arg.cb;
|
||||||
if (this[name]) {
|
|
||||||
this.connect(name);
|
|
||||||
}
|
|
||||||
if (!this[name]) {
|
if (!this[name]) {
|
||||||
this.keys.push(name);
|
this.keys.push(name);
|
||||||
}
|
}
|
||||||
return this[name] = cb;
|
return this[name] = cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
Callbacks.prototype.connect = function(name) {
|
|
||||||
if (this[name].disconnected) {
|
|
||||||
return delete this[name].disconnected;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.disconnect = function(name) {
|
|
||||||
if (this[name]) {
|
|
||||||
return this[name].disconnected = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.execute = function(node) {
|
Callbacks.prototype.execute = function(node) {
|
||||||
var err, errors, name, _i, _len, _ref;
|
var err, errors, name, _i, _len, _ref;
|
||||||
_ref = this.keys;
|
_ref = this.keys;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
name = _ref[_i];
|
name = _ref[_i];
|
||||||
try {
|
try {
|
||||||
if (!this[name].disconnected) {
|
this[name].call(node);
|
||||||
this[name].call(node);
|
|
||||||
}
|
|
||||||
} catch (_error) {
|
} catch (_error) {
|
||||||
err = _error;
|
err = _error;
|
||||||
if (!errors) {
|
if (!errors) {
|
||||||
@ -1550,12 +1523,6 @@
|
|||||||
return typeof this.sync === "function" ? this.sync() : void 0;
|
return typeof this.sync === "function" ? this.sync() : void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
DataBoard.prototype.disconnect = function() {
|
|
||||||
$.desync(this.key);
|
|
||||||
delete this.sync;
|
|
||||||
return delete this.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
return DataBoard;
|
return DataBoard;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
@ -1878,7 +1845,7 @@
|
|||||||
$.sync('Header auto-hide', this.setBarVisibility);
|
$.sync('Header auto-hide', this.setBarVisibility);
|
||||||
$.sync('Centered links', this.setLinkJustify);
|
$.sync('Centered links', this.setLinkJustify);
|
||||||
this.addShortcut(menuButton);
|
this.addShortcut(menuButton);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Header'
|
textContent: 'Header'
|
||||||
@ -2286,12 +2253,9 @@
|
|||||||
return Header.menu.toggle(e, this, g);
|
return Header.menu.toggle(e, this, g);
|
||||||
},
|
},
|
||||||
createNotification: function(e) {
|
createNotification: function(e) {
|
||||||
var cb, content, lifetime, notice, type, _ref;
|
var content, lifetime, notice, type, _ref;
|
||||||
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb;
|
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime;
|
||||||
notice = new Notice(type, content, lifetime);
|
return notice = new Notice(type, content, lifetime);
|
||||||
if (cb) {
|
|
||||||
return cb(notice);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
areNotificationsEnabled: false,
|
areNotificationsEnabled: false,
|
||||||
enableDesktopNotifications: function() {
|
enableDesktopNotifications: function() {
|
||||||
@ -2431,7 +2395,7 @@
|
|||||||
$.on(input, 'change', this.cb.sort);
|
$.on(input, 'change', this.cb.sort);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Index Navigation'
|
textContent: 'Index Navigation'
|
||||||
@ -2957,14 +2921,12 @@
|
|||||||
return nodes;
|
return nodes;
|
||||||
},
|
},
|
||||||
buildStructure: function(nodes) {
|
buildStructure: function(nodes) {
|
||||||
var i, node, result;
|
var node, _i, _len;
|
||||||
result = $.frag();
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
i = 0;
|
node = nodes[_i];
|
||||||
while (node = nodes[i++]) {
|
$.add(Index.root, [node, $.el('hr')]);
|
||||||
$.add(result, [node, $.el('hr')]);
|
|
||||||
}
|
}
|
||||||
$.event('IndexBuild', result.children);
|
return ThreadHiding.onIndexBuild(nodes);
|
||||||
return $.add(Index.root, result);
|
|
||||||
},
|
},
|
||||||
isSearching: false,
|
isSearching: false,
|
||||||
clearSearch: function() {
|
clearSearch: function() {
|
||||||
@ -3608,7 +3570,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
UI = (function() {
|
UI = (function() {
|
||||||
var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove;
|
var Menu, addMenuEntry, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, menus, rmMenuEntry, touchend, touchmove;
|
||||||
dialog = function(id, position, properties) {
|
dialog = function(id, position, properties) {
|
||||||
var child, el, move, _i, _len, _ref;
|
var child, el, move, _i, _len, _ref;
|
||||||
el = $.el('div', {
|
el = $.el('div', {
|
||||||
@ -3634,6 +3596,13 @@
|
|||||||
}
|
}
|
||||||
return el;
|
return el;
|
||||||
};
|
};
|
||||||
|
menus = {};
|
||||||
|
addMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
|
rmMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
Menu = (function() {
|
Menu = (function() {
|
||||||
var currentMenu, lastToggledButton;
|
var currentMenu, lastToggledButton;
|
||||||
|
|
||||||
@ -3648,9 +3617,19 @@
|
|||||||
this.onFocus = __bind(this.onFocus, this);
|
this.onFocus = __bind(this.onFocus, this);
|
||||||
this.keybinds = __bind(this.keybinds, this);
|
this.keybinds = __bind(this.keybinds, this);
|
||||||
this.close = __bind(this.close, this);
|
this.close = __bind(this.close, this);
|
||||||
$.on(d, 'AddMenuEntry', this.addEntry);
|
$.on(d, 'AddMenuEntry', (function(_this) {
|
||||||
$.on(d, 'rmMenuEntry', this.rmEntry);
|
return function(_arg) {
|
||||||
|
var detail;
|
||||||
|
detail = _arg.detail;
|
||||||
|
if (detail.type !== _this.type) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delete detail.open;
|
||||||
|
return _this.addEntry(detail);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
this.entries = [];
|
this.entries = [];
|
||||||
|
menus[this.type] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu.prototype.makeMenu = function() {
|
Menu.prototype.makeMenu = function() {
|
||||||
@ -3841,22 +3820,13 @@
|
|||||||
return style.right = right;
|
return style.right = right;
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.addEntry = function(e) {
|
Menu.prototype.addEntry = function(entry) {
|
||||||
var entry;
|
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.parseEntry(entry);
|
this.parseEntry(entry);
|
||||||
return this.entries.push(entry);
|
return this.entries.push(entry);
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.rmEntry = function(e) {
|
Menu.prototype.rmEntry = function(entry) {
|
||||||
var entry, index;
|
var index;
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
index = this.entries.indexOf(entry);
|
index = this.entries.indexOf(entry);
|
||||||
return this.entries.splice(index, 1);
|
return this.entries.splice(index, 1);
|
||||||
};
|
};
|
||||||
@ -4039,7 +4009,9 @@
|
|||||||
dialog: dialog,
|
dialog: dialog,
|
||||||
Menu: Menu,
|
Menu: Menu,
|
||||||
hover: hoverstart,
|
hover: hoverstart,
|
||||||
checkbox: checkbox
|
checkbox: checkbox,
|
||||||
|
addMenuEntry: addMenuEntry,
|
||||||
|
rmMenuEntry: rmMenuEntry
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
@ -4334,7 +4306,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el;
|
var el;
|
||||||
@ -4440,7 +4412,7 @@
|
|||||||
thisPost = UI.checkbox('thisPost', ' This post', true);
|
thisPost = UI.checkbox('thisPost', ' This post', true);
|
||||||
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
||||||
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4479,7 +4451,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4510,7 +4482,7 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -4748,7 +4720,6 @@
|
|||||||
}
|
}
|
||||||
this.db = new DataBoard('hiddenThreads');
|
this.db = new DataBoard('hiddenThreads');
|
||||||
this.syncCatalog();
|
this.syncCatalog();
|
||||||
$.on(d, 'IndexBuild', this.onIndexBuild);
|
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Hiding',
|
name: 'Thread Hiding',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
@ -4767,16 +4738,12 @@
|
|||||||
}
|
}
|
||||||
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
||||||
},
|
},
|
||||||
onIndexBuild: function(_arg) {
|
onIndexBuild: function(nodes) {
|
||||||
var i, nodes, root, thread, _i, _len;
|
var root, thread, _i, _len;
|
||||||
nodes = _arg.detail;
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
for (i = _i = 0, _len = nodes.length; _i < _len; i = _i += 2) {
|
root = nodes[_i];
|
||||||
root = nodes[i];
|
|
||||||
thread = Get.threadFromRoot(root);
|
thread = Get.threadFromRoot(root);
|
||||||
if (!thread.isHidden) {
|
if (thread.isHidden && thread.stub && !root.contains(thread.stub)) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (thread.stub && root.contains(thread.stub)) {
|
|
||||||
ThreadHiding.makeStub(thread, root);
|
ThreadHiding.makeStub(thread, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4847,7 +4814,7 @@
|
|||||||
});
|
});
|
||||||
$.on(apply, 'click', ThreadHiding.menu.hide);
|
$.on(apply, 'click', ThreadHiding.menu.hide);
|
||||||
makeStub = UI.checkbox('Stubs', ' Make stub');
|
makeStub = UI.checkbox('Stubs', ' Make stub');
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4874,7 +4841,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(div, 'click', ThreadHiding.menu.show);
|
$.on(div, 'click', ThreadHiding.menu.show);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4893,7 +4860,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -5421,7 +5388,7 @@
|
|||||||
});
|
});
|
||||||
input = $('input', this.controls);
|
input = $('input', this.controls);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: this.controls,
|
el: this.controls,
|
||||||
order: 98
|
order: 98
|
||||||
@ -5434,19 +5401,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var input;
|
|
||||||
if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
input = $('input', this.controls);
|
|
||||||
$.off(input, 'change', this.toggle);
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
delete this.enabled;
|
|
||||||
delete this.controls;
|
|
||||||
delete this.entry;
|
|
||||||
return Post.callbacks.disconnect('Quote Threading');
|
|
||||||
},
|
|
||||||
ready: function() {
|
ready: function() {
|
||||||
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
||||||
return QuoteThreading.force();
|
return QuoteThreading.force();
|
||||||
@ -5849,16 +5803,6 @@
|
|||||||
$.prepend($('.navLinksBot'), linkBot);
|
$.prepend($('.navLinksBot'), linkBot);
|
||||||
}
|
}
|
||||||
$.before($.id('togglePostFormLink'), link);
|
$.before($.id('togglePostFormLink'), link);
|
||||||
$.on(d, 'QRGetSelectedPost', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return cb(QR.selected);
|
|
||||||
});
|
|
||||||
$.on(d, 'QRAddPreSubmitHook', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return QR.preSubmitHooks.push(cb);
|
|
||||||
});
|
|
||||||
$.on(d, 'paste', QR.paste);
|
$.on(d, 'paste', QR.paste);
|
||||||
$.on(d, 'dragover', QR.dragOver);
|
$.on(d, 'dragover', QR.dragOver);
|
||||||
$.on(d, 'drop', QR.dropFile);
|
$.on(d, 'drop', QR.dropFile);
|
||||||
@ -6478,9 +6422,8 @@
|
|||||||
return $.add(nodes.form, flag);
|
return $.add(nodes.form, flag);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
preSubmitHooks: [],
|
|
||||||
submit: function(e) {
|
submit: function(e) {
|
||||||
var challenge, err, extra, filetag, formData, hook, options, post, response, textOnly, thread, threadID, _i, _len, _ref, _ref1;
|
var challenge, err, extra, filetag, formData, options, post, response, textOnly, thread, threadID, _ref;
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
@ -6513,17 +6456,9 @@
|
|||||||
err = 'No file selected.';
|
err = 'No file selected.';
|
||||||
} else if (post.file && thread.fileLimit) {
|
} else if (post.file && thread.fileLimit) {
|
||||||
err = 'Max limit of image replies has been reached.';
|
err = 'Max limit of image replies has been reached.';
|
||||||
} else {
|
|
||||||
_ref = QR.preSubmitHooks;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
hook = _ref[_i];
|
|
||||||
if (err = hook(post, thread)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (QR.captcha.isEnabled && !err) {
|
if (QR.captcha.isEnabled && !err) {
|
||||||
_ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response;
|
_ref = QR.captcha.getOne(), challenge = _ref.challenge, response = _ref.response;
|
||||||
if (!response) {
|
if (!response) {
|
||||||
err = 'No valid captcha.';
|
err = 'No valid captcha.';
|
||||||
}
|
}
|
||||||
@ -6656,7 +6591,9 @@
|
|||||||
});
|
});
|
||||||
ThreadUpdater.postID = postID;
|
ThreadUpdater.postID = postID;
|
||||||
$.event('QRPostSuccessful', {
|
$.event('QRPostSuccessful', {
|
||||||
board: g.BOARD,
|
board: {
|
||||||
|
ID: g.BOARD.ID
|
||||||
|
},
|
||||||
threadID: threadID,
|
threadID: threadID,
|
||||||
postID: postID
|
postID: postID
|
||||||
});
|
});
|
||||||
@ -7277,8 +7214,7 @@
|
|||||||
rectEl = this.nodes.el.getBoundingClientRect();
|
rectEl = this.nodes.el.getBoundingClientRect();
|
||||||
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
||||||
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
||||||
this.load();
|
return this.load();
|
||||||
return $.event('QRPostSelection', this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_Class.prototype.load = function() {
|
_Class.prototype.load = function() {
|
||||||
@ -7550,7 +7486,7 @@
|
|||||||
el.title = "" + type + " Tyme";
|
el.title = "" + type + " Tyme";
|
||||||
FappeTyme[lc] = input = el.firstElementChild;
|
FappeTyme[lc] = input = el.firstElementChild;
|
||||||
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 97
|
order: 97
|
||||||
@ -7650,7 +7586,7 @@
|
|||||||
createSubEntry = Gallery.menu.createSubEntry;
|
createSubEntry = Gallery.menu.createSubEntry;
|
||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
el = createSubEntry(name).el;
|
el = createSubEntry(name).el;
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'gallery',
|
type: 'gallery',
|
||||||
el: el,
|
el: el,
|
||||||
order: 0
|
order: 0
|
||||||
@ -7885,7 +7821,7 @@
|
|||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
subEntries.push(createSubEntry(name));
|
subEntries.push(createSubEntry(name));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8219,7 +8155,7 @@
|
|||||||
conf = _ref[name];
|
conf = _ref[name];
|
||||||
subEntries.push(createSubEntry(name, conf[1]));
|
subEntries.push(createSubEntry(name, conf[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8381,7 +8317,7 @@
|
|||||||
});
|
});
|
||||||
this.el = prefetch.firstElementChild;
|
this.el = prefetch.firstElementChild;
|
||||||
$.on(this.el, 'change', this.toggle);
|
$.on(this.el, 'change', this.toggle);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: prefetch,
|
el: prefetch,
|
||||||
order: 104
|
order: 104
|
||||||
@ -9158,7 +9094,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el, open;
|
var el, open;
|
||||||
@ -9235,7 +9171,7 @@
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 40,
|
order: 40,
|
||||||
@ -9360,7 +9296,7 @@
|
|||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 100,
|
order: 100,
|
||||||
@ -9429,7 +9365,7 @@
|
|||||||
textContent: 'Report this post'
|
textContent: 'Report this post'
|
||||||
});
|
});
|
||||||
$.on(a, 'click', ReportLink.report);
|
$.on(a, 'click', ReportLink.report);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 10,
|
order: 10,
|
||||||
@ -9507,12 +9443,6 @@
|
|||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
return d.title = Get.threadExcerpt(this);
|
return d.title = Get.threadExcerpt(this);
|
||||||
},
|
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Excerpt');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9564,25 +9494,6 @@
|
|||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
clearTimeout(this.timeout);
|
|
||||||
delete this.timeout;
|
|
||||||
delete this.thread;
|
|
||||||
delete this.postCountEl;
|
|
||||||
delete this.fileCountEl;
|
|
||||||
delete this.pageCountEl;
|
|
||||||
delete this.dialog;
|
|
||||||
Thread.callbacks.disconnect('Thread Stats');
|
|
||||||
return $.off(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
|
||||||
},
|
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, postCount, _ref;
|
var fileCount, postCount, _ref;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
@ -9702,7 +9613,7 @@
|
|||||||
subEntries.push({
|
subEntries.push({
|
||||||
el: this.settings
|
el: this.settings
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Updater'
|
textContent: 'Updater'
|
||||||
@ -9715,45 +9626,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var el, entry, input, name, _i, _j, _len, _len1, _ref, _ref1;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Updater']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$.off(this.timer, 'click', this.update);
|
|
||||||
$.off(this.status, 'click', this.update);
|
|
||||||
if (this.timeoutID) {
|
|
||||||
clearTimeout(this.timeoutID);
|
|
||||||
}
|
|
||||||
_ref = this.entry.subEntries;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
entry = _ref[_i];
|
|
||||||
el = entry.el;
|
|
||||||
input = el.firstElementChild;
|
|
||||||
$.off(input, 'change', $.cb.checked);
|
|
||||||
$.off(input, 'change', this.cb.scrollBG);
|
|
||||||
$.off(input, 'change', this.cb.update);
|
|
||||||
}
|
|
||||||
$.off(this.settings, 'click', this.intervalShortcut);
|
|
||||||
$.off(window, 'online offline', this.cb.online);
|
|
||||||
$.off(d, 'QRPostSuccessful', this.cb.checkpost);
|
|
||||||
$.off(d, 'visibilitychange', this.cb.visibility);
|
|
||||||
this.set('timer', null);
|
|
||||||
this.set('status', 'Offline');
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rmClass(doc, 'float');
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
_ref1 = ['checkPostCount', 'timer', 'status', 'isUpdating', 'entry', 'dialog', 'thread', 'root', 'lastPost', 'outdateCount', 'online', 'seconds', 'timeoutID'];
|
|
||||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
|
||||||
name = _ref1[_j];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Updater');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
ThreadUpdater.thread = this;
|
ThreadUpdater.thread = this;
|
||||||
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
||||||
@ -9852,7 +9724,9 @@
|
|||||||
ThreadUpdater.thread.kill();
|
ThreadUpdater.thread.kill();
|
||||||
$.event('ThreadUpdate', {
|
$.event('ThreadUpdate', {
|
||||||
404: true,
|
404: true,
|
||||||
thread: ThreadUpdater.thread
|
thread: {
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -9978,12 +9852,18 @@
|
|||||||
ID = +post.ID;
|
ID = +post.ID;
|
||||||
if (__indexOf.call(index, ID) < 0) {
|
if (__indexOf.call(index, ID) < 0) {
|
||||||
post.kill();
|
post.kill();
|
||||||
deletedPosts.push(post);
|
deletedPosts.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
} else if (post.isDead) {
|
} else if (post.isDead) {
|
||||||
post.resurrect();
|
post.resurrect();
|
||||||
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
||||||
post.kill(true);
|
post.kill(true);
|
||||||
deletedFiles.push(post);
|
deletedFiles.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
||||||
return ThreadUpdater.foundPost = true;
|
return ThreadUpdater.foundPost = true;
|
||||||
@ -10035,8 +9915,22 @@
|
|||||||
}
|
}
|
||||||
return $.event('ThreadUpdate', {
|
return $.event('ThreadUpdate', {
|
||||||
404: false,
|
404: false,
|
||||||
thread: ThreadUpdater.thread,
|
thread: {
|
||||||
newPosts: posts,
|
ID: ThreadUpdater.thread.ID,
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
},
|
||||||
|
newPosts: (function() {
|
||||||
|
var _k, _len2, _results;
|
||||||
|
_results = [];
|
||||||
|
for (_k = 0, _len2 = posts.length; _k < _len2; _k++) {
|
||||||
|
post = posts[_k];
|
||||||
|
_results.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})(),
|
||||||
deletedPosts: deletedPosts,
|
deletedPosts: deletedPosts,
|
||||||
deletedFiles: deletedFiles,
|
deletedFiles: deletedFiles,
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
@ -10065,9 +9959,6 @@
|
|||||||
this.status = $('#watcher-status', this.dialog);
|
this.status = $('#watcher-status', this.dialog);
|
||||||
this.list = this.dialog.lastElementChild;
|
this.list = this.dialog.lastElementChild;
|
||||||
$.on(d, 'QRPostSuccessful', this.cb.post);
|
$.on(d, 'QRPostSuccessful', this.cb.post);
|
||||||
if (g.VIEW === 'thread') {
|
|
||||||
$.on(d, 'ThreadUpdate', this.cb.threadUpdate);
|
|
||||||
}
|
|
||||||
$.on(sc, 'click', this.toggleWatcher);
|
$.on(sc, 'click', this.toggleWatcher);
|
||||||
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
||||||
$.on(d, '4chanXInitFinished', this.ready);
|
$.on(d, '4chanXInitFinished', this.ready);
|
||||||
@ -10183,7 +10074,7 @@
|
|||||||
return $.set('AutoWatch', threadID);
|
return $.set('AutoWatch', threadID);
|
||||||
}
|
}
|
||||||
} else if (Conf['Auto Watch Reply']) {
|
} else if (Conf['Auto Watch Reply']) {
|
||||||
return ThreadWatcher.add(board.threads[threadID]);
|
return ThreadWatcher.add(g.boards[board.ID].threads[threadID]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onIndexRefresh: function() {
|
onIndexRefresh: function() {
|
||||||
@ -10213,7 +10104,7 @@
|
|||||||
},
|
},
|
||||||
onThreadRefresh: function(e) {
|
onThreadRefresh: function(e) {
|
||||||
var thread;
|
var thread;
|
||||||
thread = e.detail.thread;
|
thread = g.threads[e.detail.thread.fullID];
|
||||||
if (!(e.detail[404] && ThreadWatcher.db.get({
|
if (!(e.detail[404] && ThreadWatcher.db.get({
|
||||||
boardID: thread.board.ID,
|
boardID: thread.board.ID,
|
||||||
threadID: thread.ID
|
threadID: thread.ID
|
||||||
@ -10440,7 +10331,7 @@
|
|||||||
entryEl = $.el('a', {
|
entryEl = $.el('a', {
|
||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: entryEl,
|
el: entryEl,
|
||||||
order: 60
|
order: 60
|
||||||
@ -10521,7 +10412,7 @@
|
|||||||
if (refresh) {
|
if (refresh) {
|
||||||
this.refreshers.push(refresh.bind(entry));
|
this.refreshers.push(refresh.bind(entry));
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
createSubEntry: function(name, desc) {
|
createSubEntry: function(name, desc) {
|
||||||
@ -10557,28 +10448,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var hr, name, _i, _len, _ref;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon'] && !Conf['Desktop Notifications']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Unread.db.disconnect();
|
|
||||||
if (hr = Unread.hr, Unread) {
|
|
||||||
$.rm(hr);
|
|
||||||
}
|
|
||||||
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost'];
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
name = _ref[_i];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
$.off(d, '4chanXInitFinished', this.ready);
|
|
||||||
$.off(d, 'ThreadUpdate', this.onUpdate);
|
|
||||||
$.off(d, 'scroll visibilitychange', this.read);
|
|
||||||
if (Conf['Unread Line'] && !Conf['Quote Threading']) {
|
|
||||||
$.off(d, 'visibilitychange', this.setLine);
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Unread');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
Unread.thread = this;
|
Unread.thread = this;
|
||||||
Unread.title = d.title;
|
Unread.title = d.title;
|
||||||
@ -10720,10 +10589,20 @@
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
|
var post;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
} else if (!QuoteThreading.enabled) {
|
} else if (!QuoteThreading.enabled) {
|
||||||
return Unread.addPosts(e.detail.newPosts);
|
return Unread.addPosts((function() {
|
||||||
|
var _i, _len, _ref, _results;
|
||||||
|
_ref = e.detail.newPosts;
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
post = _ref[_i];
|
||||||
|
_results.push(g.posts[post.fullID]);
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})());
|
||||||
} else {
|
} else {
|
||||||
Unread.read();
|
Unread.read();
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
@ -10942,7 +10821,7 @@
|
|||||||
return psa.hidden;
|
return psa.hidden;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
$.on(entry.el, 'click', PSAHiding.toggle);
|
$.on(entry.el, 'click', PSAHiding.toggle);
|
||||||
PSAHiding.btn = btn = $.el('span', {
|
PSAHiding.btn = btn = $.el('span', {
|
||||||
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
||||||
@ -11095,7 +10974,7 @@
|
|||||||
input = $('input', el);
|
input = $('input', el);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.sync('Header catalog links', CatalogLinks.set);
|
$.sync('Header catalog links', CatalogLinks.set);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 95
|
order: 95
|
||||||
@ -11593,7 +11472,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (board === 'sci') {
|
if (board === 'sci') {
|
||||||
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(e.detail);\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(document.getElementById(\'p\' + e.detail));\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
||||||
return Post.callbacks.push({
|
return Post.callbacks.push({
|
||||||
name: 'Parse /sci/ math',
|
name: 'Parse /sci/ math',
|
||||||
cb: this.math
|
cb: this.math
|
||||||
@ -11626,7 +11505,7 @@
|
|||||||
};
|
};
|
||||||
})(this)), (function(_this) {
|
})(this)), (function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
return $.event('jsmath', _this.nodes.post, window);
|
return $.event('jsmath', _this.ID, window);
|
||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
},
|
},
|
||||||
@ -12474,7 +12353,7 @@
|
|||||||
Settings.dialog = dialog = $.el('div', {
|
Settings.dialog = dialog = $.el('div', {
|
||||||
id: 'fourchanx-settings',
|
id: 'fourchanx-settings',
|
||||||
className: 'dialog',
|
className: '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.7.63</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.8.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>'
|
||||||
});
|
});
|
||||||
$.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"]);
|
||||||
@ -13176,7 +13055,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.on(d, 'AddCallback', Main.addCallback);
|
|
||||||
return $.ready(Main.initReady);
|
return $.ready(Main.initReady);
|
||||||
},
|
},
|
||||||
initStyle: function() {
|
initStyle: function() {
|
||||||
@ -13306,7 +13184,7 @@
|
|||||||
}
|
}
|
||||||
if (previousversion) {
|
if (previousversion) {
|
||||||
el = $.el('span', {
|
el = $.el('span', {
|
||||||
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.7.63</a>.'
|
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.8.0</a>.'
|
||||||
});
|
});
|
||||||
new Notice('info', el, 15);
|
new Notice('info', el, 15);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -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/crx.crx' version='1.7.63' />
|
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/crx.crx' version='1.8.0' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "4chan X",
|
"name": "4chan X",
|
||||||
"version": "1.7.63",
|
"version": "1.8.0",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||||
"icons": {
|
"icons": {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
// Generated by CoffeeScript
|
// Generated by CoffeeScript
|
||||||
/*
|
/*
|
||||||
* 4chan X - Version 1.7.63 - 2014-06-16
|
* 4chan X - Version 1.8.0 - 2014-06-18
|
||||||
*
|
*
|
||||||
* 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
|
||||||
@ -349,7 +349,7 @@
|
|||||||
doc = d.documentElement;
|
doc = d.documentElement;
|
||||||
|
|
||||||
g = {
|
g = {
|
||||||
VERSION: '1.7.63',
|
VERSION: '1.8.0',
|
||||||
NAMESPACE: '4chan X.',
|
NAMESPACE: '4chan X.',
|
||||||
boards: {}
|
boards: {}
|
||||||
};
|
};
|
||||||
@ -361,16 +361,6 @@
|
|||||||
return root.querySelector(selector);
|
return root.querySelector(selector);
|
||||||
};
|
};
|
||||||
|
|
||||||
$.extend = function(obj, prop) {
|
|
||||||
var key, val;
|
|
||||||
for (key in prop) {
|
|
||||||
val = prop[key];
|
|
||||||
if (prop.hasOwnProperty(key)) {
|
|
||||||
obj[key] = val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
$.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000)));
|
||||||
|
|
||||||
$.id = function(id) {
|
$.id = function(id) {
|
||||||
@ -875,36 +865,19 @@
|
|||||||
Callbacks.prototype.push = function(_arg) {
|
Callbacks.prototype.push = function(_arg) {
|
||||||
var cb, name;
|
var cb, name;
|
||||||
name = _arg.name, cb = _arg.cb;
|
name = _arg.name, cb = _arg.cb;
|
||||||
if (this[name]) {
|
|
||||||
this.connect(name);
|
|
||||||
}
|
|
||||||
if (!this[name]) {
|
if (!this[name]) {
|
||||||
this.keys.push(name);
|
this.keys.push(name);
|
||||||
}
|
}
|
||||||
return this[name] = cb;
|
return this[name] = cb;
|
||||||
};
|
};
|
||||||
|
|
||||||
Callbacks.prototype.connect = function(name) {
|
|
||||||
if (this[name].disconnected) {
|
|
||||||
return delete this[name].disconnected;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.disconnect = function(name) {
|
|
||||||
if (this[name]) {
|
|
||||||
return this[name].disconnected = true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Callbacks.prototype.execute = function(node) {
|
Callbacks.prototype.execute = function(node) {
|
||||||
var err, errors, name, _i, _len, _ref;
|
var err, errors, name, _i, _len, _ref;
|
||||||
_ref = this.keys;
|
_ref = this.keys;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
name = _ref[_i];
|
name = _ref[_i];
|
||||||
try {
|
try {
|
||||||
if (!this[name].disconnected) {
|
this[name].call(node);
|
||||||
this[name].call(node);
|
|
||||||
}
|
|
||||||
} catch (_error) {
|
} catch (_error) {
|
||||||
err = _error;
|
err = _error;
|
||||||
if (!errors) {
|
if (!errors) {
|
||||||
@ -1550,12 +1523,6 @@
|
|||||||
return typeof this.sync === "function" ? this.sync() : void 0;
|
return typeof this.sync === "function" ? this.sync() : void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
DataBoard.prototype.disconnect = function() {
|
|
||||||
$.desync(this.key);
|
|
||||||
delete this.sync;
|
|
||||||
return delete this.data;
|
|
||||||
};
|
|
||||||
|
|
||||||
return DataBoard;
|
return DataBoard;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
@ -1878,7 +1845,7 @@
|
|||||||
$.sync('Header auto-hide', this.setBarVisibility);
|
$.sync('Header auto-hide', this.setBarVisibility);
|
||||||
$.sync('Centered links', this.setLinkJustify);
|
$.sync('Centered links', this.setLinkJustify);
|
||||||
this.addShortcut(menuButton);
|
this.addShortcut(menuButton);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Header'
|
textContent: 'Header'
|
||||||
@ -2286,12 +2253,9 @@
|
|||||||
return Header.menu.toggle(e, this, g);
|
return Header.menu.toggle(e, this, g);
|
||||||
},
|
},
|
||||||
createNotification: function(e) {
|
createNotification: function(e) {
|
||||||
var cb, content, lifetime, notice, type, _ref;
|
var content, lifetime, notice, type, _ref;
|
||||||
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime, cb = _ref.cb;
|
_ref = e.detail, type = _ref.type, content = _ref.content, lifetime = _ref.lifetime;
|
||||||
notice = new Notice(type, content, lifetime);
|
return notice = new Notice(type, content, lifetime);
|
||||||
if (cb) {
|
|
||||||
return cb(notice);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
areNotificationsEnabled: false,
|
areNotificationsEnabled: false,
|
||||||
enableDesktopNotifications: function() {
|
enableDesktopNotifications: function() {
|
||||||
@ -2431,7 +2395,7 @@
|
|||||||
$.on(input, 'change', this.cb.sort);
|
$.on(input, 'change', this.cb.sort);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Index Navigation'
|
textContent: 'Index Navigation'
|
||||||
@ -2957,14 +2921,12 @@
|
|||||||
return nodes;
|
return nodes;
|
||||||
},
|
},
|
||||||
buildStructure: function(nodes) {
|
buildStructure: function(nodes) {
|
||||||
var i, node, result;
|
var node, _i, _len;
|
||||||
result = $.frag();
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
i = 0;
|
node = nodes[_i];
|
||||||
while (node = nodes[i++]) {
|
$.add(Index.root, [node, $.el('hr')]);
|
||||||
$.add(result, [node, $.el('hr')]);
|
|
||||||
}
|
}
|
||||||
$.event('IndexBuild', result.children);
|
return ThreadHiding.onIndexBuild(nodes);
|
||||||
return $.add(Index.root, result);
|
|
||||||
},
|
},
|
||||||
isSearching: false,
|
isSearching: false,
|
||||||
clearSearch: function() {
|
clearSearch: function() {
|
||||||
@ -3608,7 +3570,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
UI = (function() {
|
UI = (function() {
|
||||||
var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove;
|
var Menu, addMenuEntry, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, menus, rmMenuEntry, touchend, touchmove;
|
||||||
dialog = function(id, position, properties) {
|
dialog = function(id, position, properties) {
|
||||||
var child, el, move, _i, _len, _ref;
|
var child, el, move, _i, _len, _ref;
|
||||||
el = $.el('div', {
|
el = $.el('div', {
|
||||||
@ -3634,6 +3596,13 @@
|
|||||||
}
|
}
|
||||||
return el;
|
return el;
|
||||||
};
|
};
|
||||||
|
menus = {};
|
||||||
|
addMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
|
rmMenuEntry = function(entry) {
|
||||||
|
return menus[entry.type].addEntry(entry);
|
||||||
|
};
|
||||||
Menu = (function() {
|
Menu = (function() {
|
||||||
var currentMenu, lastToggledButton;
|
var currentMenu, lastToggledButton;
|
||||||
|
|
||||||
@ -3648,9 +3617,19 @@
|
|||||||
this.onFocus = __bind(this.onFocus, this);
|
this.onFocus = __bind(this.onFocus, this);
|
||||||
this.keybinds = __bind(this.keybinds, this);
|
this.keybinds = __bind(this.keybinds, this);
|
||||||
this.close = __bind(this.close, this);
|
this.close = __bind(this.close, this);
|
||||||
$.on(d, 'AddMenuEntry', this.addEntry);
|
$.on(d, 'AddMenuEntry', (function(_this) {
|
||||||
$.on(d, 'rmMenuEntry', this.rmEntry);
|
return function(_arg) {
|
||||||
|
var detail;
|
||||||
|
detail = _arg.detail;
|
||||||
|
if (detail.type !== _this.type) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
delete detail.open;
|
||||||
|
return _this.addEntry(detail);
|
||||||
|
};
|
||||||
|
})(this));
|
||||||
this.entries = [];
|
this.entries = [];
|
||||||
|
menus[this.type] = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu.prototype.makeMenu = function() {
|
Menu.prototype.makeMenu = function() {
|
||||||
@ -3841,22 +3820,13 @@
|
|||||||
return style.right = right;
|
return style.right = right;
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.addEntry = function(e) {
|
Menu.prototype.addEntry = function(entry) {
|
||||||
var entry;
|
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.parseEntry(entry);
|
this.parseEntry(entry);
|
||||||
return this.entries.push(entry);
|
return this.entries.push(entry);
|
||||||
};
|
};
|
||||||
|
|
||||||
Menu.prototype.rmEntry = function(e) {
|
Menu.prototype.rmEntry = function(entry) {
|
||||||
var entry, index;
|
var index;
|
||||||
entry = e.detail;
|
|
||||||
if (entry.type !== this.type) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
index = this.entries.indexOf(entry);
|
index = this.entries.indexOf(entry);
|
||||||
return this.entries.splice(index, 1);
|
return this.entries.splice(index, 1);
|
||||||
};
|
};
|
||||||
@ -4039,7 +4009,9 @@
|
|||||||
dialog: dialog,
|
dialog: dialog,
|
||||||
Menu: Menu,
|
Menu: Menu,
|
||||||
hover: hoverstart,
|
hover: hoverstart,
|
||||||
checkbox: checkbox
|
checkbox: checkbox,
|
||||||
|
addMenuEntry: addMenuEntry,
|
||||||
|
rmMenuEntry: rmMenuEntry
|
||||||
};
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
@ -4334,7 +4306,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el;
|
var el;
|
||||||
@ -4440,7 +4412,7 @@
|
|||||||
thisPost = UI.checkbox('thisPost', ' This post', true);
|
thisPost = UI.checkbox('thisPost', ' This post', true);
|
||||||
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
replies = UI.checkbox('replies', ' Hide replies', Conf['Recursive Hiding']);
|
||||||
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
makeStub = UI.checkbox('makeStub', ' Make stub', Conf['Stubs']);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4479,7 +4451,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', PostHiding.menu.hideStub);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4510,7 +4482,7 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -4748,7 +4720,6 @@
|
|||||||
}
|
}
|
||||||
this.db = new DataBoard('hiddenThreads');
|
this.db = new DataBoard('hiddenThreads');
|
||||||
this.syncCatalog();
|
this.syncCatalog();
|
||||||
$.on(d, 'IndexBuild', this.onIndexBuild);
|
|
||||||
return Thread.callbacks.push({
|
return Thread.callbacks.push({
|
||||||
name: 'Thread Hiding',
|
name: 'Thread Hiding',
|
||||||
cb: this.node
|
cb: this.node
|
||||||
@ -4767,16 +4738,12 @@
|
|||||||
}
|
}
|
||||||
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
return $.prepend(this.OP.nodes.root, ThreadHiding.makeButton(this, 'hide'));
|
||||||
},
|
},
|
||||||
onIndexBuild: function(_arg) {
|
onIndexBuild: function(nodes) {
|
||||||
var i, nodes, root, thread, _i, _len;
|
var root, thread, _i, _len;
|
||||||
nodes = _arg.detail;
|
for (_i = 0, _len = nodes.length; _i < _len; _i++) {
|
||||||
for (i = _i = 0, _len = nodes.length; _i < _len; i = _i += 2) {
|
root = nodes[_i];
|
||||||
root = nodes[i];
|
|
||||||
thread = Get.threadFromRoot(root);
|
thread = Get.threadFromRoot(root);
|
||||||
if (!thread.isHidden) {
|
if (thread.isHidden && thread.stub && !root.contains(thread.stub)) {
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (thread.stub && root.contains(thread.stub)) {
|
|
||||||
ThreadHiding.makeStub(thread, root);
|
ThreadHiding.makeStub(thread, root);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4847,7 +4814,7 @@
|
|||||||
});
|
});
|
||||||
$.on(apply, 'click', ThreadHiding.menu.hide);
|
$.on(apply, 'click', ThreadHiding.menu.hide);
|
||||||
makeStub = UI.checkbox('Stubs', ' Make stub');
|
makeStub = UI.checkbox('Stubs', ' Make stub');
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4874,7 +4841,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(div, 'click', ThreadHiding.menu.show);
|
$.on(div, 'click', ThreadHiding.menu.show);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 20,
|
order: 20,
|
||||||
@ -4893,7 +4860,7 @@
|
|||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
$.on(hideStubLink, 'click', ThreadHiding.menu.hideStub);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: hideStubLink,
|
el: hideStubLink,
|
||||||
order: 15,
|
order: 15,
|
||||||
@ -5421,7 +5388,7 @@
|
|||||||
});
|
});
|
||||||
input = $('input', this.controls);
|
input = $('input', this.controls);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: this.controls,
|
el: this.controls,
|
||||||
order: 98
|
order: 98
|
||||||
@ -5434,19 +5401,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var input;
|
|
||||||
if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
input = $('input', this.controls);
|
|
||||||
$.off(input, 'change', this.toggle);
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
delete this.enabled;
|
|
||||||
delete this.controls;
|
|
||||||
delete this.entry;
|
|
||||||
return Post.callbacks.disconnect('Quote Threading');
|
|
||||||
},
|
|
||||||
ready: function() {
|
ready: function() {
|
||||||
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
$.off(d, '4chanXInitFinished', QuoteThreading.ready);
|
||||||
return QuoteThreading.force();
|
return QuoteThreading.force();
|
||||||
@ -5849,16 +5803,6 @@
|
|||||||
$.prepend($('.navLinksBot'), linkBot);
|
$.prepend($('.navLinksBot'), linkBot);
|
||||||
}
|
}
|
||||||
$.before($.id('togglePostFormLink'), link);
|
$.before($.id('togglePostFormLink'), link);
|
||||||
$.on(d, 'QRGetSelectedPost', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return cb(QR.selected);
|
|
||||||
});
|
|
||||||
$.on(d, 'QRAddPreSubmitHook', function(_arg) {
|
|
||||||
var cb;
|
|
||||||
cb = _arg.detail;
|
|
||||||
return QR.preSubmitHooks.push(cb);
|
|
||||||
});
|
|
||||||
$.on(d, 'paste', QR.paste);
|
$.on(d, 'paste', QR.paste);
|
||||||
$.on(d, 'dragover', QR.dragOver);
|
$.on(d, 'dragover', QR.dragOver);
|
||||||
$.on(d, 'drop', QR.dropFile);
|
$.on(d, 'drop', QR.dropFile);
|
||||||
@ -6478,9 +6422,8 @@
|
|||||||
return $.add(nodes.form, flag);
|
return $.add(nodes.form, flag);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
preSubmitHooks: [],
|
|
||||||
submit: function(e) {
|
submit: function(e) {
|
||||||
var challenge, err, extra, filetag, formData, hook, options, post, response, textOnly, thread, threadID, _i, _len, _ref, _ref1;
|
var challenge, err, extra, filetag, formData, options, post, response, textOnly, thread, threadID, _ref;
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
@ -6513,17 +6456,9 @@
|
|||||||
err = 'No file selected.';
|
err = 'No file selected.';
|
||||||
} else if (post.file && thread.fileLimit) {
|
} else if (post.file && thread.fileLimit) {
|
||||||
err = 'Max limit of image replies has been reached.';
|
err = 'Max limit of image replies has been reached.';
|
||||||
} else {
|
|
||||||
_ref = QR.preSubmitHooks;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
hook = _ref[_i];
|
|
||||||
if (err = hook(post, thread)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (QR.captcha.isEnabled && !err) {
|
if (QR.captcha.isEnabled && !err) {
|
||||||
_ref1 = QR.captcha.getOne(), challenge = _ref1.challenge, response = _ref1.response;
|
_ref = QR.captcha.getOne(), challenge = _ref.challenge, response = _ref.response;
|
||||||
if (!response) {
|
if (!response) {
|
||||||
err = 'No valid captcha.';
|
err = 'No valid captcha.';
|
||||||
}
|
}
|
||||||
@ -6656,7 +6591,9 @@
|
|||||||
});
|
});
|
||||||
ThreadUpdater.postID = postID;
|
ThreadUpdater.postID = postID;
|
||||||
$.event('QRPostSuccessful', {
|
$.event('QRPostSuccessful', {
|
||||||
board: g.BOARD,
|
board: {
|
||||||
|
ID: g.BOARD.ID
|
||||||
|
},
|
||||||
threadID: threadID,
|
threadID: threadID,
|
||||||
postID: postID
|
postID: postID
|
||||||
});
|
});
|
||||||
@ -7277,8 +7214,7 @@
|
|||||||
rectEl = this.nodes.el.getBoundingClientRect();
|
rectEl = this.nodes.el.getBoundingClientRect();
|
||||||
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
rectList = this.nodes.el.parentNode.getBoundingClientRect();
|
||||||
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2;
|
||||||
this.load();
|
return this.load();
|
||||||
return $.event('QRPostSelection', this);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
_Class.prototype.load = function() {
|
_Class.prototype.load = function() {
|
||||||
@ -7550,7 +7486,7 @@
|
|||||||
el.title = "" + type + " Tyme";
|
el.title = "" + type + " Tyme";
|
||||||
FappeTyme[lc] = input = el.firstElementChild;
|
FappeTyme[lc] = input = el.firstElementChild;
|
||||||
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
$.on(input, 'change', FappeTyme.cb.toggle.bind(input));
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 97
|
order: 97
|
||||||
@ -7650,7 +7586,7 @@
|
|||||||
createSubEntry = Gallery.menu.createSubEntry;
|
createSubEntry = Gallery.menu.createSubEntry;
|
||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
el = createSubEntry(name).el;
|
el = createSubEntry(name).el;
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'gallery',
|
type: 'gallery',
|
||||||
el: el,
|
el: el,
|
||||||
order: 0
|
order: 0
|
||||||
@ -7885,7 +7821,7 @@
|
|||||||
for (name in Config.gallery) {
|
for (name in Config.gallery) {
|
||||||
subEntries.push(createSubEntry(name));
|
subEntries.push(createSubEntry(name));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8219,7 +8155,7 @@
|
|||||||
conf = _ref[name];
|
conf = _ref[name];
|
||||||
subEntries.push(createSubEntry(name, conf[1]));
|
subEntries.push(createSubEntry(name, conf[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 105,
|
order: 105,
|
||||||
@ -8381,7 +8317,7 @@
|
|||||||
});
|
});
|
||||||
this.el = prefetch.firstElementChild;
|
this.el = prefetch.firstElementChild;
|
||||||
$.on(this.el, 'change', this.toggle);
|
$.on(this.el, 'change', this.toggle);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: prefetch,
|
el: prefetch,
|
||||||
order: 104
|
order: 104
|
||||||
@ -9158,7 +9094,7 @@
|
|||||||
type = _ref[_i];
|
type = _ref[_i];
|
||||||
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
entry.subEntries.push(this.createSubEntry(type[0], type[1]));
|
||||||
}
|
}
|
||||||
return $.event('AddMenuEntry', entry);
|
return UI.addMenuEntry(entry);
|
||||||
},
|
},
|
||||||
createSubEntry: function(text, type) {
|
createSubEntry: function(text, type) {
|
||||||
var el, open;
|
var el, open;
|
||||||
@ -9235,7 +9171,7 @@
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: div,
|
el: div,
|
||||||
order: 40,
|
order: 40,
|
||||||
@ -9360,7 +9296,7 @@
|
|||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
});
|
});
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 100,
|
order: 100,
|
||||||
@ -9429,7 +9365,7 @@
|
|||||||
textContent: 'Report this post'
|
textContent: 'Report this post'
|
||||||
});
|
});
|
||||||
$.on(a, 'click', ReportLink.report);
|
$.on(a, 'click', ReportLink.report);
|
||||||
return $.event('AddMenuEntry', {
|
return UI.addMenuEntry({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
el: a,
|
el: a,
|
||||||
order: 10,
|
order: 10,
|
||||||
@ -9507,12 +9443,6 @@
|
|||||||
},
|
},
|
||||||
node: function() {
|
node: function() {
|
||||||
return d.title = Get.threadExcerpt(this);
|
return d.title = Get.threadExcerpt(this);
|
||||||
},
|
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Excerpt');
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9564,25 +9494,6 @@
|
|||||||
ThreadStats.update(postCount, fileCount);
|
ThreadStats.update(postCount, fileCount);
|
||||||
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
clearTimeout(this.timeout);
|
|
||||||
delete this.timeout;
|
|
||||||
delete this.thread;
|
|
||||||
delete this.postCountEl;
|
|
||||||
delete this.fileCountEl;
|
|
||||||
delete this.pageCountEl;
|
|
||||||
delete this.dialog;
|
|
||||||
Thread.callbacks.disconnect('Thread Stats');
|
|
||||||
return $.off(d, 'ThreadUpdate', ThreadStats.onUpdate);
|
|
||||||
},
|
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
var fileCount, postCount, _ref;
|
var fileCount, postCount, _ref;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
@ -9702,7 +9613,7 @@
|
|||||||
subEntries.push({
|
subEntries.push({
|
||||||
el: this.settings
|
el: this.settings
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', this.entry = {
|
UI.addMenuEntry(this.entry = {
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: $.el('span', {
|
el: $.el('span', {
|
||||||
textContent: 'Updater'
|
textContent: 'Updater'
|
||||||
@ -9715,45 +9626,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var el, entry, input, name, _i, _j, _len, _len1, _ref, _ref1;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Thread Updater']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$.off(this.timer, 'click', this.update);
|
|
||||||
$.off(this.status, 'click', this.update);
|
|
||||||
if (this.timeoutID) {
|
|
||||||
clearTimeout(this.timeoutID);
|
|
||||||
}
|
|
||||||
_ref = this.entry.subEntries;
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
entry = _ref[_i];
|
|
||||||
el = entry.el;
|
|
||||||
input = el.firstElementChild;
|
|
||||||
$.off(input, 'change', $.cb.checked);
|
|
||||||
$.off(input, 'change', this.cb.scrollBG);
|
|
||||||
$.off(input, 'change', this.cb.update);
|
|
||||||
}
|
|
||||||
$.off(this.settings, 'click', this.intervalShortcut);
|
|
||||||
$.off(window, 'online offline', this.cb.online);
|
|
||||||
$.off(d, 'QRPostSuccessful', this.cb.checkpost);
|
|
||||||
$.off(d, 'visibilitychange', this.cb.visibility);
|
|
||||||
this.set('timer', null);
|
|
||||||
this.set('status', 'Offline');
|
|
||||||
$.event('rmMenuEntry', this.entry);
|
|
||||||
if (Conf['Updater and Stats in Header']) {
|
|
||||||
Header.rmShortcut(this.dialog);
|
|
||||||
} else {
|
|
||||||
$.rmClass(doc, 'float');
|
|
||||||
$.rm(this.dialog);
|
|
||||||
}
|
|
||||||
_ref1 = ['checkPostCount', 'timer', 'status', 'isUpdating', 'entry', 'dialog', 'thread', 'root', 'lastPost', 'outdateCount', 'online', 'seconds', 'timeoutID'];
|
|
||||||
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
|
||||||
name = _ref1[_j];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Thread Updater');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
ThreadUpdater.thread = this;
|
ThreadUpdater.thread = this;
|
||||||
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
ThreadUpdater.root = this.OP.nodes.root.parentNode;
|
||||||
@ -9852,7 +9724,9 @@
|
|||||||
ThreadUpdater.thread.kill();
|
ThreadUpdater.thread.kill();
|
||||||
$.event('ThreadUpdate', {
|
$.event('ThreadUpdate', {
|
||||||
404: true,
|
404: true,
|
||||||
thread: ThreadUpdater.thread
|
thread: {
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
}
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -9978,12 +9852,18 @@
|
|||||||
ID = +post.ID;
|
ID = +post.ID;
|
||||||
if (__indexOf.call(index, ID) < 0) {
|
if (__indexOf.call(index, ID) < 0) {
|
||||||
post.kill();
|
post.kill();
|
||||||
deletedPosts.push(post);
|
deletedPosts.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
} else if (post.isDead) {
|
} else if (post.isDead) {
|
||||||
post.resurrect();
|
post.resurrect();
|
||||||
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
} else if (post.file && !(post.file.isDead || __indexOf.call(files, ID) >= 0)) {
|
||||||
post.kill(true);
|
post.kill(true);
|
||||||
deletedFiles.push(post);
|
deletedFiles.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
if (ThreadUpdater.postID && ThreadUpdater.postID === ID) {
|
||||||
return ThreadUpdater.foundPost = true;
|
return ThreadUpdater.foundPost = true;
|
||||||
@ -10035,8 +9915,22 @@
|
|||||||
}
|
}
|
||||||
return $.event('ThreadUpdate', {
|
return $.event('ThreadUpdate', {
|
||||||
404: false,
|
404: false,
|
||||||
thread: ThreadUpdater.thread,
|
thread: {
|
||||||
newPosts: posts,
|
ID: ThreadUpdater.thread.ID,
|
||||||
|
fullID: ThreadUpdater.thread.fullID
|
||||||
|
},
|
||||||
|
newPosts: (function() {
|
||||||
|
var _k, _len2, _results;
|
||||||
|
_results = [];
|
||||||
|
for (_k = 0, _len2 = posts.length; _k < _len2; _k++) {
|
||||||
|
post = posts[_k];
|
||||||
|
_results.push({
|
||||||
|
ID: post.ID,
|
||||||
|
fullID: post.fullID
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})(),
|
||||||
deletedPosts: deletedPosts,
|
deletedPosts: deletedPosts,
|
||||||
deletedFiles: deletedFiles,
|
deletedFiles: deletedFiles,
|
||||||
postCount: OP.replies + 1,
|
postCount: OP.replies + 1,
|
||||||
@ -10065,9 +9959,6 @@
|
|||||||
this.status = $('#watcher-status', this.dialog);
|
this.status = $('#watcher-status', this.dialog);
|
||||||
this.list = this.dialog.lastElementChild;
|
this.list = this.dialog.lastElementChild;
|
||||||
$.on(d, 'QRPostSuccessful', this.cb.post);
|
$.on(d, 'QRPostSuccessful', this.cb.post);
|
||||||
if (g.VIEW === 'thread') {
|
|
||||||
$.on(d, 'ThreadUpdate', this.cb.threadUpdate);
|
|
||||||
}
|
|
||||||
$.on(sc, 'click', this.toggleWatcher);
|
$.on(sc, 'click', this.toggleWatcher);
|
||||||
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
|
||||||
$.on(d, '4chanXInitFinished', this.ready);
|
$.on(d, '4chanXInitFinished', this.ready);
|
||||||
@ -10183,7 +10074,7 @@
|
|||||||
return $.set('AutoWatch', threadID);
|
return $.set('AutoWatch', threadID);
|
||||||
}
|
}
|
||||||
} else if (Conf['Auto Watch Reply']) {
|
} else if (Conf['Auto Watch Reply']) {
|
||||||
return ThreadWatcher.add(board.threads[threadID]);
|
return ThreadWatcher.add(g.boards[board.ID].threads[threadID]);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onIndexRefresh: function() {
|
onIndexRefresh: function() {
|
||||||
@ -10213,7 +10104,7 @@
|
|||||||
},
|
},
|
||||||
onThreadRefresh: function(e) {
|
onThreadRefresh: function(e) {
|
||||||
var thread;
|
var thread;
|
||||||
thread = e.detail.thread;
|
thread = g.threads[e.detail.thread.fullID];
|
||||||
if (!(e.detail[404] && ThreadWatcher.db.get({
|
if (!(e.detail[404] && ThreadWatcher.db.get({
|
||||||
boardID: thread.board.ID,
|
boardID: thread.board.ID,
|
||||||
threadID: thread.ID
|
threadID: thread.ID
|
||||||
@ -10440,7 +10331,7 @@
|
|||||||
entryEl = $.el('a', {
|
entryEl = $.el('a', {
|
||||||
href: 'javascript:;'
|
href: 'javascript:;'
|
||||||
});
|
});
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: entryEl,
|
el: entryEl,
|
||||||
order: 60
|
order: 60
|
||||||
@ -10521,7 +10412,7 @@
|
|||||||
if (refresh) {
|
if (refresh) {
|
||||||
this.refreshers.push(refresh.bind(entry));
|
this.refreshers.push(refresh.bind(entry));
|
||||||
}
|
}
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
createSubEntry: function(name, desc) {
|
createSubEntry: function(name, desc) {
|
||||||
@ -10557,28 +10448,6 @@
|
|||||||
cb: this.node
|
cb: this.node
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
disconnect: function() {
|
|
||||||
var hr, name, _i, _len, _ref;
|
|
||||||
if (g.VIEW !== 'thread' || !Conf['Unread Count'] && !Conf['Unread Favicon'] && !Conf['Desktop Notifications']) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Unread.db.disconnect();
|
|
||||||
if (hr = Unread.hr, Unread) {
|
|
||||||
$.rm(hr);
|
|
||||||
}
|
|
||||||
_ref = ['db', 'hr', 'posts', 'postsQuotingYou', 'thread', 'title', 'lastReadPost'];
|
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
||||||
name = _ref[_i];
|
|
||||||
delete this[name];
|
|
||||||
}
|
|
||||||
$.off(d, '4chanXInitFinished', this.ready);
|
|
||||||
$.off(d, 'ThreadUpdate', this.onUpdate);
|
|
||||||
$.off(d, 'scroll visibilitychange', this.read);
|
|
||||||
if (Conf['Unread Line'] && !Conf['Quote Threading']) {
|
|
||||||
$.off(d, 'visibilitychange', this.setLine);
|
|
||||||
}
|
|
||||||
return Thread.callbacks.disconnect('Unread');
|
|
||||||
},
|
|
||||||
node: function() {
|
node: function() {
|
||||||
Unread.thread = this;
|
Unread.thread = this;
|
||||||
Unread.title = d.title;
|
Unread.title = d.title;
|
||||||
@ -10720,10 +10589,20 @@
|
|||||||
};
|
};
|
||||||
},
|
},
|
||||||
onUpdate: function(e) {
|
onUpdate: function(e) {
|
||||||
|
var post;
|
||||||
if (e.detail[404]) {
|
if (e.detail[404]) {
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
} else if (!QuoteThreading.enabled) {
|
} else if (!QuoteThreading.enabled) {
|
||||||
return Unread.addPosts(e.detail.newPosts);
|
return Unread.addPosts((function() {
|
||||||
|
var _i, _len, _ref, _results;
|
||||||
|
_ref = e.detail.newPosts;
|
||||||
|
_results = [];
|
||||||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||||
|
post = _ref[_i];
|
||||||
|
_results.push(g.posts[post.fullID]);
|
||||||
|
}
|
||||||
|
return _results;
|
||||||
|
})());
|
||||||
} else {
|
} else {
|
||||||
Unread.read();
|
Unread.read();
|
||||||
return Unread.update();
|
return Unread.update();
|
||||||
@ -10942,7 +10821,7 @@
|
|||||||
return psa.hidden;
|
return psa.hidden;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
$.event('AddMenuEntry', entry);
|
UI.addMenuEntry(entry);
|
||||||
$.on(entry.el, 'click', PSAHiding.toggle);
|
$.on(entry.el, 'click', PSAHiding.toggle);
|
||||||
PSAHiding.btn = btn = $.el('span', {
|
PSAHiding.btn = btn = $.el('span', {
|
||||||
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
innerHTML: '[<a href="javascript:;">Dismiss</a>]',
|
||||||
@ -11095,7 +10974,7 @@
|
|||||||
input = $('input', el);
|
input = $('input', el);
|
||||||
$.on(input, 'change', this.toggle);
|
$.on(input, 'change', this.toggle);
|
||||||
$.sync('Header catalog links', CatalogLinks.set);
|
$.sync('Header catalog links', CatalogLinks.set);
|
||||||
$.event('AddMenuEntry', {
|
UI.addMenuEntry({
|
||||||
type: 'header',
|
type: 'header',
|
||||||
el: el,
|
el: el,
|
||||||
order: 95
|
order: 95
|
||||||
@ -11593,7 +11472,7 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (board === 'sci') {
|
if (board === 'sci') {
|
||||||
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(e.detail);\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
$.globalEval('window.addEventListener(\'jsmath\', function(e) {\n if (!jsMath) return;\n if (jsMath.loaded) {\n // process one post\n jsMath.ProcessBeforeShowing(document.getElementById(\'p\' + e.detail));\n } else if (jsMath.Autoload && jsMath.Autoload.checked) {\n // load jsMath and process whole document\n jsMath.Autoload.Script.Push(\'ProcessBeforeShowing\', [null]);\n jsMath.Autoload.LoadJsMath();\n }\n}, false);');
|
||||||
return Post.callbacks.push({
|
return Post.callbacks.push({
|
||||||
name: 'Parse /sci/ math',
|
name: 'Parse /sci/ math',
|
||||||
cb: this.math
|
cb: this.math
|
||||||
@ -11626,7 +11505,7 @@
|
|||||||
};
|
};
|
||||||
})(this)), (function(_this) {
|
})(this)), (function(_this) {
|
||||||
return function() {
|
return function() {
|
||||||
return $.event('jsmath', _this.nodes.post, window);
|
return $.event('jsmath', _this.ID, window);
|
||||||
};
|
};
|
||||||
})(this));
|
})(this));
|
||||||
},
|
},
|
||||||
@ -12474,7 +12353,7 @@
|
|||||||
Settings.dialog = dialog = $.el('div', {
|
Settings.dialog = dialog = $.el('div', {
|
||||||
id: 'fourchanx-settings',
|
id: 'fourchanx-settings',
|
||||||
className: 'dialog',
|
className: '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.7.63</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.8.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>'
|
||||||
});
|
});
|
||||||
$.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"]);
|
||||||
@ -13176,7 +13055,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.on(d, 'AddCallback', Main.addCallback);
|
|
||||||
return $.ready(Main.initReady);
|
return $.ready(Main.initReady);
|
||||||
},
|
},
|
||||||
initStyle: function() {
|
initStyle: function() {
|
||||||
@ -13306,7 +13184,7 @@
|
|||||||
}
|
}
|
||||||
if (previousversion) {
|
if (previousversion) {
|
||||||
el = $.el('span', {
|
el = $.el('span', {
|
||||||
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.7.63</a>.'
|
innerHTML: '4chan X has been updated to <a href="https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md" target="_blank">version 1.8.0</a>.'
|
||||||
});
|
});
|
||||||
new Notice('info', el, 15);
|
new Notice('info', el, 15);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "4chan-X",
|
"name": "4chan-X",
|
||||||
"version": "1.7.63",
|
"version": "1.8.0",
|
||||||
"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",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user