Annotation of loncom/homework/drawimage.pm, revision 1.14.2.1

1.1       albertel    1: # The LearningOnline Network with CAPA
                      2: # programatic image drawing
                      3: #
1.14.2.1! raeburn     4: # $Id: drawimage.pm,v 1.14 2024/04/09 20:01:31 raeburn Exp $
1.1       albertel    5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
                     28: 
                     29: package Apache::drawimage;
                     30: use strict;
                     31: use Apache::loncommon;
1.12      raeburn    32: use Apache::lonnet;
                     33: use Apache::lonxml;
1.14      raeburn    34: use Apache::edit;
1.9       www        35: use lib '/home/httpd/lib/perl/';
1.12      raeburn    36: use Time::HiRes qw(gettimeofday);
1.9       www        37: use LONCAPA;
                     38:  
1.1       albertel   39: 
                     40: my %args;
                     41: my $cgi_id;
1.7       albertel   42: my @cgi_ids;
1.1       albertel   43: BEGIN {
                     44:     &Apache::lonxml::register('Apache::drawimage',('drawimage'));
                     45: }
                     46: 
                     47: sub start_drawimage {
                     48:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
1.7       albertel   49:     &Apache::lonxml::register('Apache::drawimage',('text','line','rectangle','arc','fill','polygon','image'));
1.14      raeburn    50:     push(@Apache::lonxml::namespace,'drawimage');
                     51:     my $result;
1.1       albertel   52:     if ($target eq 'web' || $target eq 'tex') {
1.7       albertel   53: 	my $new_id=&Apache::loncommon::get_cgi_id();
                     54: 	if ($cgi_id) { push(@cgi_ids,$cgi_id); } else { undef(%args); }
                     55: 	$cgi_id=$new_id;
1.14      raeburn    56:     } elsif ($target eq 'edit') {
                     57:         $result .= &Apache::edit::tag_start($target,$token).
                     58:             &Apache::edit::text_arg('Background color:','bgcolor' ,$token,8).
                     59:             &Apache::edit::text_arg('Width(pixel):'    ,'width'   ,$token,6).
                     60:             &Apache::edit::text_arg('Height(pixel):'   ,'height'  ,$token,6).
                     61:             &Apache::edit::text_arg('TeXWidth(mm):'    ,'texwidth',$token,6).
                     62:             &Apache::edit::end_row().&Apache::edit::start_spanning_row();
                     63:     } elsif ($target eq 'modified') {
                     64:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                     65:                                                      $safeeval,'bgcolor','width',
                     66:                                                      'height','texwidth');
                     67:         if ($constructtag) {
                     68:             $result = &Apache::edit::rebuild_tag($token);
                     69:         }
1.1       albertel   70:     }
1.14      raeburn    71:     return $result;
1.1       albertel   72: }
                     73: 
                     74: sub end_drawimage {
                     75:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                     76:     my $result;
1.12      raeburn    77:     # need to call rand everytime start_script would evaluate, as the
                     78:     # safe space rand number generator and the global rand generator
                     79:     # are not separate
                     80:     my $randnumber;
                     81:     if ($target eq 'web' || $target eq 'tex' || $target eq 'grade' ||
                     82:         $target eq 'answer') {
                     83:         $randnumber=int(rand(1000));
                     84:     }
1.1       albertel   85:     if ($target eq 'web' || $target eq 'tex') {
1.7       albertel   86: 	my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);
                     87: 	my $height =&Apache::lonxml::get_param('height',$parstack,$safeeval);
                     88: 	my $bgcolor =&Apache::lonxml::get_param('bgcolor',$parstack,$safeeval);
                     89: 	if (!$width) { $width=300; }
                     90: 	if (!$height) { $height=300; }
1.12      raeburn    91:         $args{"cgi.$cgi_id.BGCOLOR"}=join(':',($bgcolor));
                     92:         if ($target eq 'tex') {
                     93:             my $texwidth=&Apache::lonxml::get_param('texwidth',$parstack,$safeeval,undef,1);
                     94:             if (!$texwidth) { $texwidth='90'; }
                     95:             $args{"cgi.$cgi_id.SIZE"}=join(':',($width,$height,$texwidth));
                     96:             my $tmpdir = LONCAPA::tempdir(); # Where temporary files live:
                     97:             ## Determine filename
                     98:             my ($seconds, $microseconds) = gettimeofday;
                     99:             my $filename = $env{'user.name'}.'_'.$env{'user.domain'}.
                    100:                            '_'.$seconds.'_'.$microseconds.'_'.$$.$randnumber.'_drawimage.eps';
                    101:             $args{"cgi.$cgi_id.EPSFILE"} = $env{'user.name'}.'_'.$env{'user.domain'}.
                    102:                                            '_'.$seconds.'_'.$microseconds.'_'.$$.$randnumber.
                    103:                                            '_drawimage.eps';
                    104:             $result = "%DYNAMICIMAGE:$width:$height:$texwidth\n";
                    105:             $result .= '\graphicspath{{'.$tmpdir.'}}'."\n";
                    106:             $result .= '\includegraphics[width='.$texwidth.' mm]{'.$filename.'}';
                    107:             &Apache::lonxml::register_ssi('/adm/randomlabel.png?token='.$cgi_id);
                    108:         } else {
                    109: 	    $args{"cgi.$cgi_id.SIZE"}=join(':',($width,$height));
                    110: 	    $result.="<img width='$width' height='$height'
1.1       albertel  111:                            src='/adm/randomlabel.png?token=$cgi_id' />\n";
1.12      raeburn   112:         }
1.10      raeburn   113: 	&Apache::lonnet::appenv(\%args);
1.7       albertel  114: 	if (@cgi_ids) {
                    115: 	    $cgi_id=pop(@cgi_ids);
                    116: 	} else {
                    117: 	    undef($cgi_id);
1.1       albertel  118: 	}
1.7       albertel  119:     } elsif ($target eq 'edit') {
1.14      raeburn   120:         $result.=&Apache::edit::end_table;
1.1       albertel  121:     }
1.14      raeburn   122:     pop(@Apache::lonxml::namespace);
                    123:     &Apache::lonxml::deregister('Apache::drawimage',
                    124: 			        ('text','line','rectangle','arc','fill',
                    125: 			         'polygon'));
