Difference between revisions of "Include Javascript in the workflow"

From EPrints Documentation
Jump to: navigation, search
(Custom input renderer)
(Custom input renderer)
Line 9: Line 9:
 
You can overwrite the input renderer for the field you wish to modify. This gives you access to information used to render the field.
 
You can overwrite the input renderer for the field you wish to modify. This gives you access to information used to render the field.
  
( $field, $session, $current_value, $dataset, $staff, $hidden_fields, $object, $basename )
+
<source lang="perl">
 +
          {
 +
            'name' => 'courses',
 +
            'type' => 'text',
 +
    'multiple' => 1,
 +
    'text_index' => 1,
 +
    'render_input' => sub {
 +
                    ( $field, $repository, $current_value, $dataset, $staff, $hidden_fields, $object, $basename ) = @_;
 +
                   
 +
                    my $dom = $field->render_input_field_actual( $repository, $current_value, $dataset, $staff, $hidden_fields, $object, $basename );
 +
                    my $script = $repository->xml->create_element("script", type=>"text/javascript");
 +
                    $script->appendChild($repository->create_text_node('
 +
// your javascript here '." which can have $perl interlaced "
 +
                    ));
 +
            }
 +
          },
 +
</source>
  
 
==XHTML Component==
 
==XHTML Component==

Revision as of 20:54, 17 June 2015

Sometimes you need to augment an EPrints workflow in a specific way. One of the ways you can do this is using javascript but it is not immediately clear how to do that. There are several options available which may suit what you need to do.

Pure Javascript

This should be the prefered method although it is not always straight forward to use depending what your trying to do. EPrints stores javascript files in <eprints_root>/archives/<archive_id>/cfg/static/javascript/auto/ and it EPrints ships with PrototypeJS. If your workflow problem is specific enough you can simply us $$('any-css-selectors').whateveryouneedtodo()

Custom input renderer

You can overwrite the input renderer for the field you wish to modify. This gives you access to information used to render the field.

          {
            'name' => 'courses',
            'type' => 'text',
	    'multiple' => 1,
	    'text_index' => 1,
	    'render_input' => sub {
                    ( $field, $repository, $current_value, $dataset, $staff, $hidden_fields, $object, $basename ) = @_;
                    
                    my $dom = $field->render_input_field_actual( $repository, $current_value, $dataset, $staff, $hidden_fields, $object, $basename );
                    my $script = $repository->xml->create_element("script", type=>"text/javascript");
                    $script->appendChild($repository->create_text_node('
// your javascript here '." which can have $perl interlaced "
                    ));
             }
          },

XHTML Component

You if you are in hurry or prototyping then you can use a HTML Component

<component type='XHTML'>
<script type='text/javascript'>
        //your javascript goes here
</script>
</component>

The downside of this approach is it leaves a tiny bit of workflow component floating in your workflow so you probably wouldn't use it in production.