Start working on fixing things after the last merge

This commit is contained in:
Zixaphir 2014-02-28 14:48:24 -07:00
parent 9d95bbea35
commit 6ba92efcd4
11 changed files with 263 additions and 901 deletions

View File

@ -1,5 +1,5 @@
/* /*
* 4chan X - Version 1.3.10 - 2014-02-23 * 4chan X - Version 1.3.10 - 2014-02-28
* *
* Licensed under the MIT license. * Licensed under the MIT license.
* https://github.com/Spittie/4chan-x/blob/master/LICENSE * https://github.com/Spittie/4chan-x/blob/master/LICENSE

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -7,6 +7,7 @@
<select id="index-mode" name="Index Mode"> <select id="index-mode" name="Index Mode">
<option disabled>Index Mode</option> <option disabled>Index Mode</option>
<option value="paged">Paged</option> <option value="paged">Paged</option>
<option value="infinite">Infinite Scrolling</option>
<option value="all pages">All threads</option> <option value="all pages">All threads</option>
<option value="catalog">Catalog</option> <option value="catalog">Catalog</option>
</select> </select>

View File

@ -52,6 +52,7 @@ PostHiding =
Get.postFromNode @ Get.postFromNode @
else else
Get.threadFromNode(@).OP Get.threadFromNode(@).OP
toggle: (post) -> toggle: (post) ->
if post.isHidden if post.isHidden
post.show() post.show()
@ -59,9 +60,14 @@ PostHiding =
post.hide 'Manually hidden' post.hide 'Manually hidden'
PostHiding.saveHiddenState post PostHiding.saveHiddenState post
return if post.isReply return if post.isReply
Index.updateHideLabel()
Index.sort() if Conf['JSON Navigation']
Index.buildIndex() Index.updateHideLabel()
Index.sort()
Index.buildIndex()
else
# XXX Tempfix until I feel like writing out real functionality for thread hiding without JSON functions
$.rm post.nodes.root.parentElement
saveHiddenState: (post, val) -> saveHiddenState: (post, val) ->
data = data =

View File

@ -1,211 +0,0 @@
ThreadHiding =
init: ->
return if g.VIEW isnt 'index' or !Conf['Thread Hiding Buttons'] and !Conf['Thread Hiding Link']
@db = new DataBoard 'hiddenThreads'
@syncCatalog()
$.on d, 'IndexBuild', @onIndexBuild
Thread.callbacks.push
name: 'Thread Hiding'
cb: @node
node: ->
if data = ThreadHiding.db.get {boardID: @board.ID, threadID: @ID}
ThreadHiding.hide @, data.makeStub
return unless Conf['Thread Hiding Buttons']
$.prepend @OP.nodes.root, ThreadHiding.makeButton @, 'hide'
onIndexBuild: ({detail: nodes}) ->
for root, i in nodes by 2
thread = Get.threadFromRoot root
continue unless thread.isHidden
unless thread.stub
nodes[i + 1].hidden = true
else unless root.contains thread.stub
# When we come back to a page, the stub is already there.
ThreadHiding.makeStub thread, root
return
syncCatalog: ->
# Sync hidden threads from the catalog into the index.
hiddenThreads = ThreadHiding.db.get
boardID: g.BOARD.ID
defaultValue: {}
hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem "4chan-hide-t-#{g.BOARD}") or {}
# Add threads that were hidden in the catalog.
for threadID of hiddenThreadsOnCatalog
unless threadID of hiddenThreads
hiddenThreads[threadID] = {}
# Remove threads that were un-hidden in the catalog.
for threadID of hiddenThreads
unless threadID of hiddenThreadsOnCatalog
delete hiddenThreads[threadID]
if (ThreadHiding.db.data.lastChecked or 0) > Date.now() - $.MINUTE
# Was cleaned just now.
ThreadHiding.cleanCatalog hiddenThreadsOnCatalog
ThreadHiding.db.set
boardID: g.BOARD.ID
val: hiddenThreads
cleanCatalog: (hiddenThreadsOnCatalog) ->
# We need to clean hidden threads on the catalog ourselves,
# otherwise if we don't visit the catalog regularly
# it will pollute the localStorage and our data.
$.cache "//a.4cdn.org/#{g.BOARD}/threads.json", ->
return unless @status is 200
threads = {}
for page in @response
for thread in page.threads
if thread.no of hiddenThreadsOnCatalog
threads[thread.no] = hiddenThreadsOnCatalog[thread.no]
if Object.keys(threads).length
localStorage.setItem "4chan-hide-t-#{g.BOARD}", JSON.stringify threads
else
localStorage.removeItem "4chan-hide-t-#{g.BOARD}"
menu:
init: ->
return if g.VIEW isnt 'index' or !Conf['Menu'] or !Conf['Thread Hiding Link']
div = $.el 'div',
className: 'hide-thread-link'
textContent: 'Hide thread'
apply = $.el 'a',
textContent: 'Apply'
href: 'javascript:;'
$.on apply, 'click', ThreadHiding.menu.hide
makeStub = $.el 'label',
innerHTML: "<input type=checkbox #{if Conf['Stubs'] then 'checked' else ''}> Make stub"
$.event 'AddMenuEntry',
type: 'post'
el: div
order: 20
open: ({thread, isReply}) ->
if isReply or thread.isHidden
return false
ThreadHiding.menu.thread = thread
true
subEntries: [el: apply; el: makeStub]
div = $.el 'a',
className: 'show-thread-link'
textContent: 'Show thread'
href: 'javascript:;'
$.on div, 'click', ThreadHiding.menu.show
$.event 'AddMenuEntry',
type: 'post'
el: div
order: 20
open: ({thread, isReply}) ->
if isReply or !thread.isHidden
return false
ThreadHiding.menu.thread = thread
true
hideStubLink = $.el 'a',
textContent: 'Hide stub'
href: 'javascript:;'
$.on hideStubLink, 'click', ThreadHiding.menu.hideStub
$.event 'AddMenuEntry',
type: 'post'
el: hideStubLink
order: 15
open: ({thread, isReply}) ->
if isReply or !thread.isHidden
return false
ThreadHiding.menu.thread = thread
hide: ->
makeStub = $('input', @parentNode).checked
{thread} = ThreadHiding.menu
ThreadHiding.hide thread, makeStub
ThreadHiding.saveHiddenState thread, makeStub
$.event 'CloseMenu'
show: ->
{thread} = ThreadHiding.menu
ThreadHiding.show thread
ThreadHiding.saveHiddenState thread
$.event 'CloseMenu'
hideStub: ->
{thread} = ThreadHiding.menu
ThreadHiding.hide thread, false
$.event 'CloseMenu'
return
makeButton: (thread, type) ->
a = $.el 'a',
className: "#{type}-thread-button"
innerHTML: "<span class='fa fa-#{if type is 'hide' then 'minus' else 'plus'}-square'></span>"
href: 'javascript:;'
a.dataset.fullID = thread.fullID
$.on a, 'click', ThreadHiding.toggle
a
makeStub: (thread, root) ->
numReplies = $$('.thread > .replyContainer', root).length
numReplies += +summary.textContent.match /\d+/ if summary = $ '.summary', root
opInfo = if Conf['Anonymize']
'Anonymous'
else
$('.nameBlock', thread.OP.nodes.info).textContent
a = ThreadHiding.makeButton thread, 'show'
$.add a, $.tn " #{opInfo} (#{if numReplies is 1 then '1 reply' else "#{numReplies} replies"})"
thread.stub = $.el 'div',
className: 'stub'
if Conf['Menu']
$.add thread.stub, [a, Menu.makeButton()]
else
$.add thread.stub, a
$.prepend root, thread.stub
saveHiddenState: (thread, makeStub) ->
hiddenThreadsOnCatalog = JSON.parse(localStorage.getItem "4chan-hide-t-#{g.BOARD}") or {}
if thread.isHidden
ThreadHiding.db.set
boardID: thread.board.ID
threadID: thread.ID
val: {makeStub}
hiddenThreadsOnCatalog[thread] = true
else
ThreadHiding.db.delete
boardID: thread.board.ID
threadID: thread.ID
delete hiddenThreadsOnCatalog[thread]
localStorage.setItem "4chan-hide-t-#{g.BOARD}", JSON.stringify hiddenThreadsOnCatalog
toggle: (thread) ->
unless thread instanceof Thread
thread = g.threads[@dataset.fullID]
if thread.isHidden
ThreadHiding.show thread
else
ThreadHiding.hide thread
ThreadHiding.saveHiddenState thread
hide: (thread, makeStub=Conf['Stubs']) ->
return if thread.isHidden
threadRoot = thread.OP.nodes.root.parentNode
thread.isHidden = true
return threadRoot.hidden = threadRoot.nextElementSibling.hidden = true unless makeStub # <hr>
ThreadHiding.makeStub thread, threadRoot
show: (thread) ->
if thread.stub
$.rm thread.stub
delete thread.stub
threadRoot = thread.OP.nodes.root.parentNode
threadRoot.nextElementSibling.hidden =
threadRoot.hidden = thread.isHidden = false

View File

@ -143,6 +143,9 @@ Header =
Header.boardList = boardList = $.el 'span', Header.boardList = boardList = $.el 'span',
id: 'board-list' id: 'board-list'
innerHTML: "<span id=custom-board-list></span><span id=full-board-list hidden><span class='hide-board-list-container brackets-wrap'><a href=javascript:; class='hide-board-list-button'>&nbsp;-&nbsp;</a></span> #{fourchannav.innerHTML}</span>" innerHTML: "<span id=custom-board-list></span><span id=full-board-list hidden><span class='hide-board-list-container brackets-wrap'><a href=javascript:; class='hide-board-list-button'>&nbsp;-&nbsp;</a></span> #{fourchannav.innerHTML}</span>"
$.on $('#custom-board-list', Header.boardList), 'click', Index.cb.headerNav if Conf['JSON Navigation']
for a in $$ 'a', boardList for a in $$ 'a', boardList
if Conf['JSON Navigation'] if Conf['JSON Navigation']
$.on a, 'click', Navigate.navigate $.on a, 'click', Navigate.navigate

View File

@ -87,6 +87,16 @@ Index =
$.addClass doc, 'index-loading' $.addClass doc, 'index-loading'
@root = $.el 'div', className: 'board'
@pagelist = $.el 'div',
className: 'pagelist'
hidden: true
innerHTML: <%= importHTML('Features/Index-pagelist') %>
@navLinks = $.el 'div',
className: 'navLinks'
innerHTML: <%= importHTML('Features/Index-navlinks') %>
@searchInput = $ '#index-search', @navLinks @searchInput = $ '#index-search', @navLinks
@hideLabel = $ '#hidden-label', @navLinks @hideLabel = $ '#hidden-label', @navLinks
@selectMode = $ '#index-mode', @navLinks @selectMode = $ '#index-mode', @navLinks
@ -102,16 +112,6 @@ Index =
$.on @selectSort, 'change', @cb.sort $.on @selectSort, 'change', @cb.sort
$.on @selectSize, 'change', @cb.size $.on @selectSize, 'change', @cb.size
@root = $.el 'div', className: 'board'
@pagelist = $.el 'div',
className: 'pagelist'
hidden: true
innerHTML: <%= importHTML('Features/Index-pagelist') %>
@navLinks = $.el 'div',
className: 'navLinks'
innerHTML: <%= importHTML('Features/Index-navlinks') %>
@searchInput = $ '#index-search', @navLinks @searchInput = $ '#index-search', @navLinks
@currentPage = @getCurrentPage() @currentPage = @getCurrentPage()
@ -140,8 +140,6 @@ Index =
$.after $.x('child::form/preceding-sibling::hr[1]'), Index.navLinks $.after $.x('child::form/preceding-sibling::hr[1]'), Index.navLinks
$.rmClass doc, 'index-loading' $.rmClass doc, 'index-loading'
$.on $('#custom-board-list', Header.bar), 'click', @cb.headerNav
@cb.toggleCatalogMode() @cb.toggleCatalogMode()
$.asap (-> $('.pagelist', doc) or d.readyState isnt 'loading'), -> $.asap (-> $('.pagelist', doc) or d.readyState isnt 'loading'), ->
@ -152,16 +150,12 @@ Index =
scroll: $.debounce 100, -> scroll: $.debounce 100, ->
return if Index.req or Conf['Index Mode'] isnt 'infinite' or (doc.scrollTop <= doc.scrollHeight - (300 + window.innerHeight)) or g.VIEW is 'thread' return if Index.req or Conf['Index Mode'] isnt 'infinite' or (doc.scrollTop <= doc.scrollHeight - (300 + window.innerHeight)) or g.VIEW is 'thread'
Index.pageNum = Index.getCurrentPage() unless Index.pageNum? # Avoid having to pushState to keep track of the current page Index.pageNum = (Index.pageNum or Index.getCurrentPage()) + 1 # Avoid having to pushState to keep track of the current page
pageNum = Index.pageNum++ return Index.endNotice() if Index.pageNum >= Index.pagesNum
return Index.endNotice() if pageNum >= Index.pagesNum
Index.buildIndex true
nodes = Index.buildSinglePage pageNum
Index.buildReplies nodes if Conf['Show Replies']
Index.buildStructure nodes
Index.setPage pageNum
endNotice: do -> endNotice: do ->
notify = false notify = false
reset = -> notify = false reset = -> notify = false
@ -289,6 +283,7 @@ Index =
else else
$.rmClass doc, 'catalog-mode' $.rmClass doc, 'catalog-mode'
Index.cb.size() Index.cb.size()
toggleHiddenThreads: -> toggleHiddenThreads: ->
$('#hidden-toggle a', Index.navLinks).textContent = if Index.showHiddenThreads = !Index.showHiddenThreads $('#hidden-toggle a', Index.navLinks).textContent = if Index.showHiddenThreads = !Index.showHiddenThreads
'Hide' 'Hide'
@ -299,6 +294,7 @@ Index =
Index.pageNav 0 Index.pageNav 0
else else
Index.buildIndex() Index.buildIndex()
mode: (e) -> mode: (e) ->
Index.cb.toggleCatalogMode() Index.cb.toggleCatalogMode()
Index.togglePagelist() Index.togglePagelist()
@ -312,9 +308,11 @@ Index =
QR.hide() QR.hide()
else else
QR.unhide() QR.unhide()
sort: (e) -> sort: (e) ->
Index.sort() Index.sort()
Index.buildIndex() if e Index.buildIndex() if e
size: (e) -> size: (e) ->
if Conf['Index Mode'] isnt 'catalog' if Conf['Index Mode'] isnt 'catalog'
$.rmClass Index.root, 'catalog-small' $.rmClass Index.root, 'catalog-small'
@ -326,9 +324,11 @@ Index =
$.addClass Index.root, 'catalog-large' $.addClass Index.root, 'catalog-large'
$.rmClass Index.root, 'catalog-small' $.rmClass Index.root, 'catalog-small'
Index.buildIndex() if e Index.buildIndex() if e
threadsNum: -> threadsNum: ->
return unless Conf['Index Mode'] is 'paged' return unless Conf['Index Mode'] is 'paged'
Index.buildIndex() Index.buildIndex()
target: -> target: ->
for threadID, thread of g.BOARD.threads when thread.catalogView for threadID, thread of g.BOARD.threads when thread.catalogView
{thumb} = thread.catalogView.nodes {thumb} = thread.catalogView.nodes
@ -337,10 +337,12 @@ Index =
else else
thumb.removeAttribute 'target' thumb.removeAttribute 'target'
return return
replies: -> replies: ->
Index.buildThreads() Index.buildThreads()
Index.sort() Index.sort()
Index.buildIndex() Index.buildIndex()
pageNav: (e) -> pageNav: (e) ->
return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0 return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or e.button isnt 0
switch e.target.nodeName switch e.target.nodeName
@ -353,6 +355,7 @@ Index =
e.preventDefault() e.preventDefault()
return if Index.cb.indexNav a, true return if Index.cb.indexNav a, true
Index.userPageNav +a.pathname.split('/')[2] Index.userPageNav +a.pathname.split('/')[2]
headerNav: (e) -> headerNav: (e) ->
a = e.target a = e.target
return if e.button isnt 0 or a.nodeName isnt 'A' or a.hostname isnt 'boards.4chan.org' return if e.button isnt 0 or a.nodeName isnt 'A' or a.hostname isnt 'boards.4chan.org'
@ -363,6 +366,7 @@ Index =
return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or !onSameIndex return if e.shiftKey or e.altKey or e.ctrlKey or e.metaKey or !onSameIndex
e.preventDefault() e.preventDefault()
Index.update() unless needChange Index.update() unless needChange
indexNav: (a, onSameIndex) -> indexNav: (a, onSameIndex) ->
{indexMode, indexSort} = a.dataset {indexMode, indexSort} = a.dataset
if indexMode and Conf['Index Mode'] isnt indexMode if indexMode and Conf['Index Mode'] isnt indexMode
@ -388,12 +392,16 @@ Index =
Header.scrollToIfNeeded Index.navLinks Header.scrollToIfNeeded Index.navLinks
getCurrentPage: -> getCurrentPage: ->
if Conf['Index Mode'] is 'infinite' and Index.pageNum
return Index.pageNum
+window.location.pathname.split('/')[2] +window.location.pathname.split('/')[2]
userPageNav: (pageNum) -> userPageNav: (pageNum) ->
if Conf['Refreshed Navigation'] and Conf['Index Mode'] isnt 'all pages' if Conf['Refreshed Navigation'] and Conf['Index Mode'] isnt 'all pages'
Index.update pageNum Index.update pageNum
else else
Index.pageNav pageNum Index.pageNav pageNum
pageNav: (pageNum) -> pageNav: (pageNum) ->
return if Index.currentPage is pageNum return if Index.currentPage is pageNum
history.pushState null, '', if pageNum is 0 then './' else pageNum history.pushState null, '', if pageNum is 0 then './' else pageNum
@ -541,7 +549,7 @@ Index =
new Notice 'error', 'Index refresh failed.', 1 new Notice 'error', 'Index refresh failed.', 1
return return
timeEl = $ '#index-last-refresh time', Index.navLinks timeEl = $ 'time#index-last-refresh', Index.navLinks
timeEl.dataset.utc = Date.parse req.getResponseHeader 'Last-Modified' timeEl.dataset.utc = Date.parse req.getResponseHeader 'Last-Modified'
RelativeDates.update timeEl RelativeDates.update timeEl
Index.scrollToIndex() Index.scrollToIndex()
@ -679,7 +687,7 @@ Index =
Index.sortedThreads.splice offset++, 0, Index.sortedThreads.splice(i, 1)[0] Index.sortedThreads.splice offset++, 0, Index.sortedThreads.splice(i, 1)[0]
return return
buildIndex: -> buildIndex: (infinite) ->
switch Conf['Index Mode'] switch Conf['Index Mode']
when 'paged', 'infinite' when 'paged', 'infinite'
pageNum = Index.getCurrentPage() pageNum = Index.getCurrentPage()
@ -687,7 +695,7 @@ Index =
# Go to the last available page if we were past the limit. # Go to the last available page if we were past the limit.
Index.pageNav Index.getMaxPageNum() Index.pageNav Index.getMaxPageNum()
return return
threadsPerPage = Index.getThreadsNumPerPage()
threads = Index.sortedThreads[threadsPerPage * pageNum ... threadsPerPage * (pageNum + 1)] threads = Index.sortedThreads[threadsPerPage * pageNum ... threadsPerPage * (pageNum + 1)]
nodes = threads.map (thread) -> thread.OP.nodes.root.parentNode nodes = threads.map (thread) -> thread.OP.nodes.root.parentNode
Index.buildReplies threads Index.buildReplies threads
@ -701,7 +709,7 @@ Index =
nodes = Index.sortedThreads.map (thread) -> thread.OP.nodes.root.parentNode nodes = Index.sortedThreads.map (thread) -> thread.OP.nodes.root.parentNode
Index.buildReplies Index.sortedThreads Index.buildReplies Index.sortedThreads
nodes = Index.buildHRs nodes nodes = Index.buildHRs nodes
$.rmAll Index.root $.rmAll Index.root unless infinite
$.add Index.root, nodes $.add Index.root, nodes
$.event 'IndexBuild', nodes $.event 'IndexBuild', nodes

View File

@ -290,14 +290,12 @@ Main =
['Reveal Spoilers', RemoveSpoilers] ['Reveal Spoilers', RemoveSpoilers]
['Resurrect Quotes', Quotify] ['Resurrect Quotes', Quotify]
['Filter', Filter] ['Filter', Filter]
['Thread Hiding Buttons', ThreadHiding]
['Reply Hiding Buttons', PostHiding] ['Reply Hiding Buttons', PostHiding]
['Recursive', Recursive] ['Recursive', Recursive]
['Strike-through Quotes', QuoteStrikeThrough] ['Strike-through Quotes', QuoteStrikeThrough]
['Quick Reply', QR] ['Quick Reply', QR]
['Menu', Menu] ['Menu', Menu]
['Report Link', ReportLink] ['Report Link', ReportLink]
['Thread Hiding (Menu)', ThreadHiding.menu]
['Reply Hiding (Menu)', PostHiding.menu] ['Reply Hiding (Menu)', PostHiding.menu]
['Delete Link', DeleteLink] ['Delete Link', DeleteLink]
['Filter (Menu)', Filter.menu] ['Filter (Menu)', Filter.menu]

View File

@ -483,6 +483,9 @@ div.center:not(.ad-cnt) {
:root.index-loading .pagelist { :root.index-loading .pagelist {
display: none; display: none;
} }
.index #returnlink {
display: none;
}
#index-search { #index-search {
padding-right: 1.5em; padding-right: 1.5em;
width: 100px; width: 100px;
@ -506,13 +509,110 @@ div.center:not(.ad-cnt) {
.summary { .summary {
text-decoration: none; text-decoration: none;
} }
.index #returnlink, .catalog-mode .board {
.index #bottomlink, text-align: center;
.thread #index-last-refresh, }
.thread #index-search-clear, .catalog-thread {
.thread #index-search { display: inline-flex;
text-align: left;
flex-direction: column;
align-items: center;
margin: 0 2px 5px;
word-break: break-word;
vertical-align: top;
}
.catalog-small .catalog-thread {
width: 165px;
max-height: 320px;
}
.catalog-large .catalog-thread {
width: 270px;
max-height: 410px;
}
.thumb {
flex-shrink: 0;
position: relative;
background-size: 100% 100%;
background-repeat: no-repeat;
background-position: center;
border-radius: 2px;
box-shadow: 0 0 5px rgba(0, 0, 0, .25);
}
.thumb:not(.deleted-file):not(.no-file) {
min-width: 30px;
min-height: 30px;
}
.thumb.spoiler-file {
background-size: 100px;
width: 100px;
height: 100px;
}
.thumb.deleted-file {
background-size: 127px 13px;
width: 127px;
height: 13px;
padding: 20px 11px;
}
.thumb.no-file {
background-size: 77px 13px;
width: 77px;
height: 13px;
padding: 20px 36px;
}
.thread-icons > img {
width: 1em;
height: 1em;
margin: 0;
vertical-align: text-top;
}
.thumb:not(:hover):not(:focus) > .menu-button:not(.open):not(:focus) > i {
display: none; display: none;
} }
.thumb > .menu-button {
position: absolute;
top: 0;
right: 0;
}
.thumb > .menu-button > i {
width: 1em;
height: 1em;
padding: 1px;
border-radius: 0 2px 0 2px;
font-size: 14px;
text-align: center;
<% if (type === 'userscript') { %>
line-height: normal;
<% } %>
}
.thread-stats {
flex-shrink: 0;
cursor: help;
font-size: 10px;
font-weight: 700;
margin-top: 2px;
}
.catalog-thread > .subject {
flex-shrink: 0;
font-weight: 700;
line-height: 1;
text-align: center;
}
.catalog-thread > .comment {
flex-shrink: 1;
align-self: stretch;
overflow: hidden;
text-align: center;
}
.thread-info {
position: fixed;
background-color: inherit;
padding: 2px;
border-radius: 2px;
box-shadow: 0 0 5px rgba(0, 0, 0, .25);
}
.thread-info .post {
margin: 0;
}
/* Announcement Hiding */ /* Announcement Hiding */
:root.hide-announcement #globalMessage { :root.hide-announcement #globalMessage {
@ -766,27 +866,16 @@ span.hide-announcement {
color: white !important; color: white !important;
} }
/* Thread & Reply Hiding */ /* Post Hiding */
.hide-thread-button, .hide-post-button,
.hide-reply-button { .show-post-button {
font-size: 14px;
line-height: 12px; /* Prevent the floating effect from affecting the thumbnail too */
}
.opContainer > .show-post-button,
.hide-post-button {
float: left; float: left;
margin-right: 4px; margin-right: 3px;
padding: 2px;
}
.hide-thread-button:not(:hover),
.hide-reply-button:not(:hover) {
opacity: 0.4;
}
.threadContainer .hide-reply-button {
margin-left: 2px !important;
position: relative;
left: 1px;
}
.hide-thread-button {
margin-top: -1px;
}
.stub ~ * {
display: none !important;
} }
.stub input { .stub input {
display: inline-block; display: inline-block;

View File

@ -1,6 +1,28 @@
<span class=brackets-wrap id=returnlink><a href=.././>Return</a></span> <span class=brackets-wrap id=returnlink><a href=.././>Return</a></span>
<span class=brackets-wrap id=cataloglink><a href=javascript:;>Catalog</a></span>
<span class=brackets-wrap id=bottomlink><a href="#bottom">Bottom</a></span> <span class=brackets-wrap id=bottomlink><a href="#bottom">Bottom</a></span>
<span class=brackets-wrap id="index-last-refresh"><time title="Last index refresh">...</time></span>
<input type="search" id="index-search" class="field" placeholder="Search"> <input type="search" id="index-search" class="field" placeholder="Search">
<a id="index-search-clear" href="javascript:;" title="Clear search">×</a> <a id="index-search-clear" class="fa fa-times-circle" href="javascript:;"></a>
&nbsp;
<time id="index-last-refresh" title="Last index refresh">...</time>
<span id="hidden-label" hidden>&nbsp;&mdash; <span id="hidden-count"></span> <span id="hidden-toggle">[<a href="javascript:;">Show</a>]</span></span>
<span style="flex:1"></span>
<select id="index-mode" name="Index Mode">
<option disabled>Index Mode</option>
<option value="paged">Paged</option>
<option value="infinite">Infinite Scrolling</option>
<option value="all pages">All threads</option>
<option value="catalog">Catalog</option>
</select>
<select id="index-sort" name="Index Sort">
<option disabled>Index Sort</option>
<option value="bump">Bump order</option>
<option value="lastreply">Last reply</option>
<option value="birth">Creation date</option>
<option value="replycount">Reply count</option>
<option value="filecount">File count</option>
</select>
<select id="index-size" name="Index Size">
<option disabled>Image Size</option>
<option value="small">Small</option>
<option value="large">Large</option>
</select>