mirror of
https://github.com/moebooru/moebooru
synced 2025-08-22 01:47:48 +00:00
Restore app/javascript/src/classes/post_mode_menu.coffee
This commit is contained in:
parent
408e759be9
commit
0db5375925
336
app/javascript/src/classes/post_mode_menu.coffee
Normal file
336
app/javascript/src/classes/post_mode_menu.coffee
Normal file
@ -0,0 +1,336 @@
|
||||
get_style_for_mode = (s) ->
|
||||
if s == 'view'
|
||||
{ background: '' }
|
||||
else if s == 'edit'
|
||||
{ background: '#3A3' }
|
||||
else if s == 'rating-q'
|
||||
{ background: '#AAA' }
|
||||
else if s == 'rating-s'
|
||||
{ background: '#6F6' }
|
||||
else if s == 'rating-e'
|
||||
{ background: '#F66' }
|
||||
else if s == 'vote'
|
||||
{ background: '#FAA' }
|
||||
else if s == 'lock-rating'
|
||||
{ background: '#AA3' }
|
||||
else if s == 'lock-note'
|
||||
{ background: '#3AA' }
|
||||
else if s == 'approve'
|
||||
{ background: '#26A' }
|
||||
else if s == 'flag'
|
||||
{ background: '#F66' }
|
||||
else if s == 'add-to-pool'
|
||||
{ background: '#26A' }
|
||||
else if s == 'apply-tag-script'
|
||||
{ background: '#A3A' }
|
||||
else if s == 'reparent-quick'
|
||||
{ background: '#CCA' }
|
||||
else if s == 'remove-from-pool'
|
||||
{ background: '#CCA' }
|
||||
else if s == 'reparent'
|
||||
{ background: '#0C0' }
|
||||
else if s == 'dupe'
|
||||
{ background: '#0C0' }
|
||||
else
|
||||
{ background: '#AFA' }
|
||||
|
||||
export default class PostModeMenuClass
|
||||
constructor: ->
|
||||
@dragging_active = false
|
||||
@dragging_from_post = null
|
||||
@dragging_hash = null
|
||||
@dragging_list = null
|
||||
@mode = 'view'
|
||||
|
||||
init: (pool_id) ->
|
||||
# If pool_id isn't null, it's the pool that we're currently searching for.
|
||||
@pool_id = pool_id
|
||||
color_element = $('mode-box')
|
||||
@original_style = border: color_element.getStyle('border')
|
||||
if Cookie.get('mode') == ''
|
||||
Cookie.put 'mode', 'view'
|
||||
$('mode').value = 'view'
|
||||
else
|
||||
$('mode').value = Cookie.get('mode')
|
||||
@vote_score = Cookie.get('vote')
|
||||
if @vote_score == ''
|
||||
@vote_score = 1
|
||||
Cookie.put 'vote', @vote_score
|
||||
else
|
||||
@vote_score = +@vote_score
|
||||
Post.posts.each (p) =>
|
||||
post_id = p[0]
|
||||
post = p[1]
|
||||
span = $('p' + post.id)
|
||||
if !span?
|
||||
return
|
||||
|
||||
# Use post_id here, not post, since the post object can be replaced later after updates.
|
||||
span.down('A').observe 'click', (e) =>
|
||||
@click e, post_id
|
||||
return
|
||||
span.down('A').observe 'mousedown', (e) =>
|
||||
@post_mousedown e, post_id
|
||||
return
|
||||
span.down('A').observe 'mouseover', (e) =>
|
||||
@post_mouseover e, post_id
|
||||
return
|
||||
span.down('A').observe 'mouseout', (e) =>
|
||||
@post_mouseout e, post_id
|
||||
return
|
||||
span.down('A').observe 'mouseup', (e) =>
|
||||
@post_mouseup e, post_id
|
||||
return
|
||||
return
|
||||
document.observe 'mouseup', (e) =>
|
||||
@post_mouseup e, null
|
||||
return
|
||||
Event.observe window, 'pagehide', (e) =>
|
||||
@post_end_drag()
|
||||
return
|
||||
@change()
|
||||
return
|
||||
set_vote: (score) ->
|
||||
@vote_score = score
|
||||
Cookie.put 'vote', @vote_score
|
||||
Post.update_vote_widget 'vote-menu', @vote_score
|
||||
return
|
||||
change: ->
|
||||
if !$('mode')
|
||||
return
|
||||
s = $F('mode')
|
||||
Cookie.put 'mode', s, 7
|
||||
@mode = s
|
||||
if s != 'edit'
|
||||
$('quick-edit').hide()
|
||||
if s != 'apply-tag-script'
|
||||
$('edit-tag-script').hide()
|
||||
Post.reset_tag_script_applied()
|
||||
if s == 'vote'
|
||||
Post.update_vote_widget 'vote-menu', @vote_score
|
||||
$('vote-score').show()
|
||||
else if s == 'apply-tag-script'
|
||||
$('edit-tag-script').show()
|
||||
$('edit-tag-script').focus()
|
||||
return
|
||||
click: (event, post_id) ->
|
||||
s = $('mode')
|
||||
if !s
|
||||
return
|
||||
if s.value == 'view'
|
||||
return true
|
||||
if s.value == 'edit'
|
||||
post_quick_edit.show post_id
|
||||
else if s.value == 'vote'
|
||||
Post.vote post_id, @vote_score
|
||||
else if s.value == 'rating-q'
|
||||
Post.update_batch [ {
|
||||
id: post_id
|
||||
rating: 'questionable'
|
||||
} ]
|
||||
else if s.value == 'rating-s'
|
||||
Post.update_batch [ {
|
||||
id: post_id
|
||||
rating: 'safe'
|
||||
} ]
|
||||
else if s.value == 'rating-e'
|
||||
Post.update_batch [ {
|
||||
id: post_id
|
||||
rating: 'explicit'
|
||||
} ]
|
||||
else if s.value == 'reparent'
|
||||
if post_id == window.id
|
||||
return false
|
||||
TagScript.run post_id, 'parent:' + id
|
||||
else if s.value == 'dupe'
|
||||
if post_id == window.id
|
||||
return false
|
||||
TagScript.run post_id, 'duplicate parent:' + window.id
|
||||
else if s.value == 'lock-rating'
|
||||
Post.update_batch [ {
|
||||
id: post_id
|
||||
is_rating_locked: '1'
|
||||
} ]
|
||||
else if s.value == 'lock-note'
|
||||
Post.update_batch [ {
|
||||
id: post_id
|
||||
is_note_locked: '1'
|
||||
} ]
|
||||
else if s.value == 'flag'
|
||||
Post.flag post_id
|
||||
else if s.value == 'approve'
|
||||
Post.approve post_id
|
||||
else if s.value == 'add-to-pool'
|
||||
Pool.add_post post_id, 0
|
||||
else if s.value == 'remove-from-pool'
|
||||
Pool.remove_post post_id, @pool_id
|
||||
event.stopPropagation()
|
||||
event.preventDefault()
|
||||
return
|
||||
|
||||
post_add_to_hovered_list: (post_id) ->
|
||||
element = element = $$('#p' + post_id + ' > .directlink')
|
||||
if element.length > 0
|
||||
element[0].addClassName 'tag-script-applied'
|
||||
Post.applied_list.push element[0]
|
||||
if !@dragging_hash.get(post_id)
|
||||
@dragging_hash.set post_id, true
|
||||
@dragging_list.push post_id
|
||||
return
|
||||
post_mousedown: (event, post_id) ->
|
||||
if event.button != 0
|
||||
return
|
||||
if @mode == 'reparent-quick'
|
||||
@dragging_from_post = post_id
|
||||
@post_begin_drag()
|
||||
else if @mode == 'apply-tag-script'
|
||||
Post.reset_tag_script_applied()
|
||||
@dragging_from_post = post_id
|
||||
@dragging_list = new Array
|
||||
@dragging_hash = new Hash
|
||||
@post_add_to_hovered_list post_id
|
||||
else
|
||||
return
|
||||
|
||||
# Prevent the mousedown from being processed; this keeps it from turning into
|
||||
# a real drag action, which will suppress our mouseover/mouseout messages. We
|
||||
# only do this when the tag script is enabled, so we don't mess with regular
|
||||
# clicks.
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
return
|
||||
post_begin_drag: (type) ->
|
||||
document.body.addClassName 'dragging-to-post'
|
||||
return
|
||||
post_end_drag: ->
|
||||
document.body.removeClassName 'dragging-to-post'
|
||||
@dragging_from_post = null
|
||||
return
|
||||
post_mouseup: (event, post_id) ->
|
||||
if event.button != 0
|
||||
return
|
||||
if !@dragging_from_post
|
||||
return
|
||||
if @mode == 'reparent-quick'
|
||||
if post_id
|
||||
notice 'Updating post'
|
||||
Post.update_batch [ {
|
||||
id: @dragging_from_post
|
||||
parent_id: post_id
|
||||
} ]
|
||||
@post_end_drag()
|
||||
return
|
||||
else if @mode == 'apply-tag-script'
|
||||
if post_id
|
||||
return
|
||||
|
||||
# We clicked or dragged some posts to apply a tag script; process it.
|
||||
tag_script = TagScript.TagEditArea.value
|
||||
TagScript.run @dragging_list, tag_script
|
||||
@dragging_from_post = null
|
||||
@dragging_active = false
|
||||
@dragging_list = null
|
||||
@dragging_hash = null
|
||||
return
|
||||
post_mouseover: (event, post_id) ->
|
||||
post = $('p' + post_id)
|
||||
style = get_style_for_mode(@mode)
|
||||
post.down('span').setStyle style
|
||||
if @mode != 'apply-tag-script'
|
||||
return
|
||||
if !@dragging_from_post
|
||||
return
|
||||
if post_id != @dragging_from_post
|
||||
@dragging_active = true
|
||||
@post_add_to_hovered_list post_id
|
||||
return
|
||||
post_mouseout: (event, post_id) ->
|
||||
post = $('p' + post_id)
|
||||
post.down('span').setStyle background: ''
|
||||
return
|
||||
apply_tag_script_to_all_posts: ->
|
||||
tag_script = TagScript.TagEditArea.value
|
||||
post_ids = Post.posts.inject([], (list, pair) ->
|
||||
list.push pair[0]
|
||||
list
|
||||
)
|
||||
TagScript.run post_ids, tag_script
|
||||
return
|
||||
|
||||
window.TagScript =
|
||||
TagEditArea: null
|
||||
load: ->
|
||||
@TagEditArea.value = Cookie.get('tag-script')
|
||||
return
|
||||
save: ->
|
||||
Cookie.put 'tag-script', @TagEditArea.value
|
||||
return
|
||||
init: (element, x) ->
|
||||
@TagEditArea = element
|
||||
TagScript.load()
|
||||
@TagEditArea.observe 'change', (e) ->
|
||||
TagScript.save()
|
||||
return
|
||||
@TagEditArea.observe 'focus', (e) ->
|
||||
Post.reset_tag_script_applied()
|
||||
return
|
||||
|
||||
# This mostly keeps the tag script field in sync between windows, but it
|
||||
# doesn't work in Opera, which sends focus events before blur events.
|
||||
Event.on window, 'unload', ->
|
||||
TagScript.save()
|
||||
return
|
||||
document.observe 'focus', (e) ->
|
||||
TagScript.load()
|
||||
return
|
||||
return
|
||||
parse: (script) ->
|
||||
script.match /\[.+?\]|\S+/g
|
||||
test: (tags, predicate) ->
|
||||
split_pred = predicate.match(/\S+/g)
|
||||
is_true = true
|
||||
split_pred.each (x) ->
|
||||
if x[0] == '-'
|
||||
if tags.include(x.substr(1, 100))
|
||||
is_true = false
|
||||
throw $break
|
||||
else
|
||||
if !tags.include(x)
|
||||
is_true = false
|
||||
throw $break
|
||||
return
|
||||
is_true
|
||||
process: (tags, command) ->
|
||||
if command.match(/^\[if/)
|
||||
match = command.match(/\[if\s+(.+?)\s*,\s*(.+?)\]/)
|
||||
if TagScript.test(tags, match[1])
|
||||
TagScript.process tags, match[2]
|
||||
else
|
||||
tags
|
||||
else if command == '[reset]'
|
||||
[]
|
||||
else if command[0] == '-' and command.indexOf('-pool:') != 0
|
||||
tags.reject (x) ->
|
||||
x == command.substr(1, 100)
|
||||
else
|
||||
tags.push command
|
||||
tags
|
||||
run: (post_ids, tag_script, finished) ->
|
||||
if !Object.isArray(post_ids)
|
||||
post_ids = $A([ post_ids ])
|
||||
commands = TagScript.parse(tag_script) or []
|
||||
posts = new Array
|
||||
post_ids.each (post_id) ->
|
||||
post = Post.posts.get(post_id)
|
||||
old_tags = post.tags.join(' ')
|
||||
commands.each (x) ->
|
||||
post.tags = TagScript.process(post.tags, x)
|
||||
return
|
||||
posts.push
|
||||
id: post_id
|
||||
old_tags: old_tags
|
||||
tags: post.tags.join(' ')
|
||||
return
|
||||
notice 'Updating ' + posts.length + (if post_ids.length == 1 then ' post' else ' posts')
|
||||
Post.update_batch posts, finished
|
||||
return
|
Loading…
x
Reference in New Issue
Block a user