def sortable_element_js(element_id, **options):
    options.setdefault('with', "Sortable.serialize('%s')" % element_id)
    options.setdefault('onUpdate', "function(){%s}" % remote_function(**options))
    for k in options.keys():
        if k in AJAX_OPTIONS: del options[k]
    
    for option in ['tag', 'overlap', 'constraint', 'handle']:
        if options.has_key(option) and options[option]:
            options[option] = "'%s'" % options[option]
    
    if options.has_key('containment'):
        options['containment'] = array_or_string_for_javascript(options['containment'])
    if options.has_key('only'):
        options['only'] = array_or_string_for_javascript(options['only'])
    
    return "Sortable.create(%s, %s)" % (json.dumps(element_id), options_for_javascript(options))
def sortable_element_js(element_id, **options):
    if not isinstance(element_id, basestring):
        raise ValueError('Argument element_id must be a string')
    options.setdefault('with_', "Sortable.serialize('%s')" % element_id)
    options.setdefault('onUpdate', "function(){%s}" % remote_function(**options))
    for k in options.keys():
        if k in AJAX_OPTIONS: del options[k]
    
    for option in ['tag', 'overlap', 'constraint', 'handle']:
        if options.has_key(option) and options[option]:
            options[option] = "'%s'" % options[option]
    
    if options.has_key('containment'):
        options['containment'] = array_or_string_for_javascript(options['containment'])
    if options.has_key('only'):
        options['only'] = array_or_string_for_javascript(options['only'])
    
    return "Sortable.create(%s, %s)" % (_elements_to_js(element_id), options_for_javascript(options))
def sortable_element_js(element_id, **options):
    options.setdefault('with', "Sortable.serialize('%s')" % element_id)
    options.setdefault('onUpdate',
                       "function(){%s}" % remote_function(**options))
    for k in options.keys():
        if k in AJAX_OPTIONS: del options[k]

    for option in ['tag', 'overlap', 'constraint', 'handle']:
        if options.has_key(option) and options[option]:
            options[option] = "'%s'" % options[option]

    if options.has_key('containment'):
        options['containment'] = array_or_string_for_javascript(
            options['containment'])
    if options.has_key('only'):
        options['only'] = array_or_string_for_javascript(options['only'])

    return "Sortable.create(%s, %s)" % (json.dumps(element_id),
                                        options_for_javascript(options))
def drop_receiving_element_js(element_id, **options):
    options.setdefault('with_', "'id=' + encodeURIComponent(element.id)")
    options.setdefault('onDrop', "function(element){%s}" % remote_function(**options))
    for k in options.keys():
        if k in AJAX_OPTIONS: del options[k]
    
    if options.has_key('accept'):
        options['accept'] = array_or_string_for_javascript(options['accept'])
    if options.has_key('hoverclass'):
        options['hoverclass'] = "'%s'" % options['hoverclass']
    
    return "Droppables.add(%s, %s)" % (_elements_to_js(element_id), options_for_javascript(options))