1.4       matthew   126:     return $result;
                    127: }
                    128: 
1.5       albertel  129: sub start_text {
1.4       matthew   130:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    131:     my $result;
                    132:     if ($target eq 'web' || $target eq 'tex') {
1.6       albertel  133: 	&Apache::lonxml::startredirection();
1.14      raeburn   134:     } elsif ($target eq 'edit') {
                    135:         $result =
                    136:             &Apache::edit::tag_start($target,$token).
                    137:             &Apache::edit::text_arg('x:','x',$token,6).
                    138:             &Apache::edit::text_arg('y:','y',$token,6).
                    139:             &Apache::edit::text_arg('font:','font',$token,12).
                    140:             &Apache::edit::text_arg('color:','color',$token,8).
                    141:             &Apache::edit::select_arg('direction:','direction',
                    142:                                       ['vertical','horizontal'],$token).
                    143:             &Apache::edit::text_arg('rotation:','rotation',$token,6);
                    144:         my $text=&Apache::lonxml::get_all_text('/text',$parser,$style);
                    145:         $result .=
                    146:             &Apache::edit::editfield($token->[1],$text,'Text',60,2).
                    147:             &Apache::edit::end_row();
                    148:     } elsif ($target eq 'modified') {
                    149:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    150:                                                      $safeeval,'x','y',
                    151:                                                      'font','color',
                    152:                                                      'direction','rotation');
                    153:         if ($constructtag) {
                    154:             $result = &Apache::edit::rebuild_tag($token);
                    155:         } else {
                    156:             $result = $token->[4];
                    157:         }
                    158:         $result .= &Apache::edit::modifiedfield('/text',$parser);
1.6       albertel  159:     }
                    160:     return $result;
                    161: }
                    162: 
                    163: sub end_text {
                    164:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    165:     my $result;
                    166:     if ($target eq 'web' || $target eq 'tex') {
1.4       matthew   167:         my $x     = &Apache::lonxml::get_param('x',$parstack,$safeeval);
                    168:         my $y     = &Apache::lonxml::get_param('y',$parstack,$safeeval);
                    169:         my $font  = &Apache::lonxml::get_param('font',$parstack,$safeeval);
                    170:         my $color = &Apache::lonxml::get_param('color',$parstack,$safeeval);
1.5       albertel  171:         my $direction = &Apache::lonxml::get_param('direction',$parstack,$safeeval);
1.11      raeburn   172:         my $rotation = &Apache::lonxml::get_param('rotation',$parstack,$safeeval);
1.6       albertel  173: 	my $text  = &Apache::lonxml::endredirection();
1.9       www       174:         $text = &escape($text);
1.4       matthew   175:         $args{"cgi.$cgi_id.OBJTYPE"}.='LABEL:';
                    176: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
1.11      raeburn   177: 	$args{"cgi.$cgi_id.OBJ$i"}=join(':',($x,$y,$text,$font,$color,$direction,$rotation));
1.14      raeburn   178:     } elsif ($target eq 'edit') {
                    179:         $result=&Apache::edit::end_table();
1.4       matthew   180:     }
1.1       albertel  181:     return $result;
                    182: }
                    183: 
                    184: sub start_line {
                    185:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    186:     my $result;
                    187:     if ($target eq 'web' || $target eq 'tex') {
                    188: 	my $x1 = &Apache::lonxml::get_param('x1',$parstack,$safeeval);
                    189: 	my $y1 = &Apache::lonxml::get_param('y1',$parstack,$safeeval);
                    190: 	my $x2 = &Apache::lonxml::get_param('x2',$parstack,$safeeval);
                    191: 	my $y2 = &Apache::lonxml::get_param('y2',$parstack,$safeeval);
                    192: 	my $color = &Apache::lonxml::get_param('color',$parstack,$safeeval);
                    193: 	my $thickness = &Apache::lonxml::get_param('thickness',$parstack,$safeeval);
1.3       albertel  194: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
1.1       albertel  195: 	$args{"cgi.$cgi_id.OBJ$i"}=join(':',($x1,$y1,$x2,$y2,$color,$thickness));
                    196: 	$args{"cgi.$cgi_id.OBJTYPE"}.='LINE:';
1.14      raeburn   197:     } elsif ($target eq 'edit') {
                    198:         $result .=
                    199:             &Apache::edit::tag_start($target,$token).
                    200:             &Apache::edit::text_arg('x1:','x1' ,$token,6).
                    201:             &Apache::edit::text_arg('y1:','y1' ,$token,6).
                    202:             &Apache::edit::text_arg('x2:','x2' ,$token,6).
                    203:             &Apache::edit::text_arg('y2:','y2' ,$token,6).
                    204:             &Apache::edit::text_arg('color:','color',$token,8).
                    205:             &Apache::edit::text_arg('thickness:','thickness',$token,6).
                    206:             &Apache::edit::end_row();
                    207:     } elsif ($target eq 'modified') {
                    208:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    209:                                                      $safeeval,'x1','y1',
                    210:                                                      'x2','y2','color','thickness');
                    211:         if ($constructtag) { 
                    212:             $result = &Apache::edit::rebuild_tag($token);
                    213:         }
1.1       albertel  214:     }
                    215:     return $result;
                    216: }
                    217: 
                    218: sub end_line {
                    219:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    220:     my $result;
1.14      raeburn   221:     if ($target eq 'edit') {
                    222:         $result=&Apache::edit::end_table();
                    223:     }
1.1       albertel  224:     return $result;
                    225: }
                    226: 
                    227: sub start_rectangle {
                    228:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    229:     my $result;
                    230:     if ($target eq 'web' || $target eq 'tex') {
                    231: 	my $x1 = &Apache::lonxml::get_param('x1',$parstack,$safeeval);
                    232: 	my $y1 = &Apache::lonxml::get_param('y1',$parstack,$safeeval);
                    233: 	my $x2 = &Apache::lonxml::get_param('x2',$parstack,$safeeval);
                    234: 	my $y2 = &Apache::lonxml::get_param('y2',$parstack,$safeeval);
                    235: 	my $color = &Apache::lonxml::get_param('color',$parstack,$safeeval);
                    236: 	my $thickness = &Apache::lonxml::get_param('thickness',$parstack,
                    237: 						   $safeeval);
                    238: 	my $filled = &Apache::lonxml::get_param('filled',$parstack,
                    239: 						$safeeval);
1.3       albertel  240: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
1.1       albertel  241: 	$args{"cgi.$cgi_id.OBJ$i"}=
                    242: 	    join(':',($x1,$y1,$x2,$y2,$color,$thickness,$filled));
                    243: 	$args{"cgi.$cgi_id.OBJTYPE"}.='RECTANGLE:';
1.14      raeburn   244:     } elsif ($target eq 'edit') {
                    245:         $result .=
                    246:             &Apache::edit::tag_start($target,$token).
                    247:             &Apache::edit::text_arg('x1:','x1' ,$token,6).
                    248:             &Apache::edit::text_arg('y1:','y1' ,$token,6).
                    249:             &Apache::edit::text_arg('x2:','x2' ,$token,6).
                    250:             &Apache::edit::text_arg('y2:','y2' ,$token,6).
                    251:             &Apache::edit::text_arg('color:','color',$token,8).
                    252:             &Apache::edit::text_arg('thickness:','thickness',$token,6).
                    253:             &Apache::edit::select_arg('filled:','filled',
                    254:                                       ['no','yes'],$token).
                    255:             &Apache::edit::end_row();
                    256:     } elsif ($target eq 'modified') {
                    257:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    258:                                                      $safeeval,'x1','y1',
                    259:                                                      'x2','y2','color','thickness',
                    260:                                                      'filled');
                    261:         if ($constructtag) {
                    262:             $result = &Apache::edit::rebuild_tag($token);
                    263:         }
1.1       albertel  264:     }
                    265:     return $result;
                    266: }
                    267: 
                    268: sub end_rectangle {
                    269:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    270:     my $result;
1.14      raeburn   271:     if ($target eq 'edit') {
                    272:         $result=&Apache::edit::end_table();
                    273:     }
1.1       albertel  274:     return $result;
                    275: }
                    276: 
                    277: sub start_arc {
                    278:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    279:     my $result;
                    280:     if ($target eq 'web' || $target eq 'tex') {
                    281: 	my $x = &Apache::lonxml::get_param('x',$parstack,$safeeval);
                    282: 	my $y = &Apache::lonxml::get_param('y',$parstack,$safeeval);
                    283: 	my $width = &Apache::lonxml::get_param('width',$parstack,$safeeval);
                    284: 	my $height = &Apache::lonxml::get_param('height',$parstack,$safeeval);
                    285: 	my $start = &Apache::lonxml::get_param('start',$parstack,$safeeval);
                    286: 	my $end = &Apache::lonxml::get_param('end',$parstack,$safeeval);
                    287: 	my $color = &Apache::lonxml::get_param('color',$parstack,$safeeval);
                    288: 	my $thickness = &Apache::lonxml::get_param('thickness',$parstack,$safeeval);
                    289: 	my $filled = &Apache::lonxml::get_param('filled',$parstack,$safeeval);
1.3       albertel  290: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
1.1       albertel  291: 	$args{"cgi.$cgi_id.OBJ$i"}=
                    292: 	    join(':',($x,$y,$width,$height,$start,$end,$color,$thickness,
                    293: 		      $filled));
                    294: 	$args{"cgi.$cgi_id.OBJTYPE"}.='ARC:';
1.14      raeburn   295:     } elsif ($target eq 'edit') {
                    296:         $result .=
                    297:             &Apache::edit::tag_start($target,$token).
                    298:             &Apache::edit::text_arg('x:','x',$token,6).
                    299:             &Apache::edit::text_arg('y:','y',$token,6).
                    300:             &Apache::edit::text_arg('width:','width',$token,6).
                    301:             &Apache::edit::text_arg('height:','height',$token,6).
                    302:             &Apache::edit::text_arg('start:','start',$token,6).
                    303:             &Apache::edit::text_arg('end:','end',$token,6).
                    304:             &Apache::edit::text_arg('color:','color',$token,8).
                    305:             &Apache::edit::text_arg('thickness:','thickness',$token,6).
                    306:             &Apache::edit::select_arg('filled:','filled',
                    307:                                       ['no','yes'],$token).
                    308:             &Apache::edit::end_row();
                    309:     } elsif ($target eq 'modified') {
                    310:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    311:                                                      $safeeval,'x','y',
                    312:                                                      'width','height',
                    313:                                                      'start','end',
                    314:                                                      'color','thickness',
                    315:                                                      'filled');
                    316:         if ($constructtag) {
                    317:             $result = &Apache::edit::rebuild_tag($token);
                    318:         }
1.1       albertel  319:     }
                    320:     return $result;
                    321: }
                    322: 
                    323: sub end_arc {
                    324:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    325:     my $result;
1.14      raeburn   326:     if ($target eq 'edit') {
                    327:         $result=&Apache::edit::end_table();
                    328:     }
1.1       albertel  329:     return $result;
                    330: }
                    331: 
