[LON-CAPA-cvs] cvs: loncom /interface loncommon.pm
matthew
lon-capa-cvs@mail.lon-capa.org
Fri, 18 Mar 2005 00:18:42 -0000
This is a MIME encoded message
--matthew1111105122
Content-Type: text/plain
matthew Thu Mar 17 19:18:42 2005 EDT
Modified files:
/loncom/interface loncommon.pm
Log:
Rearranged order of routines to help with POD (the diff gets things a bit
backwards in my opinion). Added create_text_file to take care of the
tedious part of creating files.
--matthew1111105122
Content-Type: text/plain
Content-Disposition: attachment; filename="matthew-20050317191842.txt"
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.255 loncom/interface/loncommon.pm:1.256
--- loncom/interface/loncommon.pm:1.255 Wed Mar 9 19:21:48 2005
+++ loncom/interface/loncommon.pm Thu Mar 17 19:18:40 2005
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.255 2005/03/10 00:21:48 matthew Exp $
+# $Id: loncommon.pm,v 1.256 2005/03/18 00:18:40 matthew Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -835,6 +835,98 @@
=pod
+=item * change_content_javascript():
+
+This and the next function allow you to create small sections of an
+otherwise static HTML page that you can update on the fly with
+Javascript, even in Netscape 4.
+
+The Javascript fragment returned by this function (no E<lt>scriptE<gt> tag)
+must be written to the HTML page once. It will prove the Javascript
+function "change(name, content)". Calling the change function with the
+name of the section
+you want to update, matching the name passed to C<changable_area>, and
+the new content you want to put in there, will put the content into
+that area.
+
+B<Note>: Netscape 4 only reserves enough space for the changable area
+to contain room for the original contents. You need to "make space"
+for whatever changes you wish to make, and be B<sure> to check your
+code in Netscape 4. This feature in Netscape 4 is B<not> powerful;
+it's adequate for updating a one-line status display, but little more.
+This script will set the space to 100% width, so you only need to
+worry about height in Netscape 4.
+
+Modern browsers are much less limiting, and if you can commit to the
+user not using Netscape 4, this feature may be used freely with
+pretty much any HTML.
+
+=cut
+
+sub change_content_javascript {
+ # If we're on Netscape 4, we need to use Layer-based code
+ if ($ENV{'browser.type'} eq 'netscape' &&
+ $ENV{'browser.version'} =~ /^4\./) {
+ return (<<NETSCAPE4);
+ function change(name, content) {
+ doc = document.layers[name+"___escape"].layers[0].document;
+ doc.open();
+ doc.write(content);
+ doc.close();
+ }
+NETSCAPE4
+ } else {
+ # Otherwise, we need to use semi-standards-compliant code
+ # (technically, "innerHTML" isn't standard but the equivalent
+ # is really scary, and every useful browser supports it
+ return (<<DOMBASED);
+ function change(name, content) {
+ element = document.getElementById(name);
+ element.innerHTML = content;
+ }
+DOMBASED
+ }
+}
+
+=pod
+
+=item * changable_area($name, $origContent):
+
+This provides a "changable area" that can be modified on the fly via
+the Javascript code provided in C<change_content_javascript>. $name is
+the name you will use to reference the area later; do not repeat the
+same name on a given HTML page more then once. $origContent is what
+the area will originally contain, which can be left blank.
+
+=cut
+
+sub changable_area {
+ my ($name, $origContent) = @_;
+
+ if ($ENV{'browser.type'} eq 'netscape' &&
+ $ENV{'browser.version'} =~ /^4\./) {
+ # If this is netscape 4, we need to use the Layer tag
+ return "<ilayer width='100%' id='${name}___escape' overflow='none'><layer width='100%' id='$name' overflow='none'>$origContent</layer></ilayer>";
+ } else {
+ return "<span id='$name'>$origContent</span>";
+ }
+}
+
+=pod
+
+=back
+
+=head1 Excel and CSV file utility routines
+
+=over 4
+
+=cut
+
+###############################################################
+###############################################################
+
+=pod
+
=item * csv_translate($text)
Translate $text to allow it to be output as a 'comma separated values'
@@ -851,7 +943,6 @@
return $text;
}
-
###############################################################
###############################################################
@@ -875,6 +966,10 @@
=item h3
+=item h4
+
+=item i
+
=item date
=back
@@ -909,7 +1004,7 @@
=pod
-=item &create_workbook
+=item * create_workbook
Create an Excel worksheet. If it fails, output message on the
request object and return undefs.
@@ -952,84 +1047,40 @@
=pod
-=item * change_content_javascript():
+=item * create_text_file
-This and the next function allow you to create small sections of an
-otherwise static HTML page that you can update on the fly with
-Javascript, even in Netscape 4.
-
-The Javascript fragment returned by this function (no E<lt>scriptE<gt> tag)
-must be written to the HTML page once. It will prove the Javascript
-function "change(name, content)". Calling the change function with the
-name of the section
-you want to update, matching the name passed to C<changable_area>, and
-the new content you want to put in there, will put the content into
-that area.
+Create a file to write to and eventually make available to the usre.
+If file creation fails, outputs an error message on the request object and
+return undefs.
-B<Note>: Netscape 4 only reserves enough space for the changable area
-to contain room for the original contents. You need to "make space"
-for whatever changes you wish to make, and be B<sure> to check your
-code in Netscape 4. This feature in Netscape 4 is B<not> powerful;
-it's adequate for updating a one-line status display, but little more.
-This script will set the space to 100% width, so you only need to
-worry about height in Netscape 4.
+Inputs: Apache request object, and file suffix
-Modern browsers are much less limiting, and if you can commit to the
-user not using Netscape 4, this feature may be used freely with
-pretty much any HTML.
+Returns (undef) on failure,
+ Filehandle and filename on success.
=cut
-sub change_content_javascript {
- # If we're on Netscape 4, we need to use Layer-based code
- if ($ENV{'browser.type'} eq 'netscape' &&
- $ENV{'browser.version'} =~ /^4\./) {
- return (<<NETSCAPE4);
- function change(name, content) {
- doc = document.layers[name+"___escape"].layers[0].document;
- doc.open();
- doc.write(content);
- doc.close();
- }
-NETSCAPE4
- } else {
- # Otherwise, we need to use semi-standards-compliant code
- # (technically, "innerHTML" isn't standard but the equivalent
- # is really scary, and every useful browser supports it
- return (<<DOMBASED);
- function change(name, content) {
- element = document.getElementById(name);
- element.innerHTML = content;
- }
-DOMBASED
+###############################################################
+###############################################################
+sub create_text_file {
+ my ($r,$suffix) = @_;
+ if (! defined($suffix)) { $suffix = 'txt'; };
+ my $fh;
+ my $filename = '/prtspool/'.
+ $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'.
+ time.'_'.rand(1000000000).'.'.$suffix;
+ $fh = Apache::File->new('>/home/httpd'.$filename);
+ if (! defined($fh)) {
+ $r->log_error("Couldn't open $filename for output $!");
+ $r->print("Problems occured in creating the output file. ".
+ "This error has been logged. ".
+ "Please alert your LON-CAPA administrator.");
}
+ return ($fh,$filename)
}
-=pod
-
-=item * changable_area($name, $origContent):
-
-This provides a "changable area" that can be modified on the fly via
-the Javascript code provided in C<change_content_javascript>. $name is
-the name you will use to reference the area later; do not repeat the
-same name on a given HTML page more then once. $origContent is what
-the area will originally contain, which can be left blank.
-=cut
-
-sub changable_area {
- my ($name, $origContent) = @_;
-
- if ($ENV{'browser.type'} eq 'netscape' &&
- $ENV{'browser.version'} =~ /^4\./) {
- # If this is netscape 4, we need to use the Layer tag
- return "<ilayer width='100%' id='${name}___escape' overflow='none'><layer width='100%' id='$name' overflow='none'>$origContent</layer></ilayer>";
- } else {
- return "<span id='$name'>$origContent</span>";
- }
-}
-
-=pod
+=pod
=back
--matthew1111105122--