Commit 6cf9b937 authored by Serge S. Koval's avatar Serge S. Koval

Fixed #433. Reworked client-side form logic

parent 0b81e59d
...@@ -27,13 +27,13 @@ form.search-form { ...@@ -27,13 +27,13 @@ form.search-form {
margin: 4px 0 0 0; margin: 4px 0 0 0;
} }
form.search-form a.clear i { form.search-form .clear i {
margin: 2px 0 0 0; margin: 2px 0 0 0;
} }
/* Filters */ /* Filters */
table.filters { table.filters {
border-collapse: none; border-collapse: collapse;
border-spacing: 4px; border-spacing: 4px;
} }
...@@ -70,14 +70,20 @@ table.filters { ...@@ -70,14 +70,20 @@ table.filters {
} }
/* Inline forms */ /* Inline forms */
.fa-inline-field { .inline-field {
padding-bottom: 0.5em; padding-bottom: 0.5em;
} }
.fa-inline-field-control { .inline-field-control {
float: right; float: right;
} }
.inline-field .inline-form-field {
border-left: 1px solid #eeeeee;
padding-left: 8px;
margin-bottom: 4px;
}
/* Image thumbnails */ /* Image thumbnails */
.image-thumbnail img { .image-thumbnail img {
max-width: 100px; max-width: 100px;
...@@ -95,13 +101,6 @@ table.filters { ...@@ -95,13 +101,6 @@ table.filters {
margin-left: 110px; margin-left: 110px;
} }
/* Inline forms */
.inline-field .inline-form {
border-left: 1px solid #eeeeee;
padding-left: 8px;
margin-bottom: 4px;
}
/* Patch Select2 */ /* Patch Select2 */
.select2-results li { .select2-results li {
min-height: 24px !important; min-height: 24px !important;
......
...@@ -127,24 +127,34 @@ ...@@ -127,24 +127,34 @@
* Add inline form field * Add inline form field
* *
* @method addInlineField * @method addInlineField
* @param {String} id Form ID * @param {Node} el Button DOM node
* @param {Node} el Form element * @param {String} elID Form ID
* @param {String} template Form template
*/ */
this.addInlineField = function(id, el, template) { this.addInlineField = function(el, elID) {
var $el = $(el); // Get current inline field
var $template = $($(template).text()); var $el = $(el).closest('.inline-field');
// Figure out new field ID // Figure out new field ID
var lastField = $el.children('.fa-inline-field').last(); var id = elID;
var $parentForm = $el.parent().closest('.inline-field');
if ($parentForm.length > 0) {
id = $parentForm.attr('id') + '-' + elID;
}
var $fieldList = $el.find('> .inline-field-list');
var $lastField = $fieldList.children('.inline-field').last();
var prefix = id + '-0'; var prefix = id + '-0';
if (lastField.length > 0) { if ($lastField.length > 0) {
var parts = $(lastField[0]).attr('id').split('-'); var parts = $lastField.attr('id').split('-');
idx = parseInt(parts[parts.length - 1], 10) + 1; idx = parseInt(parts[parts.length - 1], 10) + 1;
prefix = id + '-' + idx; prefix = id + '-' + idx;
} }
// Get tempalate
var $template = $($el.find('> .inline-field-template').text());
// Set form ID // Set form ID
$template.attr('id', prefix); $template.attr('id', prefix);
...@@ -162,7 +172,7 @@ ...@@ -162,7 +172,7 @@
me.attr('name', name); me.attr('name', name);
}); });
$template.appendTo($el); $template.appendTo($fieldList);
// Select first field // Select first field
$('input:first', $template).focus(); $('input:first', $template).focus();
...@@ -198,10 +208,10 @@ ...@@ -198,10 +208,10 @@
}; };
// Add on event handler // Add on event handler
$('body').on('click', '.fa-remove-field' , function(e) { $('body').on('click', '.inline-remove-field' , function(e) {
e.preventDefault(); e.preventDefault();
var form = $(this).closest('.fa-inline-field'); var form = $(this).closest('.inline-field');
form.remove(); form.remove();
}); });
......
{% import 'admin/lib.html' as lib with context %} {% import 'admin/lib.html' as lib with context %}
<div class="fa-inline-field"> <div class="inline-form-field">
{{ lib.render_form_fields(field.form, form_opts=form_opts) }} {{ lib.render_form_fields(field.form, form_opts=form_opts) }}
</div> </div>
{% macro render_inline_fields(field, template, render, check=None) %} {% macro render_inline_fields(field, template, render, check=None) %}
<div class="inline-field"> <div class="inline-field">
<div id="{{ field.id }}-fields"> <div class="inline-field-list">
{% for subfield in field %} {% for subfield in field %}
<div id="{{ subfield.id }}" class="fa-inline-field"> <div id="{{ subfield.id }}" class="inline-field">
{%- if not check or check(subfield) %} {%- if not check or check(subfield) %}
{% if subfield.get_pk and subfield.get_pk() %} {% if subfield.get_pk and subfield.get_pk() %}
<div class="fa-inline-field-control"> <div class="inline-field-control">
<input type="checkbox" name="del-{{ subfield.id }}" id="del-{{ subfield.id }}" /> <input type="checkbox" name="del-{{ subfield.id }}" id="del-{{ subfield.id }}" />
<label for="del-{{ subfield.id }}" style="display: inline">{{ _gettext('Delete?') }}</label> <label for="del-{{ subfield.id }}" style="display: inline">{{ _gettext('Delete?') }}</label>
</div> </div>
{% else %} {% else %}
<div class="fa-inline-field-control"> <div class="inline-field-control">
<a href="javascript:void(0)" class="fa-remove-field"><i class="icon-remove"></i></a> <a href="javascript:void(0)" class="inline-remove-field"><i class="icon-remove"></i></a>
</div> </div>
{% endif %} {% endif %}
{%- endif -%} {%- endif -%}
...@@ -20,16 +20,16 @@ ...@@ -20,16 +20,16 @@
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
<div id="{{ field.id }}-template" class="hide"> <div class="inline-field-template hide">
{% filter forceescape %} {% filter forceescape %}
<div class="fa-inline-field"> <div class="inline-field">
<div class="fa-inline-field-control"> <div class="inline-field-control">
<a href="javascript:void(0)" class="fa-remove-field"><i class="icon-remove"></i></a> <a href="javascript:void(0)" class="inline-remove-field"><i class="icon-remove"></i></a>
</div> </div>
{{ render(template) }} {{ render(template) }}
</div> </div>
{% endfilter %} {% endfilter %}
</div> </div>
<a id="{{ field.id }}-button" href="javascript:void(0)" class="btn" onclick="faForm.addInlineField('{{ field.id }}', '#{{ field.id }}-fields', '#{{ field.id }}-template');">{{ _gettext('Add') }} {{ field.label.text }}</a> <a id="{{ field.id }}-button" href="javascript:void(0)" class="btn" onclick="faForm.addInlineField(this, '{{ field.id }}');">{{ _gettext('Add') }} {{ field.label.text }}</a>
</div> </div>
{% endmacro %} {% endmacro %}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment