[LON-CAPA-cvs] cvs: loncom /interface lonmenu.pm lonsearchcat.pm lonwishlist.pm lonwishlistdisplay.pm

wenzelju wenzelju@source.lon-capa.org
Tue, 15 Feb 2011 14:54:51 -0000


This is a MIME encoded message

--wenzelju1297781691
Content-Type: text/plain

wenzelju		Tue Feb 15 14:54:51 2011 EDT

  Modified files:              
    /loncom/interface	lonmenu.pm lonsearchcat.pm lonwishlist.pm 
                     	lonwishlistdisplay.pm 
  Log:
  - Changed the way the pop-up-windows for 'Add Link' and 'Add Folder' are generated (have to call lonwishlist here to get the newest information, i.e. about the existing folders, instead of writing the pop-up-window statically via javascript).
  
  
--wenzelju1297781691
Content-Type: text/plain
Content-Disposition: attachment; filename="wenzelju-20110215145451.txt"

Index: loncom/interface/lonmenu.pm
diff -u loncom/interface/lonmenu.pm:1.346 loncom/interface/lonmenu.pm:1.347
--- loncom/interface/lonmenu.pm:1.346	Thu Jan 27 14:38:44 2011
+++ loncom/interface/lonmenu.pm	Tue Feb 15 14:54:51 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.346 2011/01/27 14:38:44 wenzelju Exp $
+# $Id: lonmenu.pm,v 1.347 2011/02/15 14:54:51 wenzelju Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1106,10 +1106,6 @@
     my $confirm_switch = &mt("Editing requires switching to the resource's home server.").'\n'.
                          &mt('Switch server?');
 
-    my $wishlistpopup;
-    if (&Apache::lonwishlist::getWishlist() ne 'error') {
-        $wishlistpopup = &Apache::lonwishlist::makePopUpNewLink();
-    }
 
 return (<<ENDUTILITY)
 
