repository_directories.js.coffee revision 9399847ffc7503de7fc4cd5738acf0bc0177843e
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen$ ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde if $('#repository_directories_form_line_prototype').length > 0
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde clone_element = (source_matcher) ->
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen source_el = $($(source_matcher)[0])
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde clone_el = source_el.clone()
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde clone_el.attr('id', null)
9bb91f1dbf7cf8cfbd2df7784101df98d59fb46dTimo Sirainen clone_el
bdd36cfdba3ff66d25570a9ff568d69e1eb543cfTimo Sirainen
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde clone_and_prepend_to = (source_matcher, target_matcher, callback) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde target_el = $($(target_matcher)[0])
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen clone_el = clone_element(source_matcher)
a43145989f87ec68754e21234e7b6d892c4a4421Timo Sirainen clone_el.prependTo(target_el)
d99107ddf4d9bccb710994482daf65276a9d6321Timo Sirainen callback(clone_el) if callback
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde setup_form_clone = (clone_el) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde setup_form_submission_handling(clone_el)
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde animateIn(clone_el)
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen $('input[name="repository_directory[name]"]', clone_el).focus()
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen remove_form_clone = (remove_el, callback) ->
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen animateOut(remove_el, () ->
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen remove_el.remove()
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde callback() if callback
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen )
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen add_to_table = (link_el) ->
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen table = $('#directory-listing')
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen table.prepend(link_el)
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen animateIn(link_el)
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen animateIn = (element) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde element.stop(true, true).fadeIn({queue: false}).
0f4fb03953afa4a39d5e32e9ca0527c0a84f9aeeTimo Sirainen css({display: 'none'}).slideDown()
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde animateOut = (element, callback) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde element.stop(true, true).fadeOut({queue: false}).slideUp(callback)
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen remove_empty_repository_hint = () ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde hint_line = $('#empty_repository_hint')
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen animateOut(hint_line)
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen show_flash_message = (message) ->
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen flash_messages_el = $('.flash-messages')
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen flash_prototype_el = $('#repository_directories_flash_message_prototype')
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde clone_and_prepend_to(flash_prototype_el, flash_messages_el, (clone_el) ->
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen clone_el.append(message)
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen )
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde directory_link = (link) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde line_el = clone_element('#repository_directories_line_prototype')
9f10cc61ec303351b43e54155c86699ef53cb8beTimo Sirainen anchor_el = $('a', line_el)
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen anchor_el.attr('href', link.url)
3b22894b8805b186c73d8b754001e8d7e944be85Timo Sirainen anchor_el.html(link.text)
9f10cc61ec303351b43e54155c86699ef53cb8beTimo Sirainen console.log(line_el)
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen line_el
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen handle_form_submission = (event) ->
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen form = $(this)
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen values = form.serialize()
fc464e5b2b2ab4d415a5d5b90ce4475d34620a75Timo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen success_callback = (json, text_status, jqXHR) ->
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen html = json.html
0f4fb03953afa4a39d5e32e9ca0527c0a84f9aeeTimo Sirainen form_tr = form.parent().parent()
0f4fb03953afa4a39d5e32e9ca0527c0a84f9aeeTimo Sirainen remove_form_clone(form_tr, () -> add_to_table(directory_link(json.link)))
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen remove_empty_repository_hint()
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen show_flash_message(json.text)
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen error_callback = (jqXHR) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde form.html(jqXHR.responseText)
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen $.ajax({
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde type: 'POST'
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen url: $(this).attr('action'),
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde data: values,
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen success: success_callback,
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen error: error_callback
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen })
c5a6a6565be93224fc26522eda855b0990f256e8Timo Sirainen
4b1359bde7d32667197548652a4b4f540062e2acTimo Sirainen # Return false to prevent sending the form.
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde # For some reason event.preventDefault() does not work.
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde false
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
64bfe7b4a42512971db154937905dfa2bdb9cf2cTimo Sirainen setup_form_submission_handling = (form_parent_el) ->
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde form_el = $('form', $(form_parent_el))
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde form_el.unbind('submit').submit(handle_form_submission)
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen form_prototype_el = $($('#repository_directories_form_line_prototype')[0])
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen setup_form_submission_handling(form_prototype_el)
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen btn_create_el = $('#create_subdirectory')
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen btn_create_el.click(() -> clone_and_prepend_to(
fc71e94957d0c2959a609450a2f303640d681858Sascha Wilde form_prototype_el, form_prototype_el.parent(), setup_form_clone))
aba994a4e79a020b4748e0ceffc194e5a18e1d1aTimo Sirainen