1.2       albertel  332: sub start_fill {
1.1       albertel  333:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    334:     my $result;
                    335:     if ($target eq 'web' || $target eq 'tex') {
                    336: 	my $x = &Apache::lonxml::get_param('x',$parstack,$safeeval);
                    337: 	my $y = &Apache::lonxml::get_param('y',$parstack,$safeeval);
                    338: 	my $color = &Apache::lonxml::get_param('color',$parstack,$safeeval);
1.3       albertel  339: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
1.1       albertel  340: 	$args{"cgi.$cgi_id.OBJ$i"}=join(':',($x,$y,$color));
                    341: 	$args{"cgi.$cgi_id.OBJTYPE"}.='FILL:';
1.14      raeburn   342:     } elsif ($target eq 'edit') {
                    343:         $result .=
                    344:             &Apache::edit::tag_start($target,$token).
                    345:             &Apache::edit::text_arg('x:','x' ,$token,6).
                    346:             &Apache::edit::text_arg('y:','y' ,$token,6).
                    347:             &Apache::edit::text_arg('color:','color',$token,8).
                    348:             &Apache::edit::end_row();
                    349:     } elsif ($target eq 'modified') {
                    350:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    351:                                                      $safeeval,'x','y',
                    352:                                                      'color');
                    353:         if ($constructtag) {
                    354:             $result = &Apache::edit::rebuild_tag($token);
                    355:         }
1.1       albertel  356:     }
                    357:     return $result;
                    358: }
                    359: 
