Merge branch 'master' into next
This commit is contained in:
commit
a84fb59723
42
CHANGELOG.md
42
CHANGELOG.md
@ -4,6 +4,32 @@
|
|||||||
|
|
||||||
## v1.13.0
|
## v1.13.0
|
||||||
|
|
||||||
|
**v1.13.0.17** *(2016-10-30)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.17/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.17/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Various regression and bug fixes.
|
||||||
|
|
||||||
|
**v1.13.0.16** *(2016-10-27)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.16/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.16/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Merge v1.12.3.11: Update due to 4chan's ad changes, part two.
|
||||||
|
|
||||||
|
**v1.13.0.15** *(2016-10-27)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.15/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.15/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Merge v1.12.3.10: Update due to 4chan's ad changes.
|
||||||
|
|
||||||
|
**v1.13.0.14** *(2016-10-23)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.14/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.14/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Fix bug from v1.13.0.3 causing index/catalog search to not search comment.
|
||||||
|
|
||||||
|
**v1.13.0.13** *(2016-10-15)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.13/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.13/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Add styling guide link to custom CSS section.
|
||||||
|
- Add basic support for is.4chan.org domain.
|
||||||
|
|
||||||
|
**v1.13.0.12** *(2016-10-14)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.12/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.12/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Switch back to using `border` rather than `outline` for highlighting watched threads in catalog.
|
||||||
|
- Restore hiding of extra linebreaks in catalog. Show them at reduced height on hover.
|
||||||
|
|
||||||
|
**v1.13.0.11** *(2016-10-13)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.11/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.11/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Merge v1.12.3.8: Don't run 4chan X on the donation or advertisement purchase pages (it already didn't run on the pass purchase page).
|
||||||
|
|
||||||
|
**v1.13.0.10** *(2016-10-09)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.10/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.10/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Merge v1.12.3.7: Workaround for problem on 4chan's end with images not loading.
|
||||||
|
|
||||||
**v1.13.0.9** *(2016-10-09)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.9/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.9/builds/4chan-X-noupdate.crx)]
|
**v1.13.0.9** *(2016-10-09)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.9/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.13.0.9/builds/4chan-X-noupdate.crx)]
|
||||||
- Fix bug from v1.13.0.0 that broke Quote Inlining / Previewing of OPs on /f/.
|
- Fix bug from v1.13.0.0 that broke Quote Inlining / Previewing of OPs on /f/.
|
||||||
|
|
||||||
@ -60,6 +86,22 @@
|
|||||||
|
|
||||||
### v1.12.3
|
### v1.12.3
|
||||||
|
|
||||||
|
**v1.12.3.11** *(2016-10-27)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.11/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.11/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Update due to 4chan's ad changes, part two.
|
||||||
|
|
||||||
|
**v1.12.3.10** *(2016-10-27)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.10/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.10/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Update due to 4chan's ad changes.
|
||||||
|
|
||||||
|
**v1.12.3.9** *(2016-10-18)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.9/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.9/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Add basic support for is.4chan.org domain.
|
||||||
|
|
||||||
|
**v1.12.3.8** *(2016-10-13)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.8/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.8/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Don't run 4chan X on the donation or advertisement purchase pages (it already didn't run on the pass purchase page).
|
||||||
|
|
||||||
|
**v1.12.3.7** *(2016-10-09)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.7/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.7/builds/4chan-X-noupdate.crx)]
|
||||||
|
- Workaround for problem on 4chan's end with images not loading.
|
||||||
|
- The error messages displayed when the Chrome extension updates but the tab has not been reloaded have been replaced with a single warning message asking you to reload the tab.
|
||||||
|
|
||||||
**v1.12.3.6** *(2016-10-03)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.6/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.6/builds/4chan-X-noupdate.crx)]
|
**v1.12.3.6** *(2016-10-03)* - [[Userscript](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.6/builds/4chan-X-noupdate.user.js)] [[Chrome extension](https://raw.githubusercontent.com/ccd0/4chan-x/1.12.3.6/builds/4chan-X-noupdate.crx)]
|
||||||
- Add `Pass Date` to filterable items.
|
- Add `Pass Date` to filterable items.
|
||||||
- Show Pass flair in posts constructed from JSON.
|
- Show Pass flair in posts constructed from JSON.
|
||||||
|
|||||||
@ -29,7 +29,7 @@ If you're reporting a bug, the more detail you can give, the better. If I can't
|
|||||||
|
|
||||||
- 4chan X is mostly written in [CoffeeScript](http://coffeescript.org/). If you're already familiar with Javascript, it doesn't take long to pick up.
|
- 4chan X is mostly written in [CoffeeScript](http://coffeescript.org/). If you're already familiar with Javascript, it doesn't take long to pick up.
|
||||||
- Edit the sources in the src/ directory (not the compiled scripts in builds/).
|
- Edit the sources in the src/ directory (not the compiled scripts in builds/).
|
||||||
- Compile the script with: `grunt`
|
- Compile the script with: `make` (this should fetch needed dependencies automatically; if not, do an `npm install` first)
|
||||||
- Install the compiled script (found in the testbuilds/ directory), and test your changes.
|
- Install the compiled script (found in the testbuilds/ directory), and test your changes.
|
||||||
- Make sure you have set your name and email as you want them, as they will be published in your commit message:<br>`git config user.name yourname`<br>`git config user.email youremail`
|
- Make sure you have set your name and email as you want them, as they will be published in your commit message:<br>`git config user.name yourname`<br>`git config user.email youremail`
|
||||||
- Commit your changes: `git commit -a`
|
- Commit your changes: `git commit -a`
|
||||||
|
|||||||
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X beta
|
// @name 4chan X beta
|
||||||
// @version 1.13.0.9
|
// @version 1.13.0.17
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -14,6 +14,8 @@
|
|||||||
// @include https://www.4chan.org/*
|
// @include https://www.4chan.org/*
|
||||||
// @include http://i.4cdn.org/*
|
// @include http://i.4cdn.org/*
|
||||||
// @include https://i.4cdn.org/*
|
// @include https://i.4cdn.org/*
|
||||||
|
// @include http://is.4chan.org/*
|
||||||
|
// @include https://is.4chan.org/*
|
||||||
// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
@ -22,7 +24,16 @@
|
|||||||
// @exclude https://www.4chan.org/pass
|
// @exclude https://www.4chan.org/pass
|
||||||
// @exclude http://www.4chan.org/pass?*
|
// @exclude http://www.4chan.org/pass?*
|
||||||
// @exclude https://www.4chan.org/pass?*
|
// @exclude https://www.4chan.org/pass?*
|
||||||
|
// @exclude http://www.4chan.org/advertise
|
||||||
|
// @exclude https://www.4chan.org/advertise
|
||||||
|
// @exclude http://www.4chan.org/advertise?*
|
||||||
|
// @exclude https://www.4chan.org/advertise?*
|
||||||
|
// @exclude http://www.4chan.org/donate
|
||||||
|
// @exclude https://www.4chan.org/donate
|
||||||
|
// @exclude http://www.4chan.org/donate?*
|
||||||
|
// @exclude https://www.4chan.org/donate?*
|
||||||
// @connect i.4cdn.org
|
// @connect i.4cdn.org
|
||||||
|
// @connect is.4chan.org
|
||||||
// @connect *
|
// @connect *
|
||||||
// @grant GM_getValue
|
// @grant GM_getValue
|
||||||
// @grant GM_setValue
|
// @grant GM_setValue
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
// ==UserScript==
|
// ==UserScript==
|
||||||
// @name 4chan X
|
// @name 4chan X
|
||||||
// @version 1.13.0.9
|
// @version 1.13.0.17
|
||||||
// @minGMVer 1.14
|
// @minGMVer 1.14
|
||||||
// @minFFVer 26
|
// @minFFVer 26
|
||||||
// @namespace 4chan-X
|
// @namespace 4chan-X
|
||||||
@ -14,6 +14,8 @@
|
|||||||
// @include https://www.4chan.org/*
|
// @include https://www.4chan.org/*
|
||||||
// @include http://i.4cdn.org/*
|
// @include http://i.4cdn.org/*
|
||||||
// @include https://i.4cdn.org/*
|
// @include https://i.4cdn.org/*
|
||||||
|
// @include http://is.4chan.org/*
|
||||||
|
// @include https://is.4chan.org/*
|
||||||
// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
// @include http://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*
|
||||||
@ -22,7 +24,16 @@
|
|||||||
// @exclude https://www.4chan.org/pass
|
// @exclude https://www.4chan.org/pass
|
||||||
// @exclude http://www.4chan.org/pass?*
|
// @exclude http://www.4chan.org/pass?*
|
||||||
// @exclude https://www.4chan.org/pass?*
|
// @exclude https://www.4chan.org/pass?*
|
||||||
|
// @exclude http://www.4chan.org/advertise
|
||||||
|
// @exclude https://www.4chan.org/advertise
|
||||||
|
// @exclude http://www.4chan.org/advertise?*
|
||||||
|
// @exclude https://www.4chan.org/advertise?*
|
||||||
|
// @exclude http://www.4chan.org/donate
|
||||||
|
// @exclude https://www.4chan.org/donate
|
||||||
|
// @exclude http://www.4chan.org/donate?*
|
||||||
|
// @exclude https://www.4chan.org/donate?*
|
||||||
// @connect i.4cdn.org
|
// @connect i.4cdn.org
|
||||||
|
// @connect is.4chan.org
|
||||||
// @connect *
|
// @connect *
|
||||||
// @grant GM_getValue
|
// @grant GM_getValue
|
||||||
// @grant GM_setValue
|
// @grant GM_setValue
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.13.0.9' />
|
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.13.0.17' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||||
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.13.0.9' />
|
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.13.0.17' />
|
||||||
</app>
|
</app>
|
||||||
</gupdate>
|
</gupdate>
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
"downloads": "https://www.4chan-x.net/builds/",
|
"downloads": "https://www.4chan-x.net/builds/",
|
||||||
"oldVersions": "https://raw.githubusercontent.com/ccd0/4chan-x/",
|
"oldVersions": "https://raw.githubusercontent.com/ccd0/4chan-x/",
|
||||||
"faq": "https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions",
|
"faq": "https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions",
|
||||||
|
"cssGuide": "https://github.com/ccd0/4chan-x/wiki/Styling-Guide",
|
||||||
"license": "https://github.com/ccd0/4chan-x/blob/master/LICENSE",
|
"license": "https://github.com/ccd0/4chan-x/blob/master/LICENSE",
|
||||||
"changelog": "https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md",
|
"changelog": "https://github.com/ccd0/4chan-x/blob/master/CHANGELOG.md",
|
||||||
"issues": "https://gitreports.com/issue/ccd0/4chan-x",
|
"issues": "https://gitreports.com/issue/ccd0/4chan-x",
|
||||||
@ -25,13 +26,18 @@
|
|||||||
"*://sys.4chan.org/*",
|
"*://sys.4chan.org/*",
|
||||||
"*://www.4chan.org/*",
|
"*://www.4chan.org/*",
|
||||||
"*://i.4cdn.org/*",
|
"*://i.4cdn.org/*",
|
||||||
|
"*://is.4chan.org/*",
|
||||||
"https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*",
|
"https://www.google.com/recaptcha/api2/anchor?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*",
|
||||||
"https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*",
|
"https://www.google.com/recaptcha/api2/frame?*&k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*",
|
||||||
"*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*"
|
"*://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc*"
|
||||||
],
|
],
|
||||||
"exclude_matches": [
|
"exclude_matches": [
|
||||||
"*://www.4chan.org/pass",
|
"*://www.4chan.org/pass",
|
||||||
"*://www.4chan.org/pass?*"
|
"*://www.4chan.org/pass?*",
|
||||||
|
"*://www.4chan.org/advertise",
|
||||||
|
"*://www.4chan.org/advertise?*",
|
||||||
|
"*://www.4chan.org/donate",
|
||||||
|
"*://www.4chan.org/donate?*"
|
||||||
],
|
],
|
||||||
"grants": [
|
"grants": [
|
||||||
"GM_getValue",
|
"GM_getValue",
|
||||||
|
|||||||
@ -220,6 +220,9 @@ Build =
|
|||||||
container = $.el 'div', <%= readHTML('CatalogThread.html') %>
|
container = $.el 'div', <%= readHTML('CatalogThread.html') %>
|
||||||
$.before thread.OP.nodes.info, [container.childNodes...]
|
$.before thread.OP.nodes.info, [container.childNodes...]
|
||||||
|
|
||||||
|
for br in $$('br', thread.OP.nodes.comment) when br.previousSibling and br.previousSibling.nodeName is 'BR'
|
||||||
|
$.addClass br, 'extra-linebreak'
|
||||||
|
|
||||||
root = $.el 'div',
|
root = $.el 'div',
|
||||||
className: 'thread catalog-thread'
|
className: 'thread catalog-thread'
|
||||||
id: "t#{thread}"
|
id: "t#{thread}"
|
||||||
|
|||||||
@ -763,6 +763,7 @@ Index =
|
|||||||
when 'birth' then [liveThreadIDs... ].sort (a, b) -> b - a
|
when 'birth' then [liveThreadIDs... ].sort (a, b) -> b - a
|
||||||
when 'replycount' then [liveThreadData...].sort((a, b) -> b.replies - a.replies).map (post) -> post.no
|
when 'replycount' then [liveThreadData...].sort((a, b) -> b.replies - a.replies).map (post) -> post.no
|
||||||
when 'filecount' then [liveThreadData...].sort((a, b) -> b.images - a.images ).map (post) -> post.no
|
when 'filecount' then [liveThreadData...].sort((a, b) -> b.images - a.images ).map (post) -> post.no
|
||||||
|
else liveThreadIDs
|
||||||
if Index.search and (threadIDs = Index.querySearch Index.search)
|
if Index.search and (threadIDs = Index.querySearch Index.search)
|
||||||
Index.sortedThreadIDs = threadIDs
|
Index.sortedThreadIDs = threadIDs
|
||||||
# Sticky threads
|
# Sticky threads
|
||||||
@ -874,6 +875,7 @@ Index =
|
|||||||
|
|
||||||
searchMatch: (obj, keywords) ->
|
searchMatch: (obj, keywords) ->
|
||||||
{info, file} = obj
|
{info, file} = obj
|
||||||
|
info.comment ?= Build.parseComment info.commentHTML.innerHTML
|
||||||
text = []
|
text = []
|
||||||
for key in ['comment', 'subject', 'name', 'tripcode']
|
for key in ['comment', 'subject', 'name', 'tripcode']
|
||||||
text.push info[key] if key of info
|
text.push info[key] if key of info
|
||||||
|
|||||||
@ -113,7 +113,7 @@ Settings =
|
|||||||
Enable it on boards.4chan.org in your browser's privacy settings (may be listed as part of "local data" or "cookies").
|
Enable it on boards.4chan.org in your browser's privacy settings (may be listed as part of "local data" or "cookies").
|
||||||
"""
|
"""
|
||||||
ads: (cb) ->
|
ads: (cb) ->
|
||||||
$.onExists doc, '.ad-cnt', (ad) -> $.onExists ad, 'img', ->
|
$.onExists doc, '.ad-cnt, .adg-rects', (ad) -> $.onExists ad, 'img, iframe', ->
|
||||||
url = Redirect.to 'thread', {boardID: 'qa', threadID: 362590}
|
url = Redirect.to 'thread', {boardID: 'qa', threadID: 362590}
|
||||||
cb $.el 'li',
|
cb $.el 'li',
|
||||||
<%= html(
|
<%= html(
|
||||||
|
|||||||
@ -137,6 +137,7 @@
|
|||||||
<legend>
|
<legend>
|
||||||
<label><input type="checkbox" name="Custom CSS"> Custom CSS</label>
|
<label><input type="checkbox" name="Custom CSS"> Custom CSS</label>
|
||||||
</legend>
|
</legend>
|
||||||
|
<div>For more information about customizing 4chan X's CSS, see the <a href="<%= meta.cssGuide %>" target="_blank">styling guide</a>.</div>
|
||||||
<button id="apply-css">Apply CSS</button>
|
<button id="apply-css">Apply CSS</button>
|
||||||
<textarea name="usercss" class="field" spellcheck="false"></textarea>
|
<textarea name="usercss" class="field" spellcheck="false"></textarea>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|||||||
@ -14,7 +14,7 @@ Linkify =
|
|||||||
node: ->
|
node: ->
|
||||||
return Embedding.events @ if @isClone
|
return Embedding.events @ if @isClone
|
||||||
return unless Linkify.regString.test @info.comment
|
return unless Linkify.regString.test @info.comment
|
||||||
for link in $$ 'a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"]', @nodes.comment
|
for link in $$ 'a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"], a[href^="http://is.4chan.org/"], a[href^="https://is.4chan.org/"]', @nodes.comment
|
||||||
$.addClass link, 'linkify'
|
$.addClass link, 'linkify'
|
||||||
Embedding.process link, @
|
Embedding.process link, @
|
||||||
links = Linkify.process @nodes.comment
|
links = Linkify.process @nodes.comment
|
||||||
|
|||||||
@ -231,12 +231,7 @@ Unread =
|
|||||||
Unread.title
|
Unread.title
|
||||||
d.title = "#{titleQuotingYou}#{titleCount}#{titleDead}"
|
d.title = "#{titleQuotingYou}#{titleCount}#{titleDead}"
|
||||||
|
|
||||||
$.forceSync 'Remember Last Read Post'
|
Unread.saveThreadWatcherCount()
|
||||||
if Conf['Remember Last Read Post'] and (!Unread.thread.isDead or Unread.thread.isArchived)
|
|
||||||
ThreadWatcher.update Unread.thread.board.ID, Unread.thread.ID,
|
|
||||||
isDead: Unread.thread.isDead
|
|
||||||
unread: count
|
|
||||||
quotingYou: countQuotingYou
|
|
||||||
|
|
||||||
if Conf['Unread Favicon']
|
if Conf['Unread Favicon']
|
||||||
{isDead} = Unread.thread
|
{isDead} = Unread.thread
|
||||||
@ -249,3 +244,11 @@ Unread =
|
|||||||
Favicon[if isDead then 'dead' else 'default']
|
Favicon[if isDead then 'dead' else 'default']
|
||||||
# `favicon.href = href` doesn't work on Firefox.
|
# `favicon.href = href` doesn't work on Firefox.
|
||||||
$.add d.head, Favicon.el
|
$.add d.head, Favicon.el
|
||||||
|
|
||||||
|
saveThreadWatcherCount: $.debounce 2 * $.SECOND, ->
|
||||||
|
$.forceSync 'Remember Last Read Post'
|
||||||
|
if Conf['Remember Last Read Post'] and (!Unread.thread.isDead or Unread.thread.isArchived)
|
||||||
|
ThreadWatcher.update Unread.thread.board.ID, Unread.thread.ID,
|
||||||
|
isDead: Unread.thread.isDead
|
||||||
|
unread: Unread.posts.size
|
||||||
|
quotingYou: Unread.postsQuotingYou.size
|
||||||
|
|||||||
@ -117,6 +117,7 @@ QR.post = class
|
|||||||
@spoiler = input.checked
|
@spoiler = input.checked
|
||||||
return
|
return
|
||||||
{name} = input.dataset
|
{name} = input.dataset
|
||||||
|
prev = @[name]
|
||||||
@[name] = input.value or input.dataset.default or null
|
@[name] = input.value or input.dataset.default or null
|
||||||
switch name
|
switch name
|
||||||
when 'thread'
|
when 'thread'
|
||||||
@ -133,7 +134,8 @@ QR.post = class
|
|||||||
@saveFilename()
|
@saveFilename()
|
||||||
@updateFilename()
|
@updateFilename()
|
||||||
when 'name'
|
when 'name'
|
||||||
QR.persona.set @
|
if @name isnt prev # only save manual changes, not values filled in by persona settings
|
||||||
|
QR.persona.set @
|
||||||
|
|
||||||
forceSave: ->
|
forceSave: ->
|
||||||
return unless @ is QR.selected
|
return unless @ is QR.selected
|
||||||
|
|||||||
@ -16,14 +16,14 @@ Post.Clone = class extends Post
|
|||||||
node.id = Post.Clone.prefix + node.id
|
node.id = Post.Clone.prefix + node.id
|
||||||
Post.Clone.prefix++
|
Post.Clone.prefix++
|
||||||
|
|
||||||
@nodes = @parseNodes root
|
|
||||||
|
|
||||||
# Remove inlined posts inside of this post.
|
# Remove inlined posts inside of this post.
|
||||||
for inline in $$ '.inline', @nodes.post
|
for inline in $$ '.inline', root
|
||||||
$.rm inline
|
$.rm inline
|
||||||
for inlined in $$ '.inlined', @nodes.post
|
for inlined in $$ '.inlined', root
|
||||||
$.rmClass inlined, 'inlined'
|
$.rmClass inlined, 'inlined'
|
||||||
|
|
||||||
|
@nodes = @parseNodes root
|
||||||
|
|
||||||
root.hidden = false # post hiding
|
root.hidden = false # post hiding
|
||||||
$.rmClass root, 'forwarded' # quote inlining
|
$.rmClass root, 'forwarded' # quote inlining
|
||||||
$.rmClass @nodes.post, 'highlight' # keybind navigation, ID highlighting
|
$.rmClass @nodes.post, 'highlight' # keybind navigation, ID highlighting
|
||||||
|
|||||||
@ -188,6 +188,8 @@ class Post
|
|||||||
return if not (link = $ '.fileText > a, .fileText-original > a', fileRoot)
|
return if not (link = $ '.fileText > a, .fileText-original > a', fileRoot)
|
||||||
return if not (info = link.nextSibling?.textContent.match /\(([\d.]+ [KMG]?B).*\)/)
|
return if not (info = link.nextSibling?.textContent.match /\(([\d.]+ [KMG]?B).*\)/)
|
||||||
fileText = fileRoot.firstElementChild
|
fileText = fileRoot.firstElementChild
|
||||||
|
# XXX full images on https://is.4chan.org don't load
|
||||||
|
link.hostname = 'i.4cdn.org' if link.hostname is 'is.4chan.org'
|
||||||
@file =
|
@file =
|
||||||
text: fileText
|
text: fileText
|
||||||
link: link
|
link: link
|
||||||
@ -203,6 +205,8 @@ class Post
|
|||||||
size *= 1024 while unit-- > 0
|
size *= 1024 while unit-- > 0
|
||||||
@file.sizeInBytes = size
|
@file.sizeInBytes = size
|
||||||
if (thumb = $ 'a.fileThumb > [data-md5]', fileRoot)
|
if (thumb = $ 'a.fileThumb > [data-md5]', fileRoot)
|
||||||
|
# XXX full images on https://is.4chan.org don't load
|
||||||
|
thumb.parentNode.hostname = 'i.4cdn.org' if thumb.parentNode.hostname is 'is.4chan.org'
|
||||||
$.extend @file,
|
$.extend @file,
|
||||||
thumb: thumb
|
thumb: thumb
|
||||||
thumbLink: thumb.parentNode
|
thumbLink: thumb.parentNode
|
||||||
|
|||||||
@ -126,15 +126,18 @@ body > div[style*=" top: -10000px;"] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Ads */
|
/* Ads */
|
||||||
:root:not(.ads-loaded) .ad-cnt > * {
|
.ad-cnt > *, .adg-rects > * {
|
||||||
height: auto;
|
height: auto !important;
|
||||||
}
|
}
|
||||||
:root:not(.ads-loaded) .ad-plea,
|
:root:not(.ads-loaded) .ad-plea,
|
||||||
:root:not(.ads-loaded) hr.abovePostForm,
|
:root:not(.ads-loaded) hr.abovePostForm,
|
||||||
:root:not(.ads-loaded) .ad-plea-bottom + hr {
|
:root:not(.ads-loaded) .ad-plea-bottom + hr {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
hr + div.center:not(.ad-cnt):not(.topad):not(.middlead):not(.bottomad) {
|
:root:not(.ads-loaded) .adg-rects {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
div.center[style] {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -717,6 +720,8 @@ div[data-checked="false"] > .suboption-list {
|
|||||||
}
|
}
|
||||||
.catalog-thread {
|
.catalog-thread {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
border: 1px solid transparent;
|
border: 1px solid transparent;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
@ -727,12 +732,12 @@ div[data-checked="false"] > .suboption-list {
|
|||||||
margin: 4px;
|
margin: 4px;
|
||||||
}
|
}
|
||||||
.catalog-small > .catalog-thread {
|
.catalog-small > .catalog-thread {
|
||||||
width: 165px;
|
width: 167px;
|
||||||
height: 320px;
|
height: 322px;
|
||||||
}
|
}
|
||||||
.catalog-large > .catalog-thread {
|
.catalog-large > .catalog-thread {
|
||||||
width: 270px;
|
width: 272px;
|
||||||
height: 410px;
|
height: 412px;
|
||||||
}
|
}
|
||||||
:root.catalog-hover-expand .catalog-thread:hover {
|
:root.catalog-hover-expand .catalog-thread:hover {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
@ -825,9 +830,11 @@ div[data-checked="false"] > .suboption-list {
|
|||||||
.catalog-container:not(:hover) > * > .file,
|
.catalog-container:not(:hover) > * > .file,
|
||||||
.catalog-container:not(:hover) > * > .postInfo > :not(.subject),
|
.catalog-container:not(:hover) > * > .postInfo > :not(.subject),
|
||||||
.catalog-container:not(:hover) > * > .catalog-replies,
|
.catalog-container:not(:hover) > * > .catalog-replies,
|
||||||
|
.catalog-container:not(:hover) .extra-linebreak,
|
||||||
:root:not(.catalog-hover-expand) .catalog-container > * > .file,
|
:root:not(.catalog-hover-expand) .catalog-container > * > .file,
|
||||||
:root:not(.catalog-hover-expand) .catalog-container > * > .postInfo > :not(.subject),
|
:root:not(.catalog-hover-expand) .catalog-container > * > .postInfo > :not(.subject),
|
||||||
:root:not(.catalog-hover-expand) .catalog-container > * > .catalog-replies,
|
:root:not(.catalog-hover-expand) .catalog-container > * > .catalog-replies,
|
||||||
|
:root:not(.catalog-hover-expand) .catalog-container .extra-linebreak,
|
||||||
.catalog-thread > .catalog-container > :not(.catalog-post),
|
.catalog-thread > .catalog-container > :not(.catalog-post),
|
||||||
.catalog-post > .file > :not(.fileText),
|
.catalog-post > .file > :not(.fileText),
|
||||||
.catalog-post > * > .fileText > :not(:first-child),
|
.catalog-post > * > .fileText > :not(:first-child),
|
||||||
@ -878,11 +885,15 @@ div[data-checked="false"] > .suboption-list {
|
|||||||
:root.catalog-hover-expand .catalog-container:hover > * > .postMessage:not(:empty) {
|
:root.catalog-hover-expand .catalog-container:hover > * > .postMessage:not(:empty) {
|
||||||
padding-top: .3em;
|
padding-top: .3em;
|
||||||
}
|
}
|
||||||
|
.catalog-post .extra-linebreak {
|
||||||
|
content: ''; /* makes this work in Blink/WebKit */
|
||||||
|
display: block;
|
||||||
|
margin-top: .3em;
|
||||||
|
}
|
||||||
.catalog-reply {
|
.catalog-reply {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
margin: -1px;
|
border-top: 1px solid transparent;
|
||||||
border: 1px solid transparent;
|
|
||||||
display: -webkit-flex;
|
display: -webkit-flex;
|
||||||
display: flex;
|
display: flex;
|
||||||
-webkit-flex-direction: row;
|
-webkit-flex-direction: row;
|
||||||
@ -1337,10 +1348,10 @@ input[name="Default Volume"] {
|
|||||||
box-shadow: 0 0 3px 3px rgba(255, 0, 0, .5);
|
box-shadow: 0 0 3px 3px rgba(255, 0, 0, .5);
|
||||||
}
|
}
|
||||||
:root:not(.werkTyme) .catalog-thread.watched .catalog-thumb,
|
:root:not(.werkTyme) .catalog-thread.watched .catalog-thumb,
|
||||||
:root.werkTyme .catalog-thread.watched:not(:hover),
|
:root:root.werkTyme .catalog-thread.watched:not(:hover),
|
||||||
:root.werkTyme:not(.catalog-hover-expand) .catalog-thread.watched,
|
:root:root.werkTyme:not(.catalog-hover-expand) .catalog-thread.watched,
|
||||||
:root.werkTyme.catalog-hover-expand .catalog-thread.watched > .catalog-container:hover > .catalog-post {
|
:root.werkTyme.catalog-hover-expand .catalog-thread.watched > .catalog-container:hover > .catalog-post {
|
||||||
outline: 2px solid rgba(255, 0, 0, .75);
|
border: 2px solid rgba(255, 0, 0, .75);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Spoiler text */
|
/* Spoiler text */
|
||||||
|
|||||||
@ -88,7 +88,7 @@
|
|||||||
:root.tomorrow.werkTyme .catalog-thread.watched:not(:hover),
|
:root.tomorrow.werkTyme .catalog-thread.watched:not(:hover),
|
||||||
:root.tomorrow.werkTyme:not(.catalog-hover-expand) .catalog-thread.watched,
|
:root.tomorrow.werkTyme:not(.catalog-hover-expand) .catalog-thread.watched,
|
||||||
:root.tomorrow.werkTyme.catalog-hover-expand .catalog-thread.watched > .catalog-container:hover > .catalog-post {
|
:root.tomorrow.werkTyme.catalog-hover-expand .catalog-thread.watched > .catalog-container:hover > .catalog-post {
|
||||||
outline: 2px solid rgb(64, 192, 255);
|
border: 2px solid rgb(64, 192, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -4,3 +4,8 @@
|
|||||||
:root:not(.js-enabled) #form {
|
:root:not(.js-enabled) #form {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
#bd > div[style], #bd > div[style] > * {
|
||||||
|
height: auto !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
font-size: 0;
|
||||||
|
}
|
||||||
|
|||||||
@ -129,7 +129,7 @@ Main =
|
|||||||
else if pathname[2] is 'post'
|
else if pathname[2] is 'post'
|
||||||
PostSuccessful.init()
|
PostSuccessful.init()
|
||||||
return
|
return
|
||||||
when 'i.4cdn.org'
|
when 'i.4cdn.org', 'is.4chan.org'
|
||||||
return unless pathname[2] and not /s\.jpg$/.test(pathname[2])
|
return unless pathname[2] and not /s\.jpg$/.test(pathname[2])
|
||||||
$.asap (-> d.readyState isnt 'loading'), ->
|
$.asap (-> d.readyState isnt 'loading'), ->
|
||||||
if Conf['404 Redirect'] and d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found']
|
if Conf['404 Redirect'] and d.title in ['4chan - Temporarily Offline', '4chan - 404 Not Found']
|
||||||
@ -187,7 +187,7 @@ Main =
|
|||||||
$.addClass doc, 'fourchan-x', 'seaweedchan'
|
$.addClass doc, 'fourchan-x', 'seaweedchan'
|
||||||
$.addClass doc, if g.VIEW is 'thread' then 'thread-view' else g.VIEW
|
$.addClass doc, if g.VIEW is 'thread' then 'thread-view' else g.VIEW
|
||||||
$.addClass doc, "ua-#{$.engine}" if $.engine
|
$.addClass doc, "ua-#{$.engine}" if $.engine
|
||||||
$.onExists doc, '.ad-cnt', (ad) -> $.onExists ad, 'img', -> $.addClass doc, 'ads-loaded'
|
$.onExists doc, '.ad-cnt, .adg-rects', (ad) -> $.onExists ad, 'img, iframe', -> $.addClass doc, 'ads-loaded'
|
||||||
$.addClass doc, 'autohiding-scrollbar' if Conf['Autohiding Scrollbar']
|
$.addClass doc, 'autohiding-scrollbar' if Conf['Autohiding Scrollbar']
|
||||||
$.ready ->
|
$.ready ->
|
||||||
if d.body.clientHeight > doc.clientHeight and (window.innerWidth is doc.clientWidth) isnt Conf['Autohiding Scrollbar']
|
if d.body.clientHeight > doc.clientHeight and (window.innerWidth is doc.clientWidth) isnt Conf['Autohiding Scrollbar']
|
||||||
|
|||||||
@ -35,6 +35,7 @@
|
|||||||
})()
|
})()
|
||||||
%>
|
%>
|
||||||
// @connect i.4cdn.org
|
// @connect i.4cdn.org
|
||||||
|
// @connect is.4chan.org
|
||||||
// @connect *
|
// @connect *
|
||||||
<%=
|
<%=
|
||||||
meta.grants.map(function(grant) {
|
meta.grants.map(function(grant) {
|
||||||
|
|||||||
@ -14,7 +14,7 @@ CrossOrigin =
|
|||||||
# XXX https://forums.lanik.us/viewtopic.php?f=64&t=24173&p=78310
|
# XXX https://forums.lanik.us/viewtopic.php?f=64&t=24173&p=78310
|
||||||
url = url.replace /^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'
|
url = url.replace /^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'
|
||||||
<% if (type === 'crx') { %>
|
<% if (type === 'crx') { %>
|
||||||
if url.split('/')[...3].join('/') is "#{location.protocol}//i.4cdn.org"
|
if url.split('/')[...3].join('/') in ["#{location.protocol}//i.4cdn.org", "#{location.protocol}//is.4chan.org"]
|
||||||
xhr = new XMLHttpRequest()
|
xhr = new XMLHttpRequest()
|
||||||
xhr.open 'GET', url, true
|
xhr.open 'GET', url, true
|
||||||
xhr.setRequestHeader key, value for key, value of headers
|
xhr.setRequestHeader key, value for key, value of headers
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": "1.13.0.9",
|
"version": "1.13.0.17",
|
||||||
"date": "2016-10-09T10:48:46.406Z"
|
"date": "2016-10-30T05:07:56.889Z"
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user