4chan-x/src/Theming/Rice.coffee
Zixaphir 904316e4e0 Merge branch 'v3'
Conflicts:
	CHANGELOG.md
	LICENSE
	builds/4chan-X.meta.js
	builds/4chan-X.user.js
	builds/crx/manifest.json
	builds/crx/script.js
	latest.js
	package.json
	src/General/Config.coffee
2013-10-13 14:42:58 -07:00

104 lines
2.4 KiB
CoffeeScript

Rice =
init: ->
$.ready ->
Rice.nodes d.body
Post.callbacks.push
name: 'Rice Checkboxes'
cb: @node
cb:
check: (e)->
e.preventDefault()
e.stopPropagation()
@check.click()
option: (e) ->
e.stopPropagation()
e.preventDefault()
select = Rice.input
container = select.nextElementSibling
container.firstChild.textContent = @textContent
select.value = @getAttribute 'data-value'
$.event 'change', null, select
Rice.cleanup()
select: (e) ->
e.stopPropagation()
e.preventDefault()
{ul} = Rice
unless ul
Rice.ul = ul = $.el 'ul',
id: "selectrice"
$.add d.body, ul
if ul.children.length > 0
return Rice.cleanup()
rect = @getBoundingClientRect()
{clientHeight} = d.documentElement
{style} = ul
style.cssText = "width: #{rect.width}px; left: #{rect.left}px;" + (if clientHeight - rect.bottom < 200 then "bottom: #{clientHeight - rect.top}px" else "top: #{rect.bottom}px")
Rice.input = select = @previousSibling
nodes = []
for option in select.options
li = $.el 'li',
textContent: option.textContent
li.setAttribute 'data-value', option.value
$.on li, 'click', Rice.cb.option
nodes.push li
$.add ul, nodes
$.on ul, 'click scroll blur', (e) ->
e.stopPropagation()
$.on d, 'click scroll blur resize', Rice.cleanup
cleanup: ->
$.off d, 'click scroll blur resize', Rice.cleanup
for child in [Rice.ul.children...]
$.rm child
return
nodes: (root) ->
root or= d.body
checkboxes = $$('[type=checkbox]:not(.riced)', root)
checkrice = Rice.checkbox
for input in checkboxes
checkrice input
selects = $$('select:not(.riced)', root)
selectrice = Rice.select
for select in selects
selectrice select
return
node: ->
Rice.checkbox $ '.postInfo input', @nodes.post
checkbox: (input) ->
return if $.hasClass input, 'riced'
$.addClass input, 'riced'
div = $.el 'div',
className: 'rice'
div.check = input
$.after input, div
$.on div, 'click', Rice.cb.check
select: (select) ->
$.addClass select, 'riced'
div = $.el 'div',
className: 'selectrice'
innerHTML: "<div>#{select.options[select.selectedIndex].textContent or null}</div>"
$.on div, "click", Rice.cb.select
$.after select, div