1.2       albertel  360: sub end_fill {
1.1       albertel  361:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    362:     my $result;
1.14      raeburn   363:     if ($target eq 'edit') {
                    364:         $result=&Apache::edit::end_table();
                    365:     }
1.1       albertel  366:     return $result;
                    367: }
                    368: 
1.7       albertel  369: my @polygon;
                    370: sub start_polygon {
                    371:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    372:     my $result;
1.14      raeburn   373:     push(@Apache::lonxml::namespace,'polygon');
1.7       albertel  374:     &Apache::lonxml::register('Apache::drawimage',('point'));
1.13      raeburn   375:     if ($target eq 'web' || $target eq 'tex') {
1.7       albertel  376: 	undef(@polygon);
1.14      raeburn   377:     } elsif ($target eq 'edit') {
                    378:         $result = 
                    379:             &Apache::edit::tag_start($target,$token).
                    380:             &Apache::edit::text_arg('color:','color',$token,8).
                    381:             &Apache::edit::select_arg('Open:','open',
                    382:                                            ['no','yes'],$token).
                    383:             &Apache::edit::select_arg('Filled:','filled',
                    384:                                            ['no','yes'],$token).
                    385:             &Apache::edit::text_arg('thickness:','thickness',$token,6).
                    386:             &Apache::edit::end_row().
                    387:             &Apache::edit::start_spanning_row();
                    388:     } elsif ($target eq 'modified') {
                    389:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    390:                                                      $safeeval,'open','filled');
                    391:         if ($constructtag) {
                    392:             $result = &Apache::edit::rebuild_tag($token);
                    393:         }
1.7       albertel  394:     }
                    395:     return $result;
                    396: }
                    397: 
                    398: sub end_polygon {
                    399:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    400:     my $result;    
1.13      raeburn   401:     if ($target eq 'web' || $target eq 'tex') {
1.7       albertel  402: 	my $color=&Apache::lonxml::get_param('color',$parstack,$safeeval);
                    403: 	my $filled=&Apache::lonxml::get_param('filled',$parstack,$safeeval);
                    404: 	my $open=&Apache::lonxml::get_param('open',$parstack,$safeeval);
                    405: 	my $thickness = &Apache::lonxml::get_param('thickness',$parstack,
                    406: 						   $safeeval);
                    407: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
                    408: 	$args{"cgi.$cgi_id.OBJTYPE"}.='POLYGON:';
                    409: 	$args{"cgi.$cgi_id.OBJ$i"}=join(':',($color,$thickness,$open,$filled));
                    410: 	$args{"cgi.$cgi_id.OBJEXTRA$i"}=join('-',@polygon);
1.14      raeburn   411:     } elsif ($target eq 'edit') {
                    412:         $result=&Apache::edit::end_table();
1.7       albertel  413:     }
1.14      raeburn   414:     pop(@Apache::lonxml::namespace);
1.7       albertel  415:     &Apache::lonxml::deregister('Apache::drawimage',('point'));
                    416:     return $result;
                    417: }
                    418: 
                    419: sub start_point {
                    420:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    421:     my $result;
1.13      raeburn   422:     if ($target eq 'web' || $target eq 'tex') {
1.7       albertel  423: 	my $x = &Apache::lonxml::get_param('x',$parstack,$safeeval);
                    424:         my $y = &Apache::lonxml::get_param('y',$parstack,$safeeval);
                    425: 	push (@polygon,"($x,$y)");
1.14      raeburn   426:     } elsif ($target eq 'edit') {
                    427:         $result.= 
                    428:             &Apache::edit::tag_start($target,$token).
                    429:             &Apache::edit::text_arg('x:','x' ,$token,6).
                    430:             &Apache::edit::text_arg('y:','y' ,$token,6).
                    431:             &Apache::edit::end_row();
                    432:     } elsif ($target eq 'modified') {
                    433:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    434:                                                      $safeeval,'x','y');
                    435:         if ($constructtag) {
                    436:             $result = &Apache::edit::rebuild_tag($token);
                    437:         }
1.7       albertel  438:     }
                    439:     return $result;
                    440: }
                    441: 
                    442: sub end_point {
                    443:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    444:     my $result;
1.14      raeburn   445:     if ($target eq 'edit') {
                    446:         $result=&Apache::edit::end_table();
                    447:     }
1.7       albertel  448:     return $result;
                    449: }
                    450: 
                    451: sub start_image {
                    452:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    453:     my $result;
                    454:     if ($target eq 'web' || $target eq 'tex') {
                    455: 	&Apache::lonxml::startredirection();
1.14      raeburn   456:     } elsif ($target eq 'edit') {
                    457:         my $bgimg=&Apache::lonxml::get_all_text('/image',$parser,$style);
                    458:         $Apache::edit::bgimgsrc=$bgimg;
                    459:         $Apache::edit::bgimgsrcdepth=$Apache::lonxml::curdepth;
                    460:         my $only = join(',',&Apache::loncommon::filecategorytypes('Pictures'));
                    461:         $result=&Apache::edit::tag_start($target,$token,'Background Image').
                    462:             &Apache::edit::editline($token->[1],$bgimg,'Image Source File',40).
1.14.2.1! raeburn   463: 	    &Apache::edit::browse(undef,'textnode',undef,$only).' '.
        !           464: 	    &Apache::edit::search(undef,'textnode').'<br />'.
1.14      raeburn   465:             &Apache::edit::text_arg('x:','x',$token,6).
                    466:             &Apache::edit::text_arg('y:','y',$token,6).
                    467:             &Apache::edit::text_arg('clipx:','clipx',$token,6).
                    468:             &Apache::edit::text_arg('clipy:','clipy',$token,6).
                    469:             &Apache::edit::text_arg('Clip width(pixel):','clipwidth',$token,6).
                    470:             &Apache::edit::text_arg('Clip height(pixel):','clipheight',$token,6).
                    471:             &Apache::edit::text_arg('Scaled width:','scaledwidth',$token,6).
                    472:             &Apache::edit::text_arg('Scaled height:','scaledheight',$token,6).
                    473:             &Apache::edit::text_arg('Transparent:','transparent',$token,6).
                    474:             &Apache::edit::end_row();
                    475:     } elsif ($target eq 'modified') {
                    476:         my $constructtag=&Apache::edit::get_new_args($token,$parstack,
                    477:                                                      $safeeval,'x','y',
                    478:                                                      'clipx','clipy','clipwidth','clipheight',
                    479:                                                      'scaledwidth','scaledheight','transparent');
                    480:         if ($constructtag) {
                    481:             $result = &Apache::edit::rebuild_tag($token);
                    482:         } else {
                    483:             $result = $token->[4];
                    484:         }
                    485:         $result .= &Apache::edit::modifiedfield('/image',$parser);
1.7       albertel  486:     }
                    487:     return $result;
                    488: }
