Howdy! I have a program to take notes while watching online video lectures and it's a hassle alt+tabbing between the two windows all the time. The program for taking notes is written in Perl. It has a form to save a new notes page to a file and then a form to edit those notes. I successfully added an input field to save the embed code from the You Tube lecture and save it to a variable named $vidlect but I cant get the video to show calling it from the variable in which the embed code is stored. I added all references to Video Lecture and $vidlect to the file.
There are two modes. One to add a new note file and one to edit.
Here is the Perl code and that creates HTML form to "add" a new notes page file.
Here is the code for the edit mode. This is where I want the video to play as it is in edit mode that I need to view the video.Code:sub ActionAdd { # Extract info if available. my ( $author, $body, $kwords, $vidlect, $mimetype, $title ) = ( '', '', '', '', '', '' ); my ( $caption ) = (''); my ( $isentry, $valid, $warn) = (1, 1, 0); if ( "$main::in{'reset'}" ne '' ) { $main::method = 'GET'; } else { $author = "$main::in{'author'}"; $author =~ s/"/"/g; $kwords = lc( "$main::in{'keywords'}" ); $kwords =~ s/"/"/g; if ( $main::up{'upfile'}{'size'} > 0 ) { # uploaded a file if ("$main::in{'mimetype'}" eq "Auto-Detect") { # use browser supplied type if available $mimetype = "$main::up{'upfile'}{'mime'}"; # if browser doesn't know what it is (i.e. gives octet-stream, then # report and error asking user to explicitly select a type if ("$mimetype" eq "application/octet-stream") { $valid = 0; } } else { # not Auto-Detect # use user selected type $mimetype = "$main::mimetypes{$main::in{'mimetype'}}"; if ("$main::up{'upfile'}{'mime'}" ne "application/octet-stream") { # if browser has an opinion if ("$mimetype" ne "$main::up{'upfile'}{'mime'}") { # that doesn't agree with the user $warn = 1; # just let the user know, in case they made a mistake } } } } else { # an entry in the body text area, not a file upload if ("$main::in{'mimetype'}" ne "Auto-Detect") { # use user selected type $mimetype = "$main::mimetypes{$main::in{'mimetype'}}"; } else { # Auto-Detect of text in body area # assume text unless it contains some typical HTML strings $mimetype = "text/plain"; if ( &isHTML($main::in{'body'}) == 1) { $mimetype = "text/html"; } } } $isentry = ( "$mimetype" =~ m;^text/(html|plain)$; ); $title = "$main::in{'title'}"; $title =~ s/"/"/g; $title =~ s/\n/ /g; $vidlect = "$main::in{'vidlect'}"; $title =~ s/"/"/g; $title =~ s/\n/ /g; $caption = "$main::in{'caption'}"; if ( $isentry ) { $body = "$main::in{'body'}"; $body =~ s/\r/ /g; $body =~ s/\0//; #" } $body = $main::up{'upfile'}{'data'} if ( $main::up{'upfile'}{'size'} > 0 ); } ######################################## # TODO NEW ENTRY FORM-EXTRACT THIS FORM AND MAKE IT EXTERNAL ######################################## # GET: we have either a new form, or a cancelled form. # In either case, put up a fresh form. if ( "$main::method" eq 'GET' ) { print <<EOF; Content-type: text/html <html> <head> <title>Add a Notebook Entry</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Add a Notebook Entry to a New Page</h2> <p> This form allows the user to choose from two different input methods. <br> <b>Text/HTML input,</b> or <b>File/Image upload</b>. </p> Fill out <b>Name</b> and <b>Title</b> (required). EOF } ###### BUILD AND SAVE NEW ENTRY TO FILE # POST: we have a submitted form, either a notebook entry or an object. # RUN DEBUG AS It might be incomplete. elsif ( $author && $body && $mimetype && $title && $vidlect && ($valid == 1) ) { # Complete, save it if ( ! $isentry ) { # Notebook object my $date = time; my $strdate = gmtime( $date ); $date = substr( $date, 0, length( $date ) - 3 ) . '.' . substr( $date, -3 ); my $filename = "$main::$date"; open( FILE, ">$filename" ) || &InvalidFile(); binmode( FILE ); print FILE $body; close( FILE ); chmod 0666, ( $filename ); my $objs = 0; open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); while ( <IDX> ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag ) = split; $objs++ if ( $tag < 0 ); } $objs++; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); open( IDX, ">>$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); print IDX "-$objs $date $mimetype 0\n"; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); sleep( 1 ); # debugging output if ($debugvars == 1) { #TODO print <<EOF; <h1>Add debug</h1> mimetype=$mimetype<br> main::up{'upfile'}{'mime'}=$main::up{'upfile'}{'mime'} main::in{'body'}=$main::in{'body'} <br><br> EOF } if ( "$mimetype" =~ m;^image/(jpeg|pjpeg|gif|png|x-png|bmp)$; ) { #TODO $body = <<EOF; <p> <center> <img src="$main::relscript?nb=$main::nb&action=view&page=-$objs"> <br><b> $caption </b> </center> </p> EOF } else { $body = <<EOF; <p> Click <a href="$main::relscript?nb=$main::nb&action=view&page=-$objs">here</a> to view the object ($caption) you uploaded. </p> EOF } $mimetype = 'text/html'; } # Notebook entry # First parse for special SHOWTAGS regions $body = &parseForXML( $body ); # Make new filename from the time. my $date = time; my $strdate = gmtime( $date ); $date = substr( $date, 0, length( $date ) - 3 ) . '.' . substr( $date, -3 ); my $filename = "$main::root/$date"; open( FILE, ">$filename" ) || &InvalidFile(); #TODO ADD TO PAGE HEAD print FILE <<EOF; <!-- Author: $author --> <!-- Date: $strdate (GMT) --> <!-- Title: $title --> <!-- Keywords: $kwords --> <!-- Lecture: $vidlect --> <!-- Changes: Added $strdate (GMT) $author | --> $body EOF close( FILE ); chmod 0666, ( $filename ); # Open the index file and count number of entries. my $pages = 0; open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); while ( <IDX> ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag ) = split; $pages++ if ( $tag > 0 ); } $pages++; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); # Add new file to the index file. open( IDX, ">>$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); print IDX "$pages $date $mimetype 0\n"; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); print <<EOF; <form action="$main::script" enctype="multipart/form-data" method=post> <p> <pre> <b>Your name</b>: <input type=text name=author value="$author" size=40> <b>The title</b>: <input type=text name=title value="$title" size=40> <b>Keywords</b> : <input type=text name=keywords value="$kwords" size=40> (optional) </pre> <b>Video Lecture</b> : <input type=text name=vidlect value="$vidlect" size=140> (optional) </p> <p> You can <b>type</b> or <b>cut and paste</b> text or HTML into the text area (it will scroll to accommodate the input):<br> <textarea rows=75 cols=175 WRAP=SOFT name=body>$body</textarea><br> </p> <p> <b>Or</b> you can <b>upload a file</b> (eg. an image) to a new page: <input type=file name=upfile value="" size=20> <br><input type=text name=caption value="$caption" size=40> short file description or image caption (optional) </p> <p> <b>Choose the MIME type</b> of your input: <SELECT NAME="mimetype"> EOF if ($main::autodetecttype == 1) { print "<OPTION SELECTED> Auto-Detect</OPTION>\n"; } foreach ( sort keys %main::mimetypes ) { print '<OPTION'; print ' SELECTED' if ( ( "$_" eq "$main::def_type" ) && ($main::autodetecttype == 0) ); print "> $_</OPTION>\n"; } #TODO print <<EOF; </SELECT> </p> <p> Then submit your entry:<br> <input type=submit name=submit value="Add this entry"> <input type=submit name=reset value="Start over"> <input type=submit name=cancel value="Cancel"> <input type=hidden name=action value="add"> <input type=hidden name=nb value="$main::nb"> <input type=hidden name=page value="$main::page"> </p> </form> </p> </body> </html> EOF return; }
I apologize if that is too much code. I just didn't want to leave any thing relevant out.Code:sub ActionEdit { # Extract info if available. if ( "$main::in{'reset'}" ne '' ) { print <<EOF; Location: $main::script?nb=$main::nb&action=view&page=$main::page EOF return; } my ( $author, $body, $changes, $kwords, $mimetype, $title, $vidlect ) = ( '', '', '', '', '', '', '' ); my ( $base, $filename, $notarized, $update ) = ( '', '', 0, 0 ); my ( $pagetype ) = ( '' ); my ( $caption ) = ( '' ); open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); my @lines = <IDX>; foreach ( @lines ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag, $name, $type, $as_is ) = split; if ( "$tag" eq "$main::page" ) { $base = "$name"; $mimetype = "$type"; $notarized = $as_is; last; } } flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); my ( $valid, $warn) = (1, 0); my $oldmimetype = lc( $mimetype ); $mimetype = lc( $mimetype ); $filename = "$main::root/$base"; if ( ("$main::method" eq 'GET') && ($notarized == 0)) { open( FILE, "<$filename" ) || &InvalidFile(); while ( <FILE> ) { if ( m/^<!-- Author: (.*) -->$/ ) { $author = $1; } elsif ( m/^<!-- Date: (.*) -->$/ ) { ; } elsif ( m/^<!-- Title: (.*) -->$/ ) { $title = $1; } elsif ( m/^<!-- Keywords: (.*) -->$/ ) { $kwords = $1; } elsif ( m/^<!-- Video Lecture: (.*) -->$/ ) { $vidlect = $1; } elsif ( m/^<!-- Changes: (.*) -->$/ ) { $changes = $1; } else { $body .= $_; } } close( FILE ); print <<EOF; Content-type: text/html <html> <head> <title>Edit a Notebook Entry</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Edit the Notebook Entry on This Page</h2> <p> This form allows the you to choose from two different methods to modify this page. <br> You can change or add too the existing <b>Text/HTML,</b><br> or you can <b>upload a File/Image</b> to append to the end of the page. <p> The <b>Name</b> and <b>Title</b> are required. EOF } elsif ( ("$main::method" eq 'GET') && ($notarized == 1)) { print <<EOF; Content-type: text/html <html> <head> <title>Edit invalid</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Notarized Page Can Not be Edited</h2> <p> The requested page has been previously notarized.<br> Notarized pages can not be edited, but they can be annotated. </body> </html> EOF } # POST: we have a submitted form, either a notebook entry or an object. # It might be incomplete. else { $author = "$main::in{'author'}"; $author =~ s/"/"/g; $changes = "$main::in{'changes'}"; $changes =~ s/"/"/g; $kwords = lc( "$main::in{'keywords'}" ); $kwords =~ s/"/"/g; $vidlect = "$main::in{'vidlect'}" ; $vidlect =~ s/"/"/g; $title = "$main::in{'title'}"; $title =~ s/"/"/g; $title =~ s/\n/ /g; $caption = "$main::in{'caption'}"; $body = "$main::in{'body'}"; $body =~ s/\r/ /g; $body =~ s/\0//; if ( $main::up{'upfile'}{'size'} > 0 ) { # uploaded a file if ("$main::in{'mimetype'}" eq "Auto-Detect") { # use browser supplied type if available $mimetype = "$main::up{'upfile'}{'mime'}"; # if browser doesn't know what it is (i.e. gives octet-stream, then # report and error asking user to explicitly select a type if ("$mimetype" eq "application/octet-stream") { $valid = 0; } } else { # not Auto-Detect # use user selected type $mimetype = "$main::mimetypes{$main::in{'mimetype'}}"; if ("$main::up{'upfile'}{'mime'}" ne "application/octet-stream") { # if browser has an opinion if ("$mimetype" ne "$main::up{'upfile'}{'mime'}") { # that doesn't agree with the user $warn = 1; # just let the user know, in case they made a mistake } } } } else { # an entry in the body text area only, no file upload if ("$main::in{'mimetype'}" ne "Auto-Detect") { # use user selected type $mimetype = "$main::mimetypes{$main::in{'mimetype'}}"; } else { # Auto-Detect of text in body area # assume text unless it contains some typical HTML strings $mimetype = "text/plain"; if ( &isHTML($main::in{'body'}) == 1) { $mimetype = "text/html"; } } } $update = ( "$oldmimetype" ne "$mimetype" ); if (( "$mimetype" =~ m;^text/(html|plain)$; ) && ( $main::up{'upfile'}{'size'} > 0 )) { $body .= $main::up{'upfile'}{'data'}; } if (( "$mimetype" !~ m;^text/(html|plain)$; ) && ( $main::up{'upfile'}{'size'} > 0 )) { my $date = time; my $strdate = gmtime( $date ); $date = substr( $date, 0, length( $date ) - 3 ) . '.' . substr( $date, -3 ); my $filename = "$main::root/$date"; open( FILE, ">$filename" ) || &InvalidFile(); binmode( FILE ); print FILE $main::up{'upfile'}{'data'}; close( FILE ); chmod 0666, ( $filename ); my $objs = 0; open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); while ( <IDX> ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag, $name, $type ) = split; if ( "$tag" eq "$main::page" ) { $base = "$name"; $pagetype = $type; } $objs++ if ( $tag < 0 ); # Count objects } $objs++; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); open( IDX, ">>$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); print IDX "-$objs $date $mimetype 0\n"; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); sleep( 1 ); # Check if editor upload of Nob. If so get body and changes. if ( $main::in{'editor'} ne '') { open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); my @lines = <IDX>; foreach ( @lines ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag, $name, $type ) = split; if ( "$tag" eq "$main::page" ) { $base = "$name"; last; } } flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); $filename = "$main::root/$base"; open( FILE, "<$filename" ) || &InvalidFile(); while ( <FILE> ) { if ( m/^<!-- Keywords: (.*) -->$/ ) { $kwords = $1; } elsif ( m/^<!-- Changes: (.*) -->$/ ) { $changes = $1; } else { $body .= $_; } } close( FILE ); } if ( "$mimetype" =~ m;^image/(jpeg|pjpeg|gif|png|x-png|bmp)$; ) { $body .= <<EOF; <p> <center> <img src="$main::relscript?nb=$main::nb&action=view&page=-$objs"> <br><b> $caption </b> </center> </p> EOF } else { $body .= <<EOF; <p> Click <a href="$main::relscript?nb=$main::nb&action=view&page=-$objs">here</a> to view the object ($caption) you uploaded. </p> EOF } $mimetype = $pagetype; } if ( $author && $body && $mimetype && $title ) { # Complete, save it # First parse and replace special SHOWTAGS regions $body = &parseForXML( $body ); # Write the new file out. my $strdate = gmtime( time ); open( FILE, ">$filename" ) || &InvalidFile(); print FILE <<EOF; <!-- Author: $author --> <!-- Date: $strdate (GMT) --> <!-- Title: $title --> <!-- Keywords: $kwords --> <!-- Video Lecture: $vidlect --> <!-- Changes: Modified $strdate (GMT) $author | $changes --> $body EOF close( FILE ); chmod 0666, ( $filename ); # If the MIME type changed, update the index file. if ( $update ) { open( IDX, "<$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); my @lines = <IDX>; flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); open( IDX, ">$main::idxfile" ) || &InvalidFile(); flock( IDX, $main::LOCK_EX ) if ( $main::flock ); seek( IDX, 0, 0 ); foreach ( @lines ) { next if ( m/^\s*$/ ); # Blank lines next if ( m/^\s*#/ ); # Comment lines my ( $tag, $name, $type, $as_is ) = split; print IDX ( "$tag" eq "$main::page" ) ? "$tag $base $mimetype $as_is\n" : "$_"; } flock( IDX, $main::LOCK_UN ) if ( $main::flock ); close( IDX ); } if ($warn == 1) { print <<EOF; Content-type: text/html <html> <head> <title>Add a Notebook Entry</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Updated.</h2> <p><i><b>Warning</b>: the type you selected corresponds to a MIME-type of $main::mimetypes{$main::in{'mimetype'}}, however the browser detected $main::up{'upfile'}{'mime'}. This may or may not have been what you intended.</i></p> <p><a href="$main::script?nb=$main::nb&action=view&page=$main::page"> Click here to display your updated entry</a></p> EOF exit $main::RET_NO_ERROR; } else { # Redirect the browser to the new entry. print <<EOF; Location: $main::script?nb=$main::nb&action=view&page=$main::page EOF exit $main::RET_NO_ERROR; } } #end if complete if ($valid == 0) { print <<EOF; Content-type: text/html <html> <head> <title>File type not detected</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Your browser was unable to determine the type of the input file.</h2> <p>Please select a type explicitly from the options avaliable (rather than Auto-Detect).</p> <small><i>(If a suitable type is not available from the choices provided, ask your notebook administrator to add one to the list of MIME-types in the enote.pl file)</i></small> EOF } else { # Incomplete entry, retry print <<EOF; Content-type: text/html <html> <head> <title>Incomplete Entry</title> </head> <body background="$main::backgrnd"> $main::linehorz <h2>Incomplete Entry</h2> Every notebook entry must have an author, a title, and some text.<br> Please complete the missing parts. EOF } } # end POST # Set the default MIME type. if ( "$mimetype" ne '' ) { foreach ( sort keys %main::mimetypes ) { $main::def_type = "$_" if ( "$main::mimetypes{$_}" eq "$mimetype" ); } } # The rest of the 'Edit' form. if ($notarized == 0 ) { print <<EOF; <div>$vidlect</div> EOF print <<EOF; <form action="$main::script" enctype="multipart/form-data" method=post> <p> <pre> <b>Your name</b>: <input type=text name=author value="$author" size=40 /> <b>The title</b>: <input type=text name=title value="$title" size=40 /> <b>Keywords</b> : <input type=text name=keywords value="$kwords" size=40 /> (optional) <b>Video Lecture</b> : <input type=text name=vidlect value="$vidlect" size=140 /> </pre> </p> <p> You can <b>type</b> or <b>cut and paste</b> into the text area (it will scroll to accommodate the input):<br> <textarea rows=15 cols=175 WRAP=SOFT name=body>$body</textarea><br> </p> <p> Or you can <b>upload a file</b> (eg. an image) to the end of this page: <input type=file name=upfile value="" size=20> <br><input type=text name=caption value="$caption" size=40> short file description or image caption (optional) <br>The image will be centered and displayed with the specified caption. </p> <p> <b>Choose the MIME type</b> of your input: <SELECT NAME="mimetype"> EOF if ($main::autodetecttype == 1) { print "<OPTION SELECTED> Auto-Detect</OPTION>\n"; } foreach ( sort keys %main::mimetypes ) { print '<OPTION'; print ' SELECTED' if ( ( "$_" eq "$main::def_type" ) && ($main::autodetecttype == 0) ); print "> $_</OPTION>\n"; } print <<EOF; </SELECT> </p> <p> Then submit your entry:<br> <input type=submit name=submit value="Update this entry"> <input type=submit name=reset value="Start over"> <input type=submit name=cancel value="Cancel"> <input type=hidden name=action value="edit"> <input type=hidden name=nb value="$main::nb"> <input type=hidden name=page value="$main::page"> <input type=hidden name=changes value="$changes"> </p> </form> </p> </body> </html> EOF } return; }
You can find the block I added that is actually capturing the link to the video but not displaying it in the browser if you search and find the code below.
If I do "view page source I can see it in the source but again no video display.
This also worked for displaying in the source but not in the browswer.Code:print <<EOF; <div>$vidlect</div> EOF print <<EOF;
Any help would be appreciated.Code:<div>$vidlect</div>
Thanks in advance.





Bookmarks