[Bio] / FigWebServices / subsys_diagram.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/subsys_diagram.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (view) (download)

1 : olson 1.7 #
2 :     # Copyright (c) 2003-2006 University of Chicago and Fellowship
3 :     # for Interpretations of Genomes. All Rights Reserved.
4 :     #
5 :     # This file is part of the SEED Toolkit.
6 :     #
7 :     # The SEED Toolkit is free software. You can redistribute
8 :     # it and/or modify it under the terms of the SEED Toolkit
9 :     # Public License.
10 :     #
11 :     # You should have received a copy of the SEED Toolkit Public License
12 :     # along with this program; if not write to the University of Chicago
13 :     # at info@ci.uchicago.edu or the Fellowship for Interpretation of
14 :     # Genomes at veronika@thefig.info or download a copy from
15 :     # http://www.theseed.org/LICENSE.TXT.
16 :     #
17 :    
18 : olson 1.3 use HtmlPageParser;
19 : olson 1.1 use HTML;
20 :     use strict;
21 :     use CGI;
22 : parrello 1.6 use Tracer;
23 : parrello 1.8 use TemplateObject;
24 :     use SFXlate;
25 :     use FIG;
26 : olson 1.1
27 :     my $cgi = new CGI;
28 : parrello 1.8 ETracing($cgi);
29 : olson 1.1 my $ssa = $cgi->param('ssa');
30 :     my $diagram_id = $cgi->param("diagram");
31 :    
32 : parrello 1.8 my $fig = ($cgi->param('SPROUT') ? SFXlate->new() : FIG->new());
33 : olson 1.1
34 :     if (!$ssa)
35 :     {
36 :     &error("No subsystem name provided.\n");
37 :     }
38 :    
39 :     if (!$diagram_id)
40 :     {
41 :     &error("No diagram id provided.\n");
42 :     }
43 :    
44 :     my $sub = $fig->get_subsystem($ssa);
45 :    
46 :     $sub or &error("Subsystem $ssa not found.\n");
47 :    
48 :     if ($cgi->param("image"))
49 :     {
50 : parrello 1.8 Trace("Image parameter specified.") if T(2);
51 : olson 1.1 show_image($sub, $diagram_id);
52 :     exit;
53 :     }
54 :    
55 : parrello 1.8 Trace("Creating template.") if T(3);
56 :     my $to = TemplateObject->new($cgi, php => 'SubsysDiagram');
57 :    
58 : olson 1.1 my $name = $sub->get_name;
59 :    
60 :     $name =~ s/_/ /g;
61 :    
62 :     my($dname, $dlink, $img_link) = $sub->get_diagram($diagram_id);
63 :    
64 : olson 1.3 #
65 :     # See if we have a html page.
66 :     #
67 :    
68 :     my $diagram_html_file = $sub->get_diagram_html_file($diagram_id);
69 :     my($map, $map_name, $usemap);
70 :    
71 :     if ($diagram_html_file)
72 :     {
73 :     #
74 :     # Parse the HTML to extract the map and map name.
75 :     #
76 :    
77 :     my $parser = HtmlPageParser->new();
78 :     $parser->parse_file($diagram_html_file);
79 :    
80 :     $map_name = $parser->{map_names}->[0];
81 :     $map = $parser->{map}->{$map_name};
82 :     }
83 :    
84 :     #
85 :     # If we have an image map, put an onload handler onto the body tag.
86 :     #
87 :    
88 :     my $onload;
89 :    
90 :     if ($map)
91 :     {
92 :     $onload = qq(onload="onBodyLoad()");
93 : parrello 1.8 }
94 :     if ($to->raw()) {
95 :     $to->add(undef => "<html><head><title>Subsystem Diagram</title></head><body $onload>");
96 :     } else {
97 :     Trace("Load handler is \"$onload\".") if T(3);
98 :     $to->add(onload => $onload);
99 :     }
100 :     if ($map)
101 :     {
102 : overbeek 1.5 my $js_url = "Html/css/coloring.js";
103 : olson 1.3
104 : parrello 1.8 $to->append(results => qq(<script src="$js_url" type="text/javascript"></script>));
105 :     $to->append(results => &get_coloring_js($map_name, "map_div"));
106 : olson 1.3 }
107 :    
108 :    
109 : parrello 1.8 $to->titles({fig_object => $fig, table_style => 'plain', fig_disk => "$FIG_Config::fig_disk/"});
110 :    
111 :     $to->append(results => $cgi->h1("$name: Diagram $dname"));
112 : olson 1.1
113 : olson 1.3
114 :     if ($map)
115 :     {
116 :     my $style = "position:relative; left:0px; top:0px;";
117 : parrello 1.8 $to->append(results => qq(<div id="map_div" style="$style">));
118 :     $to->append(results => $map);
119 : olson 1.3 $usemap = qq(usemap="#$map_name");
120 :     }
121 :    
122 : parrello 1.8 $to->append(results => qq(<img border="0" src="$img_link" $usemap>));
123 : olson 1.3
124 :     if ($map)
125 :     {
126 : parrello 1.8 $to->append(results => "</div>");
127 : olson 1.3 }
128 :    
129 : parrello 1.8 $to->append(results => "</body>");
130 : olson 1.1
131 : parrello 1.8 print "CONTENT-TYPE: text/html\n\n";
132 :     print $to->finish();
133 : olson 1.1
134 :     exit;
135 :    
136 :     sub show_image
137 :     {
138 :     my($sub, $diagram_id) = @_;
139 :    
140 : parrello 1.8 Trace("Opening diagram image.") if T(3);
141 : olson 1.1 my($type, $fh) = $sub->open_diagram_image($diagram_id);
142 : parrello 1.6 Trace("Image type for $diagram_id is $type.") if T(3);
143 : olson 1.1 $type or exit(0);
144 :    
145 :     binmode STDOUT;
146 :     print $cgi->header($type);
147 :     my $buf;
148 :    
149 :     while (read($fh, $buf, 4096))
150 :     {
151 : parrello 1.6 print $buf;
152 : olson 1.1 }
153 :     close($fh);
154 :     exit(0);
155 :     }
156 :    
157 :    
158 :     sub error
159 :     {
160 :     my($err) = @_;
161 :     my $html = [];
162 :    
163 :     push(@$html, $cgi->title("Error"));
164 :     push(@$html, $cgi->h1("Page error"));
165 :     push(@$html, $cgi->p($err));
166 :    
167 :     &HTML::show_page($cgi, $html, 1);
168 :     exit;
169 :     }
170 : olson 1.3
171 :     sub get_coloring_js
172 :     {
173 :     my($mapname, $divname) = @_;
174 :    
175 :     my $txt = <<'END';
176 :     <script language="JavaScript">
177 :    
178 :     function onBodyLoad()
179 :     {
180 :     colorEngine = new ActiveDiagram("%div%");
181 :     colorEngine.load();
182 :     }
183 :    
184 :     </script>
185 :    
186 :     <style type="text/css">
187 :    
188 :     .colored {
189 :     background-repeat:repeat;
190 :     border: 0;
191 :     border-style: solid;
192 :     margin: 0;
193 :     border: 0;
194 :     font-size: 8pt;
195 :     /* Mozilla ignores crazy MS image filters, so it will skip the following */
196 : olson 1.4 filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale src='%trans_png%');
197 : olson 1.3 }
198 :     /* IE ignores styles with [attributes], so it will skip the following. */
199 :     .colored[class] {
200 : olson 1.4 background-image: url(%trans_png%);
201 : olson 1.3 }}
202 :    
203 :     .xcolored {
204 :     background-color: red
205 :     }
206 :    
207 :     .transparent {
208 :     background-color: transparent
209 :     }
210 :     </style>
211 :     END
212 :     $txt =~ s/%map%/$mapname/gm;
213 :     $txt =~ s/%div%/$divname/gm;
214 :    
215 : overbeek 1.5 $txt =~ s,%trans_png%,Html/diagram_overlay.png,gm;
216 : olson 1.4
217 : olson 1.3 return $txt;
218 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3