forked from fredwu/angel_nest
/
editable.js.coffee
131 lines (110 loc) · 4.23 KB
/
editable.js.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
jQuery ->
# inline editable controlls
$('.inline_editable .editable').livequery(->
$(@).hide()
)
$('.inline_editable_container .mini_profile').live('mouseenter', ->
if $('.inline_editable .closable', @).length > 0
$('.inline_editable .closable', @).show()
else
$('.inline_editable .editable', @).show()
).live('mouseleave', ->
$('.inline_editable .editable', @).not('.closable').hide()
)
# team member profile row wrappers
$('#profile_team ul.resource_list > li:even').livequery(->
$(@).wrap('<div class="profile_row" />')
)
$('#profile_team ul.resource_list > li').livequery(->
$(@).each(->
$(@).prev().append($(@))
)
)
flip_cancel_label = (parent) ->
$('a', parent).text(window.label.cancel)
parent.show().addClass('closable')
add_action = (parent) ->
target_link = $('a', parent).attr('href')
if parent.next().hasClass('inline_edit')
parent.next().hide().slideDown(->
flip_cancel_label(parent)
)
else
parent.after('<div class="inline_edit"></div>')
$.get(target_link, (partial) ->
parent.next().hide().html(partial).slideDown(->
flip_cancel_label(parent)
)
)
edit_action = (parent) ->
edit_target = parent.data('edit_target')
cached_html = $(edit_target).html()
target_link = $(parent).data('edit_href') || $('a', parent).attr('href')
$(edit_target).wrapInner('<div class="cached" />') unless $('.cached', edit_target).length > 0
$('.cached', edit_target).after('<div class="inline_edit"></div>') unless $('.inline_edit', edit_target).length > 0
$('.inline_edit', edit_target).hide()
$('.cached', edit_target).slideUp(->
$.get(target_link, (partial) ->
$('.inline_edit', edit_target).html(partial).slideDown(->
flip_cancel_label(parent)
)
)
)
inline_action = (parent) ->
target_link = $('a', parent).attr('href')
edit_target = parent.parent().parent()
parent.parent().after('<div class="inline_edit inline_popup"></div>') unless $('.inline_edit', edit_target).length > 0
$.get(target_link, (partial) ->
$('.inline_edit', edit_target).hide().html(partial).slideDown(->
parent.parent().show()
parent.siblings().hide()
)
flip_cancel_label(parent)
)
$('.editable a').live('click', (e) ->
parent = $(@).parent()
unless parent.hasClass('closable')
add_element = parent.data('add_element')
edit_target = parent.data('edit_target')
inline_editable = parent.parent().hasClass('inline_editable')
add_action(parent) and e.preventDefault() if add_element
edit_action(parent) and e.preventDefault() if edit_target
inline_action(parent) and e.preventDefault() if inline_editable
)
$('.closable a').live('click', (e) ->
parent = $(@).parent()
add_element = parent.data('add_element') and parent.next().parent()
edit_target = parent.data('edit_target')
inline_editable = parent.parent().hasClass('inline_editable') and parent.parent().next().parent()
$('> .inline_edit', (add_element or edit_target or inline_editable)).slideUp(->
if add_element
text_label = window.label.add
else if edit_target
text_label = window.label.edit
$('.cached', parent.data('edit_target')).slideDown()
else if inline_editable
text_label = parent.data('text')
parent.hide()
$('a', parent).text(text_label)
parent.removeClass('closable')
)
e.preventDefault()
)
$('.inline_editable_container').delegate('form', 'submit', ->
return true if $(@).parents('.follow_button').length > 0
edit_target = $(@).parent().parent()
inline_popup = $(@).parent().hasClass('inline_popup') or edit_target.hasClass('inline_popup')
target_link = edit_target.data('target_link')
$(@).ajaxSubmit(
success: -> $('.inline_edit', edit_target).slideUp(->
$.get(target_link, (partial) ->
if inline_popup
$(edit_target.data('edit_target') or edit_target).fadeTo(300, 0.2).html(partial).fadeTo(700, 1)
else
$('.cached', edit_target).html(partial)
) if target_link
$('.closable a').click()
)
)
false
)