You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
6.9 KiB
223 lines
6.9 KiB
#= require jquery
|
|
#= require jquery_ujs
|
|
#= require jquery.ui.sortable
|
|
# = #require jquery.turbolinks
|
|
# = #require turbolinks
|
|
#= require foundation
|
|
|
|
# FRONT END
|
|
|
|
# JS HANDLEBARS TEMPLATES
|
|
# require handlebars.runtime
|
|
# require jquery_nested_form
|
|
|
|
# I18n
|
|
|
|
'use strict'
|
|
|
|
try Typekit.load() catch
|
|
|
|
startSpinner = ->
|
|
$('#loading-spinner').show()
|
|
|
|
stopSpinner = ->
|
|
$('#loading-spinner').fadeOut()
|
|
|
|
# Turbolinks Spinner
|
|
document.addEventListener 'page:fetch', startSpinner
|
|
document.addEventListener 'page:receive', stopSpinner
|
|
|
|
readURL = (input) ->
|
|
reader = null
|
|
if input.files && input.files[0]
|
|
reader = new FileReader()
|
|
reader.readAsDataURL input.files[0]
|
|
reader.onload = (e) ->
|
|
$(input).prev().attr('src', e.target.result)
|
|
|
|
createOverlay = () ->
|
|
if $('#overlay').length > 0
|
|
$('#overlay').remove()
|
|
$('body').append('<div id="overlay" class="loading"><div id="overlay-inner"></div></div>')
|
|
$('#overlay-dlg')
|
|
|
|
setOverlayHTML = (html) ->
|
|
$('#overlay-inner').append('<div id="overlay-dlg">' + html + '</div>');
|
|
$('#overlay').removeAttr('class').click(destroyOverlay)
|
|
|
|
destroyOverlay = () ->
|
|
$('#overlay').remove()
|
|
|
|
selectA = (type, event, $emptyObj) ->
|
|
event.preventDefault()
|
|
# = $(this)
|
|
$overlay = createOverlay()
|
|
objs = []
|
|
$('.' + type + '-select-field.added input.' + type + '-id').each () -> obj.push($(this).val())
|
|
$.post window.location.href.replace(/^(.*\/)(.+?)$/, '$1non$2'), {added: objs},
|
|
(html) ->
|
|
setOverlayHTML(html).addClass('' + type + '-select')
|
|
$('#select-' + type + '-list a').click (event) ->
|
|
event.preventDefault()
|
|
|
|
$this = $(this)
|
|
$old_field = $emptyObj.closest('.field')
|
|
$field = $old_field.clone()
|
|
|
|
oldID = parseInt($old_field.find('input[type="hidden"]').attr('name').match(/\[(\d+)\]\[id\]/)[1])
|
|
newID = oldID + 1
|
|
|
|
$field.find('input.' + type + '-id').val($this.data().id)
|
|
$field.find('.' + type + 'name').html($this.find('.' + type + 'name').html()).before('<img src="' + $this.find('img').attr('src') + '" />')
|
|
$field.find('.select-' + type + '').remove()
|
|
$field.removeClass('new').addClass('added')
|
|
$old_field.html (i, html) ->
|
|
pregex = new RegExp('\\[' + oldID + '\\]', 'g');
|
|
aregex = new RegExp('_' + oldID + '_', 'g');
|
|
html.replace(pregex, '[' + newID + ']').replace(aregex, '_' + newID + '_')
|
|
$field.insertBefore($old_field)
|
|
$('a.select-' + type + '').click (event) -> selectA(type, event, $(this))
|
|
|
|
destroyOverlay()
|
|
return
|
|
, 'html'
|
|
|
|
updateFormField = () ->
|
|
$form = $('form#new_registration_form_field')
|
|
$field_type = $form.find('#registration_form_field_field_type')
|
|
field_type = $field_type.val()
|
|
$form.find('.registration-form-field-field').hide()
|
|
$form.find('.registration-form-field-field.field-type-' + field_type).show()
|
|
|
|
updateFormFieldForm = () ->
|
|
$('form #registration_form_field_field_type').change updateFormField
|
|
updateFormField()
|
|
$('form#new_registration_form_field').submit (event) ->
|
|
event.preventDefault()
|
|
$form = $(this)
|
|
serialized = $form.serialize()
|
|
$.post $form.attr('action'), serialized,
|
|
(json) ->
|
|
$form.replaceWith(json.form)
|
|
$('#registration-form-field-list').html(json.list)
|
|
updateFormFieldForm()
|
|
, 'json'
|
|
updateFormFieldList = () ->
|
|
$('#registration-form-field-list .add-form-field').click () ->
|
|
$.post 'form/add-field', {field: $(this).data().id},
|
|
(json) ->
|
|
$('#conference-form').html(json.form)
|
|
$('#registration-form-field-list').html(json.list)
|
|
updateFormFieldList()
|
|
return
|
|
$('#conference-form .remove-form-field').click () ->
|
|
$.post 'form/remove-field', {field: $(this).data().id},
|
|
(json) ->
|
|
$('#conference-form').html(json.form)
|
|
$('#registration-form-field-list').html(json.list)
|
|
updateFormFieldList()
|
|
return
|
|
|
|
saveTranslation = ($td, $move_to, auto_translate) ->
|
|
val = ''
|
|
do_auto_translate = true
|
|
if typeof auto_translate == "undefined" || !auto_translate
|
|
val = $td.find('textarea').val()
|
|
do_auto_translate = false
|
|
key = $td.parent().data().key
|
|
params = {translationkey: key, translationvalue: val, translationlang: window.location.href.replace(/^.*\/(\w+)\/$/, '$1')}
|
|
if do_auto_translate
|
|
params['auto_translate'] = true
|
|
$.post '/translate/', params,
|
|
(json) ->
|
|
#console.log json
|
|
$td.html(json.translation)
|
|
if $td.parent().hasClass('not-exists')
|
|
$td.parent().removeClass('not-exists')
|
|
$td.parent().addClass('exists')
|
|
$('.translation-form').remove()
|
|
if typeof $move_to != "undefined" && $move_to
|
|
startTranslating $move_to
|
|
return
|
|
return
|
|
|
|
stopTranslating = () -> $('.translation-form').remove()
|
|
|
|
startTranslating = ($td) ->
|
|
stopTranslating()
|
|
value = if $td.parent().hasClass('not-exists') then '' else $td.html().trim()
|
|
$tr = $td.parent()
|
|
key = $tr.data().key
|
|
$td.append('<div class="translation-form"><textarea>' + value + '</textarea><button class="small" data-key="' + key + '">Save</textarea>')
|
|
$textarea = $td.find('textarea')
|
|
$textarea.select()
|
|
$td.find('.translation-form button').click () -> saveTranslation($td)
|
|
$textarea.keydown (event) ->
|
|
if event.keyCode == 9
|
|
event.preventDefault()
|
|
$new_tr = if event.shiftKey then $tr.prev() else $tr.next()
|
|
saveTranslation $td, $new_tr.find('.value')
|
|
else if event.keyCode == 27
|
|
stopTranslating()
|
|
return
|
|
return
|
|
|
|
$ ->
|
|
$(document).foundation();
|
|
$('.field.country-select select').change () ->
|
|
$country = $(this)
|
|
country = $country.val()
|
|
$territory = $('.field.subregion-select select')
|
|
if $territory.data().country == country
|
|
$territory.removeClass('can cant').addClass('can')
|
|
return
|
|
|
|
$.post '/location/territories', {country: country},
|
|
(json) ->
|
|
$territory.html('')
|
|
if json && Object.keys(json).length
|
|
$.each json, (code, name) ->
|
|
$territory.append($('<option>').text(name).attr('value', code))
|
|
return
|
|
$territory.removeClass('can cant').addClass('can')
|
|
$territory.data().country = country
|
|
else
|
|
$territory.removeClass('can cant').addClass('cant')
|
|
return
|
|
, 'json'
|
|
|
|
return
|
|
|
|
$('img + input[type="file"]').change () ->
|
|
readURL(this);
|
|
|
|
$('a.select-user, a.select-organization').click (event) -> selectA($(this).attr('class').match(/(^|\s)select\-([^\s]+)/)[2], event, $(this))
|
|
updateFormFieldForm()
|
|
updateFormFieldList()
|
|
|
|
$('ul.sortable').sortable
|
|
handle: '.drag-sort',
|
|
items: 'li',
|
|
update: (event, props) ->
|
|
$(this).children().each (index, child) ->
|
|
$(child).find('.sortable-position').val(index + 1)
|
|
url = $(this).data().url
|
|
if url
|
|
data = $(this).find('input, select, textarea').serialize()
|
|
$.post url, data#,
|
|
# (json) ->
|
|
# console.log json
|
|
#, 'json'
|
|
$('table#translations td.value').click () ->
|
|
$this = $(this)
|
|
if !$this.find('.translation-form').length
|
|
startTranslating($this)
|
|
if $('table#translations').length
|
|
$(document).click (event) ->
|
|
$target = $(event.target)
|
|
if $target.closest('table#translations').length < 1 && !$target.hasClass('auto-translate')
|
|
stopTranslating()
|
|
$('.auto-translate').click (event) ->
|
|
event.preventDefault()
|
|
$td = $(this).parent()
|
|
saveTranslation($td, null, true)
|