+ die "Missing parameter 'requirement_spec_id'" if !$::form->{requirement_spec_id};
+
+ $self->item(SL::DB::RequirementSpecItem->new(requirement_spec_id => $::form->{requirement_spec_id}));
+
+ my $insert_after = $::form->{id} ? SL::DB::RequirementSpecItem->new(id => $::form->{id})->load->get_section->id : undef;
+ my $html = $self->render('requirement_spec_item/_section_form', { output => 0 }, id_base => 'new_section', insert_after => $insert_after);
+
+ SL::ClientJS->new
+ ->remove('#new_section_form')
+ ->hide('#column-content > *')
+ ->appendTo($html, '#column-content')
+ ->focus('#new_section_title')
+ ->render($self);
+}
+
+sub action_ajax_create {
+ my ($self, %params) = @_;
+
+ my $js = SL::ClientJS->new;
+ my $prefix = $::form->{form_prefix} || die "Missing parameter 'form_prefix'";
+ my $attributes = $::form->{$prefix} || die "Missing parameter group '${prefix}'";
+ my $insert_after = delete $attributes->{insert_after};
+
+ my @errors = $self->item(SL::DB::RequirementSpecItem->new(%{ $attributes }))->validate;
+ return $js->error(@errors)->render($self) if @errors;
+
+ $self->item->save;
+ $self->item->add_to_list(position => 'after', reference => $insert_after) if $insert_after;
+
+ my $type = $self->item->get_type;
+
+ if ($type eq 'section') {
+ my $node = $self->presenter->requirement_spec_item_jstree_data($self->item);
+ return $self->render_list($js, $self->item)
+ ->jstree->create_node('#tree', $insert_after ? ('#fb-' . $insert_after, 'after') : ('#sections', 'last'), $node)
+ ->jstree->select_node('#tree', '#fb-' . $self->item->id)
+ ->render($self);
+ }
+
+ die 'TODO: create item';