Handle hostnames with upper-case letters
[webmin.git] / javascript-lib.pl
1 #javascript-lib.pl
2
3 #------------------------------#
4 #  JavaScript Library          #
5 #                              #
6 #  Written By:                 #
7 #    John Smith                #
8 #    <john.smith@msclinux.com> #
9 #                              #
10 #  MSC.Software                #
11 #  http://www.msclinux.com     #
12 #  http://www.mscsoftware.com  #
13 #------------------------------#
14
15 #----------------------------------------------------------------------------#
16 # Available Functions                                                        #
17 #    *jroll_over                                                             #
18 #      -This gives you simple mouse over functions on graphics               #
19 #       and includea a link.                                                 #
20 #       -Usage = &jroll_over("url", "name", "border", "imgoff", "imgon");    #
21 #    *jimg_preload                                                           #
22 #      -Preloads any number of given images.                                 #
23 #       -Usage = &jimg_preload("image/1.gif", "imgage/u.gif");               #
24 #    *jimg_update                                                            #
25 #      -Updates any image on your page that has a name                       #
26 #       -Usage = &jimg_update("imgname", "image/toload.gif");                #
27 #    *janim                                                                  #
28 #      -Builds an Animation with any given list of images                    #
29 #       -Usage = &janim("name", "speed", "list.gif", "of.gif", "images.jpg") #
30 #    *janim_start                                                            #
31 #      -Starts the animation you built with janim                            #
32 #       -Usage = &janim_start("name");                                       #
33 #    *janim_stop                                                             #
34 #      -Stops the animation you built with janim                             #
35 #       -Usage = &janim_stop("name");                                        #
36 #    *jalert                                                                 #
37 #      -Launches an alert dialog box with a custom message                   #
38 #       -Usage = &jalert("Your alert message!");                             #
39 #    *jwindow                                                                #
40 #      -Opens a window with a given URL                                      #
41 #       -Usage = &jwindow("url", "name", "width", "height");                 #
42 #    *jwindow_xy                                                             #
43 #      -Repostitions a named windows x and y                                 #
44 #       -Usage = &jwindow_xy("name", "x", "y");                              #
45 #    *jterminal                                                              #
46 #      -Creates an empty plain text window for writing data to               #
47 #       -Usage = &jterminal("name", "width", "height");                      #
48 #    *jwrite                                                                 #
49 #      -Write data to a created window or terminal                           #
50 #       -Usage = &jwrite("name", "data to write");                           #
51 #    *jtext                                                                  #
52 #      -Simple text rollovers between two colors                             #
53 #       -Usage = &jtext("text message", "red", "#F1F1F1");                   #
54 #    *jtalkback                                                              #
55 #      -Builds a JavaScript for a pop-up talkback/bug report window          #
56 #       -Usage = &jtalkback();                                               #
57 #    *jerror                                                                 #
58 #      -Launches the jtalkback window upon execution                         #
59 #       -Usage = &jerror("title", "email", "width", "height", \              #
60 #                        "errmsg", "url", "erroredonline");                  #
61 #    *jtalkback_link                                                         #
62 #      -Creates a button or text link to launch the jtalkback window         #
63 #       -Usage = &jtalkback_link("title", "email", "width", "height", \      #
64 #                                "text", "type");                            #
65 #----------------------------------------------------------------------------#
66
67 #creates a mouse over event with a link
68 sub jroll_over {
69    my ($url, $name, $border, $img_off, $img_on) = @_;
70    if (!$url) { $url = "javascript:"; }
71    print "\n<a href=\"$url\"", " onmouseover=\"document.$name.src=\'$img_on\'\;\"", " onmouseout=\"document.$name.src=\'$img_off\'\;\">";
72    print "<img src=\"$img_off\" name=\"$name\" border=\"0\" alt=\"$name\"></a>";
73 }
74
75 #preloads a list of images for smooth loading
76 sub jimg_preload {
77    my (@img_array) = @_; 
78    print "<SCRIPT LANGUAGE=JavaScript>\n";
79    foreach my $img (@img_array) {
80       print "(new Image).src = \"$img\"\;\n";
81    }
82    print "</SCRIPT>\n";
83 }
84
85 #update any image on a page by its name
86 sub jimg_update {
87    my ($name, $img) = @_;
88    print "<SCRIPT LANGUAGE=JavaScript>\n";
89    print "document.$name.src = '$img';\n";
90    print "</SCRIPT>\n";
91 }
92
93 #build an animation (preloads images itself)
94 sub janim {
95    my ($name, $speed, @anim_array) = @_;
96    my $frames = @anim_array;
97    my $count = 0;
98    my $arraycount = 0;
99    print "<img name='$name' src='@anim_array[0]' alt='$name'>\n";
100    print "<SCRIPT LANGUAGE=JavaScript>\n";
101    print "var aniframes$name = new Array($frames);\n";
102    foreach my $img (@anim_array) {
103       print "aniframes$name\[$count] = new Image();\n";
104       print "aniframes$name\[$count].src = '@anim_array[$arraycount]';\n";
105       $arraycount++;
106       $count++;
107    }
108    print "var frame$name = 0;\n";
109    print "var timeout_id$name = null;\n";
110    print "function animate$name() {\n";
111    print "document.$name.src = aniframes$name\[frame$name].src;\n";
112    print "frame$name = (frame$name + 1)%$frames;\n";
113    print "timeout_id$name = setTimeout('animate$name()', $speed);\n";
114    print "}\n";
115    print "</SCRIPT>\n";
116 }
117
118 #start an animation
119 sub janim_start {
120    my ($name) = @_;
121    print "<SCRIPT LANGUAGE=JavaScript>\n";
122    print "animate$name();\n";
123    print "</SCRIPT>\n";
124 }
125
126 #stop an animation
127 sub janim_stop {
128    my ($name, $image) = @_;
129    if (!$image) { }
130    print "<SCRIPT LANGUAGE=JavaScript>\n";
131    print "if (timeout_id$name) clearTimeout(timeout_id$name);\n";
132    print "timeout_id$name=null;\n";
133    if ($image) {
134       print "document.$name.src = '$image';\n";
135    }
136    print "</SCRIPT>\n";
137 }
138
139 #create an alert dialog box
140 sub jalert {
141    my (@alert_msg) = @_;
142    print "<SCRIPT LANGUAGE=JavaScript>\n";
143    print "alert('@alert_msg')";
144    print "</SCRIPT>\n";
145 }
146
147 #opens a specified url in a seprate window
148 sub jwindow {
149    my ($url, $name, $width, $height) = @_;
150    if (!$width)  { $width  = "300"; }
151    if (!$height) { $height = "200"; }
152    print "<SCRIPT LANGUAGE=JavaScript>\n";
153    print "$name = window.open('$url','$name','width=$width,height=$height');\n";
154    print "</SCRIPT>\n";
155 }
156
157 #sets a specified window to x y location
158 sub jwindow_xy {
159    my ($name, $x, $y) = @_;
160    print "<SCRIPT LANGUAGE=JavaScript>\n";
161    print "$name.moveTo('$x','$y');\n";
162    print "</SCRIPT>\n";
163 }
164
165 #opens a blank terminal window for writing data to
166 sub jterminal {
167    my ($name, $width, $height) = @_;
168    if (!$width)  { $width  = "300"; }
169    if (!$height) { $height = "200"; }
170    print "<SCRIPT LANGUAGE=JavaScript>\n";
171    print "$name = window.open('','$name','width=$width,height=$height');\n";
172    print "$name.document.open('text/plain')\n";
173    print "</SCRIPT>\n";
174 }
175
176 #write data to a given window name
177 sub jwrite {
178    my ($name, @msg) = @_;
179    print "<SCRIPT LANGUAGE=JavaScript>\n";
180    print "$name.document.writeln('@msg');\n";
181    print "</SCRIPT>\n";
182 }
183
184 #text rollover
185 sub jtext {
186    my ($text, $coloroff, $coloron) = @_;
187    print "<font color=\"$coloroff\" onMouseOver=\"this.style.color = '$coloron'\" onMouseOut=\"this.style.color = '$coloroff'\">$text</font>";
188 }
189
190 #Puts the needed JavaScript into your page for talkback reports
191 sub jtalkback {
192    print "<SCRIPT LANGUAGE=JavaScript>\n";
193    print "var error_count = 0;\n";
194
195    print "function talkback(title,email,width,height,errmsg,url,line)\n";
196    print "{\n";
197    print "   var w = window.open(\"\", \"error\"+error_count++, \"resizable,status,width=\"+ width + \",height=\" + height + \"\");\n";
198    print "   var d = w.document;\n";
199    print "d.write('<body bgcolor=\"#FFFFFF\" text=\"#000000\" leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\">');\n";
200
201    print "d.write('<form action=\"/jtalkback.cgi\" method=\"post\">');\n";
202
203    print "d.write('<input type=\"hidden\" name=\"Subject\" value=\"' + title + '\">');\n";  
204    print "d.write('<input type=\"hidden\" name=\"EmailTo\" value=\"' + email + '\">');\n";  
205
206    print "d.write('<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\">');\n";
207    print "d.write('  <tr $tb>');\n";
208    print "d.write('    <td colspan=\"2\">');\n";
209    print "d.write('      <div align=\"center\"><font size=\"4\" face=\"Verdana, Arial, Helvetica, sans-serif\">' + title + '</font></div>');\n";
210    print "d.write('    </td>');\n";
211    print "d.write('  </tr>');\n";
212
213
214    print "d.write('  <tr $cb>');\n";
215    print "d.write('    <td width=\"18%\">');\n";
216    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Name:</b>');\n";
217    print "d.write('        </font></div>');\n";
218    print "d.write('    </td>');\n";
219    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
220    print "d.write('<center><input size=\"42\" name=\"Name\"></center>');\n";
221    print "d.write('      </font></td>');\n";
222    print "d.write('  </tr>');\n";
223
224    print "d.write('  <tr $cb>');\n";
225    print "d.write('    <td width=\"18%\">');\n";
226    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>eMail:</b>');\n";
227    print "d.write('        </font></div>');\n";
228    print "d.write('    </td>');\n";
229    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
230    print "d.write('<center><input size=\"42\" name=\"eMail\"></center>');\n";
231    print "d.write('      </font></td>');\n";
232    print "d.write('  </tr>');\n";
233
234
235    print "d.write('  <tr $cb>');\n";
236    print "d.write('    <td width=\"18%\">');\n";
237    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>OS:</b>');\n";
238    print "d.write('        </font></div>');\n";
239    print "d.write('    </td>');\n";
240    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
241    print "d.write('<center><input size=\"42\" name=\"OS\"></center>');\n";
242    print "d.write('      </font></td>');\n";
243    print "d.write('  </tr>');\n";
244
245    print "d.write('  <tr $cb>');\n";
246    print "d.write('    <td width=\"18%\">');\n";
247    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Program:</b>');\n";
248    print "d.write('        </font></div>');\n";
249    print "d.write('    </td>');\n";
250    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
251    print "d.write('<center><input size=\"42\" name=\"Program\" value=\"' + url + '\"></center>');\n";
252    print "d.write('      </font></td>');\n";
253    print "d.write('  </tr>');\n";
254
255
256    print "d.write('  <tr $cb>');\n";
257    print "d.write('    <td width=\"18%\">');\n";
258    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Error:</b>');\n";
259    print "d.write('        </font></div>');\n";
260    print "d.write('    </td>');\n";
261    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
262    print "d.write('<center><input size=\"42\" name=\"Error\" value=\"' + errmsg + '\"></center>');\n";
263    print "d.write('      </font></td>');\n";
264    print "d.write('  </tr>');\n";
265
266    print "d.write('  <tr $cb>');\n";
267    print "d.write('    <td width=\"18%\">');\n";
268    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Line:</b>');\n";
269    print "d.write('        </font></div>');\n";
270    print "d.write('    </td>');\n";
271    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
272    print "d.write('<center><input size=\"42\" name=\"Line\" value=\"' + line + '\"></center>');\n";
273    print "d.write('      </font></td>');\n";
274    print "d.write('  </tr>');\n";
275
276    print "d.write('  <tr $cb>');\n";
277    print "d.write('    <td width=\"18%\">');\n";
278    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Browser:</b>');\n";
279    print "d.write('        </font></div>');\n";
280    print "d.write('    </td>');\n";
281    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
282    print "d.write('<center><input size=\"42\" name=\"Browser\" value=\"' + navigator.userAgent + '\"></center>');\n";
283    print "d.write('      </font></td>');\n";
284    print "d.write('  </tr>');\n";
285
286    print "d.write('  <tr $cb>');\n";
287    print "d.write('    <td width=\"18%\">');\n";
288    print "d.write('      <div align=\"right\"><font face=\"Verdana, Arial, Helvetica, sans-serif\"><b>Comment:</b>');\n";
289    print "d.write('        </font></div>');\n";
290    print "d.write('    </td>');\n";
291    print "d.write('    <td width=\"82%\"> <font face=\"Verdana, Arial, Helvetica, sans-serif\">');\n";
292    print "d.write('<center><input size=\"42\" name=\"Comment\"></center>');\n";
293    print "d.write('      </font></td>');\n";
294    print "d.write('  </tr>');\n";
295    print "d.write('  </table>');\n";
296
297    print "d.write('<table border=\"0\" width=\"100%\"><tr><td>');\n";
298    print "d.write('      <input type=\"submit\" value=\"Report Error\">&nbsp;&nbsp;');\n";
299    print "d.write('      <input type=\"button\" value=\"Dismiss\" onclick=\"self.close();\">');\n";
300    print "d.write('</td></tr></table>');\n";
301
302    print "d.write('</form>');\n";
303    print "d.close();\n";
304    print "return true;\n";
305    print "}\n";
306    print "</SCRIPT>\n";
307
308 }
309
310 #Launches the talkback form
311 sub jerror {
312    my ($title, $email, $width, $height, $errmsg, $url, $line) = @_;
313    print "<SCRIPT LANGUAGE=JavaScript>\n";
314    print "talkback('$title','$email','$width','$height','$errmsg','$url','$line');\n";
315    print "</SCRIPT>\n";
316 }
317
318 #Allows you to manually luanch the talkback form
319 sub jtalkback_link {
320    my ($title, $email, $width, $height, $text, $type) = @_;
321    if ($type eq 0) {
322       print "<a href=\"#\" onclick=\"talkback('$title', '$email', '$width', '$height','$errmsg','$url','$line');\">$text</a>\n";
323    } elsif ($type eq 1) {
324       print "<form><input type=\"button\" value=\"$text\" onclick=\"talkback('$title', '$email', '$width', '$height','$errmsg','$url','$line');\"></form>\n";
325    }
326 }
327
328 return 1;