1.1       albertel  489: 
1.7       albertel  490: sub end_image {
                    491:     my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
                    492:     my $result;
                    493:     if ($target eq 'web' || $target eq 'tex') {
                    494: 	my $bgimg=&Apache::lonxml::endredirection();
                    495: 	my $x = &Apache::lonxml::get_param('x',$parstack,$safeeval);
                    496:         my $y = &Apache::lonxml::get_param('y',$parstack,$safeeval);
                    497: 	my $clipx = &Apache::lonxml::get_param('clipx',$parstack,$safeeval);
                    498:         my $clipy = &Apache::lonxml::get_param('clipy',$parstack,$safeeval);
                    499: 	my $clipwidth = 
                    500: 	    &Apache::lonxml::get_param('clipwidth',$parstack,$safeeval);
                    501:         my $clipheight = 
                    502: 	    &Apache::lonxml::get_param('clipheight',$parstack,$safeeval);
                    503: 	my $scaledwidth = 
                    504: 	    &Apache::lonxml::get_param('scaledwidth',$parstack,$safeeval);
                    505:         my $scaledheight = 
                    506: 	    &Apache::lonxml::get_param('scaledheight',$parstack,$safeeval);
                    507: 	my $transparent = 
                    508: 	    &Apache::lonxml::get_param('transparent',$parstack,$safeeval);
                    509: 	$bgimg=&Apache::imageresponse::clean_up_image($bgimg);
                    510: 	my $i=$args{"cgi.$cgi_id.OBJCOUNT"}++;
                    511: 	$args{"cgi.$cgi_id.OBJTYPE"}.='IMAGE:';
                    512: 	$args{"cgi.$cgi_id.OBJ$i"} = 
1.9       www       513: 	    join(':',($x,$y,&escape($bgimg),$transparent,
1.7       albertel  514: 		      $clipx,$clipy,$scaledwidth,$scaledheight,$clipwidth,$clipheight));
1.14      raeburn   515:     } elsif ($target eq 'edit') {
                    516:         $result=&Apache::edit::end_table();
1.7       albertel  517:     }
                    518:     return $result;
                    519: }
1.1       albertel  520: 1;
                    521: __END__

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>