@@ -1235,7 +1231,15 @@
 }
 
 function set_wishlistlink(title, path) {
-    $wishlistpopup
+    if (!title) {
+        title = document.title;
+        title = title.replace(/^LON-CAPA /,'');
+    }
+    if (!path) {
+        path = location.pathname;
+    }
+    Win = window.open('/adm/wishlist?mode=newLink&setTitle='+title+'&setPath='+path,
+                      'wishlistNewLink','width=560,height=350,scrollbars=0');
 }
 
 function open_Wishlist_Import(rat) {
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.328 loncom/interface/lonsearchcat.pm:1.329
--- loncom/interface/lonsearchcat.pm:1.328	Thu Jan 27 14:38:44 2011
+++ loncom/interface/lonsearchcat.pm	Tue Feb 15 14:54:51 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Search Catalog
 #
-# $Id: lonsearchcat.pm,v 1.328 2011/01/27 14:38:44 wenzelju Exp $
+# $Id: lonsearchcat.pm,v 1.329 2011/02/15 14:54:51 wenzelju Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -3059,17 +3059,14 @@
 </script>
 SCRIPT
 
-    my $wishlistpopup;
-    if (&Apache::lonwishlist::getWishlist() ne 'error') {
-        $wishlistpopup = &Apache::lonwishlist::makePopUpNewLink();
-    }
 
     # Add JavaScript-function to set link for a ressource to wishlist
     $js.=<<SCRIPT;
 <script type="text/javascript">
 // <![CDATA[
 function set_wishlistlink(title, path){
-    $wishlistpopup;
+       Win = window.open('/adm/wishlist?mode=newLink&setTitle='+title+'&setPath='+path,
+                            'wishlistNewLink','width=560,height=350,scrollbars=0');
 }
 
 // ]]>
Index: loncom/interface/lonwishlist.pm
diff -u loncom/interface/lonwishlist.pm:1.9 loncom/interface/lonwishlist.pm:1.10
--- loncom/interface/lonwishlist.pm:1.9	Thu Jan 27 14:38:44 2011
+++ loncom/interface/lonwishlist.pm	Tue Feb 15 14:54:51 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility-routines for wishlist
 #
-# $Id: lonwishlist.pm,v 1.9 2011/01/27 14:38:44 wenzelju Exp $
+# $Id: lonwishlist.pm,v 1.10 2011/02/15 14:54:51 wenzelju Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -478,6 +478,16 @@
      Calls &wishlistView(nodes), &wishlistEdit(nodes) or &wishlistMove(nodes, marked).
  
 
+=item * &makePopUpNewLink(title, path)
+
+     Returns the HTML-markup for the pop-up-window 'Add Link'. If this is called up from a browsed resource, the input-fields titel and path are pre-filled with the resources' meta-data-title and it's path. 
+
+
+=item * &makePopUpNewFolder()
+
+     Returns the HTML-markup for the pop-up-window 'Add Folder'.
+
+
 =item * &makePageSet()
 
      Returns the HTML-Markup for the page shown when a link was set by using the icon when viewing a resource.
@@ -511,65 +521,6 @@
     &getFoldersToArray(\@childrenRt);
     &getFoldersForOption(\@childrenRt);
 
-    # texthash
-    my %lt = &Apache::lonlocal::texthash(
-                 'nl' => 'New Link',
-                 'nf' => 'New Folder',
-                 'lt' => 'Link Title',
-                 'ft' => 'Folder Title',
-                 'pa' => 'Path',
-                 'nt' => 'Note',
-                 'si' => 'Save in',
-                 'cl' => 'Cancel');
-
-
-    my $inPageNewLink = '<h1>'.$lt{'nl'}.'</h1>'.
-                        '<form method="post" name="newlink" action="/adm/wishlist" target="wishlist" '.
-                        'onsubmit="return newlinksubmit();" >'.
-                        &Apache::lonhtmlcommon::start_pick_box().
-                        &Apache::lonhtmlcommon::row_title($lt{'lt'}).
-                        '<input type="text" name="title" size="45" value="" />'.
-                        &Apache::lonhtmlcommon::row_closure().
-                        &Apache::lonhtmlcommon::row_title($lt{'pa'}).
-                        '<input type="text" name="path" size="45" value="" />'.
-                        &Apache::lonhtmlcommon::row_closure().
-                        &Apache::lonhtmlcommon::row_title($lt{'nt'}).
-                        '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea>'.
-                        &Apache::lonhtmlcommon::row_closure(1).
-                        &Apache::lonhtmlcommon::end_pick_box().
-                        '<br/><br/>'.
-                        '<input type="submit" value="'.$lt{'si'}.'" />'.
-                        '<select name="folders">'.
-                        '<option value="" selected="selected">('.&mt('Top level').')</option>'.
-                        $foldersOption.
-                        '</select>'.
-                        '<input type="button" value="'.$lt{'cl'}.'" onclick="javascript:window.close();" />'.
-                        '</form>';
-    
-    my $inPageNewFolder = '<h1>'.$lt{'nf'}.'</h1>'.
-                          '<form method="post" name="newfolder" action="/adm/wishlist" target="wishlist" '.
-                          'onsubmit="return newfoldersubmit();" >'.
-                          &Apache::lonhtmlcommon::start_pick_box().
-                          &Apache::lonhtmlcommon::row_title($lt{'ft'}).
-                          '<input type="text" name="title" size="45" value="" /><br />'.
-                          &Apache::lonhtmlcommon::row_closure().
-                          &Apache::lonhtmlcommon::row_title($lt{'nt'}).
-                          '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea><br />'.
-                          &Apache::lonhtmlcommon::row_closure(1).
-                          &Apache::lonhtmlcommon::end_pick_box().
-                          '<br/><br/>'.
-                          '<input type="submit" value="'.$lt{'si'}.'" />'.
-                          '<select name="folders">'.
-                          '<option value="" selected="selected">('.&mt('Top level').')</option>'.
-                          $foldersOption.
-                          '</select>'.
-                          '<input type="button" value="'.$lt{'cl'}.'" onclick="javascript:window.close();" />'.
-                          '</form>';
-
-    # Remove all \n for inserting on javascript document.write
-    $inPageNewLink =~ s/\n//g;
-    $inPageNewFolder =~ s/\n//g;
-
     # it is checked, wether a path links to a LON-CAPA-resource or an external website. links to course-contents are not allowed
     # because they probably will return a kind of 'no access' (unless the user is already in the course, the path links to).
     # also importing these kind of links into a course does not make much sense.
@@ -591,49 +542,11 @@
 
     my $js = &Apache::lonhtmlcommon::scripttag(<<JAVASCRIPT);
     function newLink() {
-        newlinkWin=window.open('','newlinkWin','width=580,height=320,scrollbars=yes');
-        newlinkWin.document.write('$startPagePopup' 
-                              +'<script type="text\/javascript">'
-                              +'function newlinksubmit(){'
-                              +'var path = document.getElementsByName("path")[0].value;'
-                              +'var title = document.getElementsByName("title")[0].value;'
-                              +'if (!path || !title) {'
-                              +'alert("$warningLink");'
-                              +'return false;}'
-                              +'var linkOK = (path.match(/^http:(\\\\/\\\\/)/) || path.match(/^https:(\\\\/\\\\/)/))'
-                              +'&& !(path.match(/\\.problem/) || path.match(/\\.exam/)'
-                              +'|| path.match(/\\.quiz/) || path.match(/\\.assess/)'
-                              +'|| path.match(/\\.survey/) || path.match(/\\.form/)'
-                              +'|| path.match(/\\.library/) || path.match(/\\.page/)'
-                              +'|| path.match(/\\.sequence/));'
-                              +'if (!path.match(/^(\\\\/res\\\\/)/) && !linkOK) {'
-                              +'alert("$warningLinkNotAllowed1");'
-                              +'return false;}'
-                              +'else {'
-                              +'window.close();'
-                              +'return true;}}'
-                              +'<\/scr'+'ipt>'
-                              +'$inPageNewLink'
-                              +'$endPagePopup');
-        newlinkWin.document.close();
+        newlinkWin=window.open('/adm/wishlist?mode=newLink','newlinkWin','width=580,height=350, scrollbars=yes');
     }
 
     function newFolder() {
-        newfolderWin=window.open('','newfolderWin','width=580,height=270, scrollbars=yes');
-        newfolderWin.document.write('$startPagePopup' 
-                              +'<script type="text\/javascript">'
-                              +'function newfoldersubmit(){'
-                              +'var title = document.getElementsByName("title")[0].value;'
-                              +'if (!title) {'
-                              +'alert("$warningFolder");'
-                              +'return false;}'
-                              +'else {'
-                              +'window.close();'
-                              +'return true;}}'
-                              +'<\/scr'+'ipt>'
-                              +'$inPageNewFolder'
-                              +'$endPagePopup');
-        newfolderWin.document.close();
+        newfolderWin=window.open('/adm/wishlist?mode=newFolder','newfolderWin','width=580,height=270, scrollbars=yes');
     }
 
     function setFormAction(action,mode) {
@@ -1653,7 +1566,8 @@
 
 # Returns the HTML-Markup for the PopUp, shown when a new link should set, when NOT
 # beeing in the wishlist-interface (method is called in lonmenu and lonsearchcat)
-sub makePopUpNewLink{
+sub makePopUpNewLink {
+    my ($title, $path) = @_;
 
     # Get all existing folders to offer posibility to set a new link
     # into a folder
@@ -1670,82 +1584,160 @@
     $foldersOption = '';
     @allFolders = ();
 
-    # HTML-Markup for 'Set a link for this resource to wishlist'
-    # this is written via JavaScript document.write (function set_wishlistlink) 
-    # it is split into 3 parts and the inputfields for title and path are left out
-    # these fields are inserted later to set the values for title and path
-    # automatically via JavaScript (document.title and location.pathname) 
-
-    my $start_page_wishlistlink = 
+    # HTML-Markup for the Pop-Up-window 'Set a link for this resource to wishlist'
+    my $startPageWishlistlink = 
         &Apache::loncommon::start_page('Set link to wishlist',undef,
-				       {'only_body' => 1,
-					'js_ready'  => 1,
-					'bgcolor'   => '#FFFFFF',});
+                                      {'only_body' => 1,
+                                       'bgcolor'   => '#FFFFFF',});
 
     my $warningLink = &mt('You must insert a title!');
+    my $warningLinkNotAllowed1 = &mt('You can only insert links to LON-CAPA resources from the resource-pool '.
+                                    'or to external websites. Paths to LON-CAPA resources must be of the form /res/dom/usr... . '.
+                                    'Paths to external websites must contain the network protocol (e.g. http://...).');
+
+    my $inPageWishlistlink1 = '<h1>'.&mt('Set a link to wishlist').'</h1>';
+    # If no title is delivered, 'New Link' is called up from the wishlist-interface, so after
+    # submitting the window should close instead of offering a link to wishlist (like it should do
+    # if we call 'Set New Link' from within a browsed ressource)
+    if (!$title) {
+        $inPageWishlistlink1 .= '<form method="post" name="newlink" action="/adm/wishlist" target="wishlist"'.
+                                'onsubmit="return newlinksubmit();" >';
+    }
+    else {
+        $inPageWishlistlink1 .= '<form method="post" name="newlink" action="/adm/wishlist?mode=set" '.
+                                'onsubmit="return newlinksubmit();" >';
+    }
+    $inPageWishlistlink1 .= &Apache::lonhtmlcommon::start_pick_box().
+                            &Apache::lonhtmlcommon::row_title(&mt('Link Title'));
+
+    my $inPageWishlistlink2 = &Apache::lonhtmlcommon::row_closure().
+                              &Apache::lonhtmlcommon::row_title(&mt('Path'));
 
-    my $in_page_wishlistlink1 = '<h1>'.&mt('Set a link to wishlist').'</h1>'.
-                                '<form method="post" name="newlink" action="/adm/wishlist?mode=set" '.
-                                'onsubmit="return newlinksubmit();" >'.
-                                &Apache::lonhtmlcommon::start_pick_box().
-                                &Apache::lonhtmlcommon::row_title(&mt('Link Title'));
-
-    my $in_page_wishlistlink2 = &Apache::lonhtmlcommon::row_closure().
-                                &Apache::lonhtmlcommon::row_title(&mt('Path'));
-
-    my $in_page_wishlistlink3 = &Apache::lonhtmlcommon::row_closure().
-                                &Apache::lonhtmlcommon::row_title(&mt('Note')).
-                                '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea>'.
-                                &Apache::lonhtmlcommon::row_closure(1).
-                                &Apache::lonhtmlcommon::end_pick_box().
-                                '<br/><br/>'.
-                                '<input type="submit" value="'.&mt('Save in').'" />'.
-                                '<select name="folders">'.
-                                $options.
-                                '</select>'.
-                                '<input type="button" value="'.&mt('cancel').'" onclick="javascript:window.close();" />'.
-                                '</form>';
+    my $inPageWishlistlink3 = &Apache::lonhtmlcommon::row_closure().
+                              &Apache::lonhtmlcommon::row_title(&mt('Note')).
+                              '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea>'.
+                              &Apache::lonhtmlcommon::row_closure(1).
+                              &Apache::lonhtmlcommon::end_pick_box().
+                              '<br/><br/>'.
+                              '<input type="submit" value="'.&mt('Save in').'" />'.
+                              '<select name="folders">'.
+                              $options.
+                              '</select>'.
+                              '<input type="button" value="'.&mt('cancel').'" onclick="javascript:window.close();" />'.
+                              '</form>';
     $options = '';
 
-    # remove all \n for inserting on javascript document.write
-    $in_page_wishlistlink1 =~ s/\n//g;
-    $in_page_wishlistlink2 =~ s/\n//g;
-    $in_page_wishlistlink3 =~ s/\n//g;
-
-    my $end_page_wishlistlink = 
-       &Apache::loncommon::end_page({'js_ready' => 1});
-
-    # Add JavaScript-function to set link for a ressource to wishlist
-    my $js.=<<SCRIPT;
-    if(!title){
-        title=document.title;
-    }
-    if(!path){
-        path=location.pathname;
-    }
-    title = title.replace(/^LON-CAPA /,'');
-    wishlistlink=window.open('','wishlistNewLink','width=560,height=350,scrollbars=0');
-    wishlistlink.document.write(
-    '$start_page_wishlistlink'
-    +'<script type="text\/javascript">'
-    +'function newlinksubmit(){'
-    +'var title = document.getElementsByName("title")[0].value;'
-    +'if (!title) {'
-    +'alert("$warningLink");'
-    +'return false;}'
-    +'return true;}'
-    +'<\/scr'+'ipt>'
-    +'$in_page_wishlistlink1'
-    +'<input type="text" name="title" size="45" value="'+title+'"/>'
-    +'$in_page_wishlistlink2'
-    +'<input type="text" name="path" size="45" value="'+path+'" '
-    +'readonly="readonly" style="background-color: #DDDDDD"/>'
-    +'$in_page_wishlistlink3'
-    +'$end_page_wishlistlink' );
-    wishlistlink.document.close();
+    my $endPageWishlistlink = &Apache::loncommon::end_page();
+
+    my $popUp = $startPageWishlistlink.
+    $inPageWishlistlink1.
+    '<input type="text" name="title" size="45" value=""/>'.
+    $inPageWishlistlink2.
+    '<input type="text" name="path" size="45" value=""/>'.
+    $inPageWishlistlink3;
+
+    # JavaScript-function to set title and path of ressource automatically
+    # and show warning, if no title was set or path is invalid
+    $popUp .= <<SCRIPT;
+    <script type="text\/javascript">
+    document.getElementsByName("title")[0].value = '$title';
+    document.getElementsByName("path")[0].value = '$path';
+    var fromwishlist = false;
+    var titleget = '$title';
+    if (!titleget) {
+        fromwishlist = true;
+    } 
+    function newlinksubmit(){
+    var title = document.getElementsByName("title")[0].value;
+    var path = document.getElementsByName("path")[0].value;
+    if (!title) {
+        alert("$warningLink");
+        return false;}
+    var linkOK = (path.match(/\^http:(\\\/\\\/)/) || path.match(/\^https:(\\\/\\\/)/))
+    && !(path.match(/\\.problem/) || path.match(/\\.exam/)
+    || path.match(/\\.quiz/) || path.match(/\\.assess/)
+    || path.match(/\\.survey/) || path.match(/\\.form/)
+    || path.match(/\\.library/) || path.match(/\\.page/)
+    || path.match(/\\.sequence/));
+    if (!path.match(/\^(\\\/res\\\/)/) && !linkOK) {
+        alert("$warningLinkNotAllowed1");
+        return false;}
+    if (fromwishlist) {
+        window.close();
+    }
+    return true;}
+    <\/script>
 SCRIPT
 
-    return $js;
+    $popUp .= $endPageWishlistlink;
+
+    return $popUp;
+}
+
+sub makePopUpNewFolder {
+    # Get all existing folders to offer posibility to create a new folder
+    # into an existing folder
+    my %TreeHashLink = &Apache::lonwishlist::getWishlist();
+    my $rootLink = &Apache::Tree::HashToTree(\%TreeHashLink);
+    my @childrenRtLink = $rootLink->children();
+
+    $foldersOption = '';
+    @allFolders = ();
+    &getFoldersToArray(\@childrenRtLink);
+    &getFoldersForOption(\@childrenRtLink);
+
+    my $options = '<option value="" selected="selected">('.&mt('Top level').')</option>'.$foldersOption;
+    $foldersOption = '';
+    @allFolders = ();
+
+    # HTML-Markup for the Pop-Up-window 'New Folder'
+    my $startPageWishlistfolder = 
+        &Apache::loncommon::start_page('New Folder',undef,
+                                      {'only_body' => 1,
+                                       'bgcolor'   => '#FFFFFF',});
+
+    my $warningFolder = &mt('You must insert a title!');
+
+
+    my $inPageNewFolder = '<h1>'.&mt('New Folder').'</h1>'.
+                          '<form method="post" name="newfolder" action="/adm/wishlist" target="wishlist" '.
+                          'onsubmit="return newfoldersubmit();" >'.
+                          &Apache::lonhtmlcommon::start_pick_box().
+                          &Apache::lonhtmlcommon::row_title(&mt('Folder title')).
+                          '<input type="text" name="title" size="45" value="" /><br />'.
+                          &Apache::lonhtmlcommon::row_closure().
+                          &Apache::lonhtmlcommon::row_title(&mt('Note')).
+                          '<textarea name="note" rows="3" cols="35" style="width:100%"></textarea><br />'.
+                          &Apache::lonhtmlcommon::row_closure(1).
+                          &Apache::lonhtmlcommon::end_pick_box().
+                          '<br/><br/>'.
+                          '<input type="submit" value="'.&mt('Save in').'" />'.
+                          '<select name="folders">'.
+                          $options.
+                          '</select>'.
+                          '<input type="button" value="'.&mt('Cancel').'" onclick="javascript:window.close();" />'.
+                          '</form>';
+    my $endPageWishlistfolder = &Apache::loncommon::end_page();
+
+    my $popUp = $startPageWishlistfolder.
+    $inPageNewFolder;
+
+    $popUp .= <<SCRIPT;
+    <script type="text\/javascript">
+        function newfoldersubmit(){
+            var title = document.getElementsByName("title")[0].value;
+            if (!title) {
+            alert("$warningFolder");
+            return false;}
+            else {
+            window.close();
+            return true;}}
+    <\/script>
+SCRIPT
+
+    $popUp .= $endPageWishlistfolder;
+
+    return $popUp;
 }
 
 # Returns the HTML-Markup for the page, shown when a link was set
Index: loncom/interface/lonwishlistdisplay.pm
diff -u loncom/interface/lonwishlistdisplay.pm:1.1 loncom/interface/lonwishlistdisplay.pm:1.2
--- loncom/interface/lonwishlistdisplay.pm:1.1	Thu Jan 27 14:38:44 2011
+++ loncom/interface/lonwishlistdisplay.pm	Tue Feb 15 14:54:51 2011
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to display the wishlist (handler)
 #
-# $Id: lonwishlistdisplay.pm,v 1.1 2011/01/27 14:38:44 wenzelju Exp $
+# $Id: lonwishlistdisplay.pm,v 1.2 2011/02/15 14:54:51 wenzelju Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -64,7 +64,7 @@
         }
 
         # get unprocessed_cgi (i.e. marked entries, mode ...) 
-        &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['action','mark','markedToMove','mode','newtitle','note','rat']);
+        &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['action','mark','markedToMove','mode','newtitle','note','rat','setTitle','setPath']);
 
         # change the order of entries within a level, that means sorting the entries
         my $changeOrder = 0;
@@ -150,6 +150,12 @@
         elsif ($env{'form.mode'} eq 'import') {
             $page = &Apache::lonwishlist::makePageImport($root, $env{'form.rat'});
         }
+        elsif ($env{'form.mode'} eq 'newLink') {
+            $page = &Apache::lonwishlist::makePopUpNewLink($env{'form.setTitle'},$env{'form.setPath'});
+        }
+        elsif ($env{'form.mode'} eq 'newFolder') {
+            $page = &Apache::lonwishlist::makePopUpNewFolder();
+        }
         elsif ($env{'form.mode'} eq 'set') {
             $page = &Apache::lonwishlist::makePageSet();
         }

--wenzelju1297781691--