X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/mfinanz.git/blobdiff_plain/f10e650c26ed930ce04f4ca1bd3f21d0036e5ba4..ecce066d5d1ab4eaf97e65d0fb0c42fd824f04fe:/SL/Controller/RequirementSpecTextBlock.pm?ds=inline diff --git a/SL/Controller/RequirementSpecTextBlock.pm b/SL/Controller/RequirementSpecTextBlock.pm index e7964a6a1..140a104c8 100644 --- a/SL/Controller/RequirementSpecTextBlock.pm +++ b/SL/Controller/RequirementSpecTextBlock.pm @@ -7,11 +7,11 @@ use parent qw(SL::Controller::Base); use Time::HiRes (); use SL::ClientJS; +use SL::Clipboard; use SL::DB::RequirementSpec; use SL::DB::RequirementSpecPredefinedText; use SL::DB::RequirementSpecTextBlock; use SL::Helper::Flash; -use SL::JSON; use SL::Locale::String; use Rose::Object::MakeMethods::Generic @@ -20,7 +20,7 @@ use Rose::Object::MakeMethods::Generic 'scalar --get_set_init' => [ qw(predefined_texts) ], ); -__PACKAGE__->run_before('load_requirement_spec_text_block', only => [qw(ajax_edit ajax_update ajax_delete dragged_and_dropped)]); +__PACKAGE__->run_before('load_requirement_spec_text_block', only => [qw(ajax_edit ajax_update ajax_delete ajax_flag dragged_and_dropped ajax_copy)]); # # actions @@ -49,6 +49,8 @@ sub action_ajax_list { my $html = $self->render('requirement_spec_text_block/ajax_list', { output => 0 }, TEXT_BLOCKS => $text_blocks, output_position => $new_where); $js->html('#column-content', $html) + ->val('#current_content_type', 'text-blocks-' . (0 == $new_where ? 'front' : 'back')) + ->val('#current_content_id', $::form->{clicked_id}); } $self->render($js); @@ -125,6 +127,7 @@ sub action_ajax_create { SL::ClientJS->new ->replaceWith('#' . $::form->{form_prefix} . '_form', $html) ->jstree->create_node('#tree', $insert_after ? ('#tb-' . $insert_after, 'after') : ('#tb-' . ($attributes->{output_position} == 0 ? 'front' : 'back'), 'last'), $node) + ->jstree->select_node('#tree', '#tb-' . $self->text_block->id) ->render($self); } @@ -171,6 +174,19 @@ sub action_ajax_delete { ->render($self); } +sub action_ajax_flag { + my ($self) = @_; + + $self->text_block->update_attributes(is_flagged => !$self->text_block->is_flagged); + + my $current_where = $self->output_position_from_id($::form->{current_content_id}, $::form->{current_content_type}); + + SL::ClientJS->new + ->action_if($current_where == $self->text_block->output_position, 'toggleClass', '#text-block-' . $self->text_block->id, 'flagged') + ->toggleClass('#tb-' . $self->text_block->id, 'flagged') + ->render($self); +} + sub action_dragged_and_dropped { my ($self) = @_; @@ -225,7 +241,7 @@ sub action_dragged_and_dropped { if ($prior_text_block) { $js->insertAfter($html, '#text-block-' . $prior_text_block->id); } else { - $js->appendTo($html, '#text-block-list'); + $js->prependTo($html, '#text-block-list'); } } } @@ -233,6 +249,42 @@ sub action_dragged_and_dropped { $self->render($js); } +sub action_ajax_copy { + my ($self, %params) = @_; + + SL::Clipboard->new->copy($self->text_block); + SL::ClientJS->new->render($self); +} + +sub action_ajax_paste { + my ($self, %params) = @_; + + my $copied = SL::Clipboard->new->get_entry(qr/^RequirementSpecTextBlock$/); + if (!$copied) { + return SL::ClientJS->new + ->error(t8("The clipboard does not contain anything that can be pasted here.")) + ->render($self); + } + + my $js = SL::ClientJS->new; + my $current_output_position = $self->output_position_from_id($::form->{current_content_id}, $::form->{current_content_type}); + my $new_output_position = $::form->{id} ? $self->output_position_from_id($::form->{id}) : $::form->{output_position}; + my $front_back = 0 == $new_output_position ? 'front' : 'back'; + + $self->text_block($copied->to_object); + $self->text_block->update_attributes(requirement_spec_id => $::form->{requirement_spec_id}, output_position => $new_output_position); + $self->text_block->add_to_list(position => 'after', reference => $::form->{id}) if $::form->{id}; + + if ($current_output_position == $new_output_position) { + my $html = $self->render('requirement_spec_text_block/_text_block', { output => 0 }, text_block => $self->text_block); + $js->action($::form->{id} ? 'insertAfter' : 'appendTo', $html, '#text-block-' . ($::form->{id} || 'list')); + } + + my $node = $self->presenter->requirement_spec_text_block_jstree_data($self->text_block); + $js->jstree->create_node('#tree', $::form->{id} ? ('#tb-' . $::form->{id}, 'after') : ("#tb-${front_back}", 'last'), $node) + ->render($self); +} + # # filters # @@ -259,7 +311,7 @@ sub output_position_from_id { return undef if $type !~ m/text-block/; } - my $text_block = SL::DB::Manager::RequirementSpecTextBlock->find_by(id => $id); + my $text_block = $id ? SL::DB::Manager::RequirementSpecTextBlock->find_by(id => $id) : undef; return $text_block ? $text_block->output_position : undef; }