Changeset 26749

Show
Ignore:
Timestamp:
18.01.2013 18:37:03 (6 years ago)
Author:
davidb
Message:

Generation of collection space now done during running of html-to-expeditee script and only if the appropriate checkbox is selected by the user.

Location:
gs3-extensions/html-to-expeditee/trunk/src
Files:
1 removed
5 modified

Legend:

Unmodified
Added
Removed
  • gs3-extensions/html-to-expeditee/trunk/src/INSTALL-FOR-GREENSTONE3.sh

    r26745 r26749  
    2525    > ../../web/WEB-INF/cgi/export-individual-expeditee.pl 
    2626 
    27     cat src/cgi-bin/generate-collection-space.pl.in \ 
    28     | sed "s%@FULL_PERL_EXE@%$FULL_PERL_EXE%g" \ 
    29     > ../../web/WEB-INF/cgi/generate-collection-space.pl 
    3027} 
    3128 
     
    6461    installPerlCGI 
    6562fi 
    66  
    67 if [ ! -f ../../web/WEB-INF/cgi/generate-collection-space.pl ] ; then 
    68     echo "Installing generate-collection-space.pl to cgi-bin directory" 
    69     installPerlCGI 
    70 elif [ "src/cgi-bin/generate-collection-space.pl.in" -nt "../../web/WEB-INF/cgi/generate-collection-space.pl" ] ; then 
    71     echo "Installing latest version of generate-collection-space.pl to cgi-bin directory" 
    72     installPerlCGI 
    73 fi 
  • gs3-extensions/html-to-expeditee/trunk/src/perllib/ExpediteeFrameIO.pm

    r26731 r26749  
    647647    $y += 16; # y-value of text item in Expeditee is it's base line 
    648648    $x += 4; 
     649     
     650    my $link = $html_node->{'link'}; 
     651    $attr->{'l'} = $link if defined $link; 
    649652 
    650653    my $data = $html_node->{'data'}; 
  • gs3-extensions/html-to-expeditee/trunk/src/perllib/cgiactions/CollectionSpaceAction.pm

    r26746 r26749  
    4949my $action_table = 
    5050{  
    51     "generate-frame"     => { 'compulsory-args' => [ "fn", "json" ], 
     51    "generate-frame"     => { 'compulsory-args' => [ "fn", "json","cl" ], 
    5252                  'optional-args'   => [] },  
    5353}; 
  • gs3-extensions/html-to-expeditee/trunk/src/src/cgi-bin/html-to-expeditee.pl.in

    r26743 r26749  
    1  #!/cygdrive/c/strawberry/perl/bin/perl -w 
     1#!/cygdrive/c/strawberry/perl/bin/perl -w 
    22 
    33# Need to specify the full path of Perl above, e.g. for Windows something like 
    44#!C:\\Perl32\\bin\\perl -w 
    5  
    65 
    76use strict; 
     
    2928} 
    3029 
    31  
    3230sub generate_html_form 
    3331{ 
    34     my ($isGSDL2,$site,$collect,$cl) = @_; 
    35  
    36     my $html_form = <<EOT; 
    37 <html> 
    38   <head> 
    39     <title>HTML to Expeditee Frames</title> 
    40  
    41     <base href=".." /> 
    42  
    43     <link type="text/css" href="ext/html-to-expeditee/jquery/css/le-frog/jquery-ui-1.8.16.custom.css" rel="stylesheet" /> 
    44     <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-1.6.2.min.js"></script> 
    45     <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-ui-1.8.16.custom.min.js"></script> 
    46     <script type="text/javascript" src="ext/html-to-expeditee/js/gsajax-min.js"></script> 
    47     <script type="text/javascript" src="ext/html-to-expeditee/js/html-to-expeditee.js"></script> 
    48  
    49   </head> 
    50   <body> 
    51     <form class="ui-widget"> 
    52       Convert the collection  
    53         <input type="text"  
    54            class="ui-corner-all" style="padding: 4px;" 
    55            name="collect" value="$collect" id="collect" /> 
    56       to Expeditee frames by traversing the classifier  
    57         <input type="text"  
    58            class="ui-corner-all" style="padding: 4px;" 
    59                name="cl" value="$cl" id="cl" /> 
    60  
    61         <input value="$site" name="site" id="site" type="hidden"> 
     32    my($isGSDL2,$site,$collect,$cl) = @_; 
     33     
     34    # first generate the document frames 
     35    # then generate the classifier browsing frames. 
     36     
     37    my $html_form = <<EOT; 
     38    <html> 
     39        <head> 
     40            <title>HTML To Expeditee Frames</title> 
     41            <base href=".."/> 
     42             
     43            <link type="text/css" href="ext/html-to-expeditee/jquery/css/le-frog/jquery-ui-1.8.16.custom.css" rel="stylesheet" /> 
     44            <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-1.6.2.min.js"></script> 
     45            <script type="text/javascript" src="ext/html-to-expeditee/jquery/js/jquery-ui-1.8.16.custom.min.js"></script> 
     46            <script type="text/javascript" src="ext/html-to-expeditee/js/gsajax-min.js"></script> 
     47            <script type="text/javascript" src="ext/html-to-expeditee/js/html-to-expeditee.js"></script> 
     48        </head> 
     49        <body> 
     50            <form class="ui-widget"> 
     51                Convert the collection <input type="text" class="ui-corner-all" style="padding: 4px;" name="collect" value="$collect" id="collect" /> to Expeditee frames by traversing the classifier <input type="text" class="ui-corner-all" style="padding: 4px;" name="cl" value="$cl" id="cl" /> 
     52 
     53                <input value="$site" name="site" id="site" type="hidden"> 
    6254         
    63         <p> 
    64         <input type="checkbox" id="checkBoxBrowsing" name="generate_browsing" value="generate_browsing">Generate Collection Space<br/> 
    65         </p> 
    66          
    67         <p style="font-weight: bold;">Extra Expeditee Frame Output Options:</p> 
    68         <input type="checkbox" id="checkBoxFont" name="compute_font" value="compute_font">Compute Font<br/> 
    69         <input type="checkbox" id="checkBoxWidth" name="compute_width" value="compute_width">Compute Width<br/> 
    70          
    71         <p><input value="Go" id="go" class="ui-button ui-widget ui-state-default ui-corner-all" type="submit"><p> 
    72  
    73     </form> 
    74     <script type="text/javascript"> 
    75       var docOIDs = []; 
    76       var numDocOIDs; 
    77       var compute_font = false; 
    78       var compute_width = false; 
    79       var generate_browsing = false;    //whether to generate a matching browsing frameset 
    80        
    81       \$(function() { 
    82       \$('#progress').progressbar(); 
    83        
    84       \$('#go').button().click(function() {  
    85           var collect = document.getElementById("collect").value; 
    86           if (collect.match(/^\\s*\$/)) { 
    87           alert("No collection specified"); 
    88           return false; 
    89           } 
    90  
    91           var cl = document.getElementById("cl").value; 
    92           if (cl.match(/^\\s*\$/)) { 
    93           alert("No classifier specified"); 
    94           return false; 
    95           } 
    96           if (cl.match(/^\\d+\$/)) { 
    97               cl = "CL" + cl; 
    98           } 
    99            
    100           compute_font = document.getElementById("checkBoxFont").checked; 
    101           compute_width = document.getElementById("checkBoxWidth").checked; 
    102            
    103           generate_browsing = document.getElementById("checkBoxBrowsing").checked; 
    104            
    105           var gs2=$isGSDL2; 
    106  
    107           var url; 
    108           if (gs2) { 
    109               url = "library.cgi"; 
    110           url += "?c="+collect +"&a=d&cl=" + cl; 
    111           } 
    112           else { 
    113               url = "library"; 
    114               url += "?c="+collect +"&a=b&rt=s&s=ClassifierBrowse&cl=" + cl; 
    115               url += "&excerptid=gs_content"; 
    116           } 
    117            
    118           console.log("*** CHECKING URL: " + url); 
    119  
    120           /* processing animation */ 
    121            
    122           docOIDs = []; 
    123           var outstandingURLs = []; 
    124           var visitedURLs = {}; 
    125  
    126           outstandingURLs.push(url); 
    127           visitedURLs[url] = 1; 
    128  
    129           while (outstandingURLs.length>0) { 
    130           url = outstandingURLs.shift(); 
    131            
    132           var clHtml = urlGetSync(url); 
    133                    
    134           var aElems; 
    135           var workingTrav = document.getElementById("workingTraverse"); 
    136           workingTrav.innerHTML = clHtml; 
    137           aElems = workingTrav.getElementsByTagName("a"); 
    138            
    139            
    140           /* any links with a=(b|d) ... cl=??? => outstandingURLS */ 
    141           /* any links with a=d ... d=???  => docOIDS */ 
    142  
    143 /*         
    144           var actionRE = new RegExp("(\\\\?|&)a=(?:d|b)(&|\$)"); 
    145           var clRE     = new RegExp("(\\\\?|&)cl=" + cl + "(\\\\.\\\\d+)+(&|\$)"); 
    146           var docRE    = new RegExp("(?:\\\\?|&)d=(.*?)(?:&|\$)"); 
    147 */ 
    148           var actionRE = new RegExp("(\\\\/)(?:document|browse)(\\\\/)"); 
    149           var clRE     = new RegExp("(\\\\/)browse\\\\/" + cl + "(\\\\/\\\\d+)+(\$)"); 
    150           var docRE    = new RegExp("(?:\\\\/)document\\\\/(.*?)(?:\$)"); 
    151            
    152           for (var i=0; i<aElems.length; i++) { 
    153               var aElem = aElems[i]; 
    154               var href=aElem.href; 
    155               if (href && href.match(actionRE)) { 
    156               if (href.match(clRE)) { 
    157                   if (!visitedURLs[href]) {       
    158                       console.log("found a new CL line: " + href); 
    159                       outstandingURLs.push(href); 
    160                   visitedURLs[href] = 1; 
    161                   }  
    162               } 
    163               else if (href.match(docRE)) { 
    164                 if(!visitedURLs[href]){ 
    165                   var docMatch = docRE.exec(href); 
    166                   var docOID = docMatch[1]; 
    167  
    168                   console.log("found a new doc line: " + docOID); 
    169                   visitedURLs[href] = 1; 
    170                   docOIDs.push(docOID); 
    171               } 
    172               } 
    173               } 
    174           } 
    175           } 
    176  
    177           numDocOIDs = docOIDs.length; 
    178  
    179           var iframe = document.getElementById("iframe"); 
    180  
    181           var docOID = docOIDs.shift(); 
    182           //console.log("doc oid = " + docOID); 
    183            
    184           var url; 
    185           if (gs2) { 
    186               url = "library.cgi"; 
    187               url += "?c="+collect +"&a=d&d=" + docOID; 
    188           } 
    189           else { 
    190               url = "library"; 
    191               url += "?c="+collect +"&a=d&d=" + docOID; 
    192                
    193               /** The line below has been commented out. This is because the incorrect page is being loaded up in the iframe (i.e. just the document image and heading is being displayed but not any html customizations made in the collectionConfig.xml file**/ 
    194               //url += "&ed=1&dt=hierarchy"; 
    195               // url += "&excerptid=gs_content"; 
    196           } 
    197            
    198           //url += "&p.showExpediteeAttributes=1"; 
    199           url += "&p.showAssocFilePath=1"; 
    200  
    201            
    202           /* load iframe with document drawn from Greenstone collection */ 
    203           iframe.src = url; 
    204            
    205           var progressbar = document.getElementById("progressbar"); 
    206           progressbar.style.display = "block"; 
    207  
    208  
    209           return false; }); 
    210      }); 
    211        
    212       function pageLoaded()  
    213       { 
    214       var iframe = document.getElementById("iframe");      
    215        
    216       if (iframe.src) { 
    217           if (iframe.style.display != "block") { 
    218           iframe.height = "90%"; 
    219           iframe.style.display = "block"; 
    220           } 
    221  
    222           var iframeDoc; 
    223           if ( iframe.contentDocument )  
    224           { /* FF */ 
    225             iframeDoc = iframe.contentDocument; 
    226           } 
    227           else if ( iframe.contentWindow )  
    228           { /* IE */ 
    229             iframeDoc = iframe.contentWindow.document; 
    230           } 
    231            
    232           var xmlUrl = iframe.src + "&o=xml"; 
    233            
    234           var iter = (numDocOIDs - docOIDs.length); 
    235           var progressPercent = iter/numDocOIDs * 100; 
    236            
    237           /*Check if a frame-id metadata element already exists,  
    238           otherwise generate a new frame number based on the  
    239           number of documents to process.*/ 
    240           var frameNum = getMetadata(xmlUrl,'frameID'); 
    241            
    242           if(frameNum === null){ 
    243             frameNum = iter; 
    244           } 
    245            
    246           \$(function() { 
    247           \$('#progressbar').progressbar({ value: progressPercent }) 
    248          }); 
    249  
    250           var gsContent = iframeDoc.getElementById("gs_content"); 
    251  
    252           /* 
    253           var gsContentPos = getElementPosition(gsContent);  
    254           var pxl = gsContentPos.xl; 
    255           var pxr = gsContentPos.xr; 
    256           */ 
    257            
    258           //Check if an assocfilepath annotation already exists on the page, otherwise obtain it from the xml. 
    259           var assocElem = iframeDoc.getElementById('assocfilepath'); 
    260           var assoc = null; 
    261            
    262           if(assocElem === undefined || assocElem === null){ 
    263             assoc = getMetadata(xmlUrl,'assocfilepath'); 
    264           } 
    265  
    266           var expFrameTree = htmlToExpeditee(gsContent,compute_font,compute_width); 
    267  
    268           var expFrame = JSON.stringify(expFrameTree); 
    269           //console.log(expFrame); 
    270           //alert(expFrame); 
    271  
    272           var collect = document.getElementById("collect").value; 
    273           var site    = document.getElementById("site").value; 
    274  
    275           var url = "cgi-bin/html-to-expeditee.pl"; 
    276           var params = "c=" + collect; 
    277           if (site.match(/\\w/)) { 
    278             params += "&site=" + site; 
    279           } 
    280            
    281           //params += "&a=generate-frame&fn=" + iter; 
    282           params += "&a=generate-frame&fn=" + frameNum; 
    283           params += "&json=" + escape(expFrame); 
    284            
    285           //add an assocfilepath parameter but only if it is defined. 
    286           if(assoc !== null){ 
    287             params += "&assoc=" + assoc; 
    288           } 
    289            
    290           params += "&compute-font=" + compute_font; 
    291  
    292           var clHtml = urlPostSync(url,params); 
    293  
    294           if (!clHtml.match(/html-to-expeditee saved frame/)) { 
    295             alert("Error processing url: " + url); 
    296           } 
    297  
    298           if (docOIDs.length>0) { 
    299           var docOID = docOIDs.shift(); 
    300            
    301           // console.log("doc oid = " + docOID); 
    302  
    303          // is the following line used ???? 
    304           var cl = document.getElementById("cl").value; 
    305            
    306           var gs2 = $isGSDL2; 
    307               var url; 
    308  
    309               if (gs2) { 
    310                   url = "library.cgi"; 
    311                   url += "?c="+collect +"&a=d&d=" + docOID; 
    312               } 
    313               else { 
    314                   url = "library"; 
    315                   url += "?c="+collect +"&a=d&d=" + docOID; 
    316                    
    317                   /** Refer to comment earlier in this code in regards to the commented out line below.**/ 
    318                   //url += "&ed=1&dt=hierarchy"; 
    319                   // url += "&excerptid=gs_content"; 
    320               } 
    321  
    322           //url += "&p.showExpediteeAttributes=1"; 
    323             url += "&p.showAssocFilePath=1"; 
    324            
    325             iframe.src = url; 
    326           } 
    327           else { 
    328             var progressbar = document.getElementById("progressbar"); 
    329             progressbar.style.display = "none"; 
    330  
    331             iframe.style.display = "none"; 
    332             delete iframe.src; 
    333           } 
    334       } 
    335       
    336       } 
    337        
    338     /** 
    339     * This method is used at this stage to retrieve assocfilepath 
    340     * and frame number metadata values from the document's xml. 
    341     **/ 
    342     function getMetadata(xmlUrl,nameValue){ 
    343        
    344         var metadata = null; 
    345          
    346          \$.ajax({ 
    347             type: "GET", 
    348             async: false, 
    349             url: xmlUrl, 
    350             dataType: "xml", 
    351             success: function(xml){ 
     55                <p> 
     56                    <input type="checkbox" id="checkBoxBrowsing" name="generate_browsing" value="generate_browsing">Generate Collection Space<br/> 
     57                </p> 
     58         
     59                <p style="font-weight: bold;">Extra Expeditee Frame Output Options:</p> 
     60                <input type="checkbox" id="checkBoxFont" name="compute_font" value="compute_font">Compute Font<br/> 
     61                <input type="checkbox" id="checkBoxWidth" name="compute_width" value="compute_width">Compute Width<br/> 
     62         
     63                <p><input value="Go" id="go" class="ui-button ui-widget ui-state-default ui-corner-all" type="submit"></p> 
     64                </form> 
    35265                 
    353                                  
    354                 \$(xml).find('metadata').each(function(){ 
    355                      
    356                     var name = \$(this).attr('name'); 
    357                      
    358                     if(name === nameValue){ 
    359                         if(metadata === null){ 
    360                             metadata = \$(this).text(); 
    361                             //console.log(metadata); 
    362                         } 
    363                          
    364                     }    
    365                 }); 
     66                <script type="text/javascript"> 
     67                    var collect; 
     68                    var site; 
     69                    var cl; 
     70                    var gs2; 
     71                     
     72                    var docOIDs = []; 
     73                    var clPages = []; 
     74                     
     75                    var hashMapDocFrames = new Array(); 
     76                     
     77                    var numDocOIDs = 0; 
     78                    var numClPages = 0; 
     79                     
     80                    var currDocFrameNum; 
     81                    var currClFrameNum; 
     82                     
     83                    var compute_font = false; 
     84                    var compute_width = false; 
     85                    var generate_browsing = false;  //generate a matching collection space frameset 
     86                     
     87                    \$(function(){ 
     88                         
     89                        \$('#progress').progressbar(); 
     90                         
     91                        \$('#go').button().click(function(){ 
     92                             
     93                            site = document.getElementById("site").value; 
     94                             
     95                            collect = document.getElementById("collect").value; 
     96                             
     97                            if(collect.match(/^\\s*\$/)){ 
     98                                alert("No collection specified"); 
     99                                return false; 
     100                            } 
     101                             
     102                            cl = document.getElementById("cl").value; 
     103                            if(cl.match(/^\\s*\$/)){ 
     104                                alert("No classifier specified"); 
     105                                return false; 
     106                            } 
     107                             
     108                            compute_font = document.getElementById("checkBoxFont").checked; 
     109                            compute_width = document.getElementById("checkBoxWidth").checked; 
     110                             
     111                            generate_browsing = document.getElementById("checkBoxBrowsing").checked; 
     112                             
     113                            gs2=$isGSDL2; 
     114                             
     115                            var url; 
     116                             
     117                            /*obtain url for classifier/browse page and grab all links (doc and CL links) from this page.*/ 
     118                            if(gs2){ 
     119                                url = "library.cgi"; 
     120                                url += "?c="+collect +"&a=d&cl=" + cl; 
     121                            }else{ 
     122                                url = "library"; 
     123                                url += "?c="+collect +"&a=b&rt=s&s=ClassifierBrowse&cl=" + cl;\ 
     124                                url += "&excerptid=gs_content"; 
     125                            } 
     126                             
     127                            docOIDs = []; 
     128                            clPages = []; 
     129                             
     130                            var outstandingURLs = []; 
     131                            var visitedURLs = {}; 
     132                             
     133                            outstandingURLs.push(url); 
     134                            visitedURLs[url] = 1; 
     135                             
     136                            while(outstandingURLs.length > 0){ 
     137                                url = outstandingURLs.shift(); 
     138                                 
     139                                var clHtml = urlGetSync(url); 
     140                                 
     141                                var workingTrav = document.getElementById("workingTraverse"); 
     142                                workingTrav.innerHTML = clHtml; 
     143                                 
     144                                var aElems = workingTrav.getElementsByTagName("a"); 
     145                                 
     146                                /* any links with (document|browse)=> outstandingURLS */ 
     147                                /* any links with (document|browse)/CL[0-9]/[0-9] => clPages */ 
     148                                /* any links with (document) => docOIDs */ 
     149                                 
     150                                var actionRE = new RegExp("(\\\\/)(?:document|browse)(\\\\/)"); 
     151                                var clRE     = new RegExp("(\\\\/)browse\\\\/" + cl + "(\\\\/\\\\d+)+(\$)"); 
     152                                var docRE    = new RegExp("(?:\\\\/)document\\\\/(.*?)(?:\$)"); 
     153                                 
     154                                for(var i = 0; i < aElems.length; i++){ 
     155                                    var aElem = aElems[i]; 
     156                                    var href = aElem.href; 
     157                                     
     158                                    if(href && href.match(actionRE)){ 
     159                                        if(href.match(clRE)){ 
     160                                            if(!visitedURLs[href]){ 
     161                                                console.log("found a new CL line: " + href); 
     162                                                outstandingURLs.push(href); 
     163                                                visitedURLs[href] = 1; 
     164                                                clPages.push(href); 
     165                                            } 
     166                                        }else if(href.match(docRE)){ 
     167                                            if(!visitedURLs[href]){ 
     168                                                var docMatch = docRE.exec(href); 
     169                                                var docOID = docMatch[1]; 
     170                                                 
     171                                                console.log("found a new doc line: " + docOID); 
     172                                                visitedURLs[href] = 1; 
     173                                                docOIDs.push(docOID); 
     174                                            } 
     175                                        } 
     176                                    } 
     177                                } 
     178                            } 
     179                             
     180                            numDocOIDs = docOIDs.length; 
     181                            numClPages = clPages.length; 
     182                            var iframe = document.getElementById('iframe'); 
     183                             
     184                            startProcessing(iframe);        //Process documents 
     185                                                         
     186                            return false; 
     187                        }); 
     188                         
     189                    }); 
     190                     
     191                    function startProcessing(iframe){ 
     192                         
     193                        var docOID = docOIDs.shift(); 
     194                         
     195                        iframe.src = getDocumentUrl(docOID); 
     196                         
     197                        var progressbar = document.getElementById('progressbar'); 
     198                        progressbar.style.display = 'block';                     
     199                    } 
     200                     
     201                                         
     202                    function pageLoaded(){ 
     203                        var iframe = document.getElementById("iframe"); 
     204                         
     205                        if(iframe.src){ 
     206                             
     207                            if(iframe.style.display != 'block'){ 
     208                                iframe.height = '90%'; 
     209                                iframe.style.display = 'block'; 
     210                            } 
     211                             
     212                            var iframeDoc; 
     213                             
     214                            if(iframe.contentDocument){ /* FF and Chrome */ 
     215                                iframeDoc = iframe.contentDocument; 
     216                            }else if(iframe.contentWindow){ /* IE */ 
     217                                iframeDoc = iframe.contentWindow.document; 
     218                            } 
     219                         
     220                            /*Check url - if it's a doc Url, call "writeDocument", otherwise call "writeClPage"*/ 
     221                            var clRE = new RegExp("(\\\\/)browse\\\\/" + cl + "(\\\\/\\\\d+)+(\$)"); 
     222                             
     223                             
     224                            if(iframe.src.match(clRE)){ 
     225                                writeClPage(iframe,iframeDoc); 
     226                            }else{ 
     227                                writeDocument(iframe,iframeDoc); 
     228                            } 
     229                        } 
     230                    } 
     231                     
     232                    function writeDocument(iframe,iframeDoc){ 
     233                         
     234                        var xmlUrl = iframe.src + "&o=xml"; 
     235                         
     236                        var iter = (numDocOIDs - docOIDs.length); 
     237                        var progressPercent = iter/numDocOIDs * 100; 
     238                         
     239                        var frameNum = getMetadata(xmlUrl,'frameID'); 
     240                         
     241                        if(frameNum == null){ 
     242                            frameNum = iter; 
     243                        } 
     244                         
     245                        //Add docOID and matching frame number to an associative array for later use. 
     246                        hashMapDocFrames[docOID] = frameNum; 
     247                         
     248                        \$(function(){ 
     249                            \$('#progressbar').progressbar({ value: progressPercent }); 
     250                        }); 
     251                         
     252                        var gsContent = iframeDoc.getElementById("gs_content"); 
     253                         
     254                        var assocElem = iframeDoc.getElementById("assocfilepath"); 
     255                         
     256                        var assocElem = iframeDoc.getElementById('assocfilepath'); 
     257                        var assoc = null; 
     258                         
     259                        if(assocElem === undefined || assocElem === null){ 
     260                            assoc = getMetadata(xmlUrl,'assocfilepath'); 
     261                        } 
     262                         
     263                        var expFrameTree = htmlToExpeditee(gsContent,compute_font,compute_width); 
     264                         
     265                        var expFrame = JSON.stringify(expFrameTree); 
     266                        //console.log(expFrame); 
     267                         
     268                        var url = "cgi-bin/html-to-expeditee.pl"; 
     269                        var params = "c=" + collect; 
     270                         
     271                        if(site.match(/\\w/)){ 
     272                            params += "&site=" + site; 
     273                        } 
     274                         
     275                        params += "&a=generate-frame&fn=" + frameNum; 
     276                        params += "&json=" + escape(expFrame); 
     277                         
     278                        //Add an assocfilepath but only if it is defined 
     279                        if(assoc !== null){ 
     280                            params += "&assoc=" + assoc; 
     281                        } 
     282                         
     283                        params += "&compute-font=" + compute_font; 
     284                                                 
     285                        params += "&page-type=" + "document"; 
     286                                             
     287                         
     288                        var clHtml = urlPostSync(url,params); 
     289                         
     290                        if(!clHtml.match(/html-to-expeditee saved frame/)){ 
     291                            alert("ERROR PROCESSING URL: " + url); 
     292                        } 
     293                         
     294                        if(docOIDs.length > 0){ 
     295                            var docOID = docOIDs.shift(); 
     296                            iframe.src = getDocumentUrl(docOID); 
     297                             
     298                        }else{ 
     299                            //start writing CL pages. 
     300                            if(generate_browsing){ 
     301                                numClPages = clPages.length; 
     302                             
     303                                var url = clPages.shift(); 
     304                                iframe.src = url; 
     305                                writeClPage(iframe,iframeDoc); 
     306                            }else{ 
     307                                //We are finished 
     308                                finish(iframe); 
     309                            } 
     310                        }    
     311                    } 
     312                     
     313                    function getDocumentUrl(docOID){ 
     314                        var url; 
     315                         
     316                        if(gs2){ 
     317                            url = "library.cgi"; 
     318                        }else{ 
     319                            url = "library"; 
     320                        } 
     321                         
     322                        url += "?c=" + collect + "&a=d&d=" + docOID; 
     323                                         
     324                        url += "&p.showAssocFilePath = 1"; 
     325                         
     326                        return url; 
     327                    } 
     328                     
     329                    function writeClPage(iframe,iframeDoc){ 
     330                         
     331                        var frameNum = numClPages - clPages.length; 
     332                        var progressPercent = frameNum / numClPages * 100; 
     333                         
     334                        \$(function(){ 
     335                            \$('#progressbar').progressbar({ value: progressPercent }); 
     336                        }); 
     337                         
     338                        var gsContent = iframeDoc.getElementById("gs_content"); 
     339                        var gsContentChildren = gsContent.getElementsByTagName('*'); 
     340                         
     341                        var docRE    = new RegExp("(?:\\\\/)document\\\\/(.*?)(?:\$)"); 
     342                         
     343                        //get rid of rectangles around nodes. 
     344                        for(var i = 0; i < gsContentChildren.length; i++){ 
     345                            var child = gsContentChildren[i]; 
     346                             
     347                            if(child.tagName !== "IMG"){ 
     348                                child.setAttribute('rect','norect'); 
     349                            } 
     350                             
     351                            if(child.tagName === "A"){ 
     352                                var aElem = child; 
     353                                var aElemSrc = aElem.href; 
     354                                 
     355                                //if aElemSrc is a document url, then extract docOID then access hash map and get matching frame number. 
     356                                if(aElemSrc.match(docRE)){ 
     357                                    var docMatch = docRE.exec(aElemSrc); 
     358                                    var docOID = docMatch[1]; 
     359                                    console.log("*** " + docOID); 
     360                                    var frameNum = hashMapDocFrames[docOID]; 
     361                                    var aElemChildren = aElem.getElementsByTagName('*'); 
     362                                     
     363                                    for(var j = 0; j < aElemChildren.length; j++){ 
     364                                        var aElemChild = aElemChildren[j]; 
     365                                        var frameName = collect + frameNum; 
     366                                        //console.log("*** " + frameName); 
     367                                        //aElemChild.setAttribute("link",frameName); 
     368                                        //console.log(aElemChild.link); 
     369                                    } 
     370                                     
     371                                }else{ 
     372                                    //TODO: Check if the link is a CL link. 
     373                                    //TODO: Make a hashmap for storing CL page frame numbers? 
     374                                } 
     375                            } 
     376                        } 
     377                         
     378                        //add link attribute to children nodes of <a> elements. 
     379                         
     380                         
     381                        //TODO: Need to change htmlToExpeditee code to account for links 
     382                         
     383                         
     384                        var expFrameTree = htmlToExpeditee(gsContent); 
     385                        var expFrame = JSON.stringify(expFrameTree); 
     386                        //console.log(expFrame); 
     387                         
     388                        var url = "cgi-bin/html-to-expeditee.pl"; 
     389                        var params = "c=" + collect; 
     390                         
     391                        if(site.match(/\\w/)){ 
     392                            params += "&site=" + site; 
     393                        } 
     394                         
     395                        params += "&cl=" + cl; 
     396                        params += "&a=generate-frame&fn=" + frameNum; 
     397                        params += "&json=" + escape(expFrame); 
     398                        params += "&page-type=" + "clPage"; 
     399                         
     400                        var clHtml = urlPostSync(url,params); 
     401                         
     402                        if(!clHtml.match(/html-to-expeditee saved frame/)){ 
     403                            alert("Error processing url: " + url); 
     404                        } 
     405                         
     406                        if(clPages.length > 0){ 
     407                            var clPage = clPages.shift(); 
     408                            iframe.src = clPage; 
     409                        }else{ 
     410                            finish(iframe); 
     411                        } 
     412                    } 
     413                     
     414                    function finish(iframe){ 
     415                        var progressbar = document.getElementById("progressbar"); 
     416                        progressbar.style.display = "none"; 
     417                         
     418                        iframe.style.display = "none"; 
     419                        delete iframe.src; 
     420                    } 
     421                     
     422                    /** 
     423                    * This method is used at this stage to retrieve assocfilepath and 
     424                    * frame number metadata values from the document's xml. 
     425                    **/ 
     426                    function getMetadata(xmlUrl,nameValue){ 
     427                        var metadata = null; 
     428                         
     429                        \$.ajax({ 
     430                            type: "GET", 
     431                            async: false, 
     432                            url: xmlUrl, 
     433                            dataType: "xml", 
     434                            success: function(xml){ 
     435                                \$(xml).find('metadata').each(function(){ 
     436                                    var name = \$(this).attr('name'); 
     437                                     
     438                                    if(name === nameValue){ 
     439                                        if(metadata === null){ 
     440                                            metadata = \$(this).text(); 
     441                                        } 
     442                                    } 
     443                                }); 
     444                            } 
     445                        }); 
     446                         
     447                        return metadata; 
     448                    } 
     449                     
     450                </script> 
    366451                 
     452                <div id="progressbar" width="100%" style="display: none; margin: 10px; height: 10px;"></div> 
     453                 
     454                <div id="workingTraverse" style="display: none"></div> 
     455                 
     456                <hr style="margin: 10px;"> 
     457                 
     458                <iframe width="100%" id="iframe" style="display:none;" onload="pageLoaded()"></iframe> 
     459    </body>  
     460</html>          
     461EOT 
     462 
     463    print "Content-type:text/html\n\n"; 
     464    print $html_form; 
     465} 
     466 
     467sub main 
     468{ 
     469    my $gsdl_cgi = new gsdlCGI(); 
     470     
     471    #Load GS modules 
     472    $gsdl_cgi->setup_gsdl(); 
     473     
     474    my $gsdlhome = $ENV{'GSDLHOME'}; 
     475    $gsdl_cgi->checked_chdir($gsdlhome); 
     476     
     477    #TODO: Refactor so we only need to use HtmlToExpediteeAction 
     478    require cgiactions::HtmlToExpediteeAction; 
     479    require cgiactions::CollectionSpaceAction; 
     480     
     481    $gsdl_cgi->parse_cgi_args(); 
     482    $gsdl_cgi->{'xml'} = 0; 
     483     
     484    my $fn = $gsdl_cgi->clean_param("fn"); 
     485     
     486    if(defined $fn){ 
     487        #page_type can have two values: "document" or "clPage" 
     488        my $page_type = $gsdl_cgi->clean_param("page-type"); 
     489         
     490        if(defined $page_type){ 
     491            my $action; 
     492             
     493            if($page_type eq "document"){ 
     494                $action = new HtmlToExpediteeAction($gsdl_cgi,$iis6_mode); 
     495            }elsif($page_type eq "clPage"){ 
     496                $action = new CollectionSpaceAction($gsdl_cgi,$iis6_mode); 
     497            }else{ 
     498                $gsdl_cgi->generate_error("Invalid page type specified. Must be 'document' or 'clPage'"); 
    367499            } 
    368500             
    369           }); 
    370          
    371         return metadata; 
    372       } 
    373  
    374     </script> 
    375  
    376     <div id="progressbar" width="100%"  
    377           style="display: none; margin: 10px; height: 10px;"></div> 
    378     <div id="workingTraverse" style="display: none"></div> 
    379  
    380     <hr style="margin: 10px;"> 
    381  
    382     <iframe width="100%" id="iframe" style="display: none;"  
    383             onload="pageLoaded()"></iframe> 
    384  
    385   </body> 
    386 </html> 
    387 EOT 
    388  
    389     print "Content-type:text/html\n\n"; 
    390     print $html_form; 
     501            $action->do_action(); 
     502        }else{ 
     503            $gsdl_cgi->generate_error("No page type specified. Must be 'document' or 'clPage'"); 
     504        } 
     505         
     506    }else{ 
     507        # generate html form 
     508        my $collect = $gsdl_cgi->clean_param("collect"); 
     509        my $cl = $gsdl_cgi->clean_param("cl"); 
     510         
     511        #Establish collect_dir using defining 'site' along the way if GS3 
     512        my $site = undef; 
     513        my $isGSDL2 = undef; 
     514         
     515        if($gsdl_cgi->greenstone_version() == 2){ 
     516            $isGSDL2 = 1; 
     517        }else{ 
     518            $isGSDL2 = 0; 
     519             
     520            #GS3 (and possible future versions) make use of 'site' 
     521            $site = $gsdl_cgi->clean_param("site"); 
     522             
     523            if(!defined $site){ 
     524                $gsdl_cgi->generate_error("No site specified."); 
     525            }    
     526        } 
     527         
     528        generate_html_form($isGSDL2,$site,$collect,$cl); 
     529    } 
    391530} 
    392531 
    393 sub main 
    394 { 
    395  
    396 #    $ENV{'QUERY_STRING'} = "a=...";set-import-metadata&c=espresso-music&d=HASH012d6f72cde5dc48162f4a1d.1&metaname=annotation&metapos=0&metavalue=adfadfad"; 
    397 #    $ENV{'REQUEST_METHOD'} = "GET"; 
    398  
    399     my $gsdl_cgi = new gsdlCGI(); 
    400  
    401     # Load the Greenstone modules that we need to use 
    402     $gsdl_cgi->setup_gsdl(); 
    403  
    404     my $gsdlhome = $ENV{'GSDLHOME'};     
    405     $gsdl_cgi->checked_chdir($gsdlhome); 
    406  
    407     require cgiactions::HtmlToExpediteeAction; 
    408      
    409     # Useful debug statement for seeing what packages have been included 
    410 ####    printf("%-45s%-s\n",$_,$INC{$_}) foreach (sort keys %INC); 
    411      
    412     $gsdl_cgi->parse_cgi_args(); 
    413  
    414     # We don't want the gsdlCGI module to return errors and warnings in XML 
    415     $gsdl_cgi->{'xml'} = 0; 
    416  
    417     my $fn = $gsdl_cgi->clean_param("fn");     # frame number 
    418  
    419     if (defined $fn) { 
    420  
    421     my $action = new HtmlToExpediteeAction($gsdl_cgi,$iis6_mode); 
    422  
    423     $action->do_action(); 
    424     } 
    425     else { 
    426     # generate form, pre-filled out with any useful values such 
    427     # as the collection and classifier value  
    428  
    429     my $collect = $gsdl_cgi->clean_param("collect");    
    430     my $cl = $gsdl_cgi->clean_param("cl");  
    431          
    432     # Establish collect_dir using defining 'site' along the way if GS3 
    433  
    434     my $site = undef;  
    435     my $isGSDL2 = undef; 
    436  
    437     if ($gsdl_cgi->greenstone_version() == 2) {  
    438         $isGSDL2 = 1; 
    439     } 
    440     else { 
    441         $isGSDL2 = 0; 
    442          
    443         # GS3 (and possible future versions) make use of 'site' 
    444         $site = $gsdl_cgi->clean_param("site");    
    445         if (!defined $site) { 
    446         $gsdl_cgi->generate_error("No site specified."); 
    447         } 
    448     } 
    449  
    450     generate_html_form($isGSDL2,$site,$collect,$cl); 
    451     } 
    452 } 
    453  
    454  
    455  
    456532&main(); 
  • gs3-extensions/html-to-expeditee/trunk/src/src/js/html-to-expeditee.js

    r26731 r26749  
    122122        font_size = getStyle(node,'font-size'); 
    123123        font_color = getStyle(node,'color'); 
    124          
    125         /*console.log("Retrieving node: " + node); 
    126      
    127         console.log("Retrieving font family: " + font_family); 
    128         console.log("Retrieving font size: " + font_size); 
    129         console.log("Retrieving font color: " + font_color);*/ 
    130124    } 
    131125     
     
    160154        jsonNode.xr = pxr; 
    161155        jsonNode.yb = pyb; 
    162  
     156         
     157        var link = node.link; 
     158        if(link !== null && link !== undefined){ 
     159            jsonNode.link = link; 
     160            console.log("Adding link"); 
     161        }else{ 
     162            console.log("no link found"); 
     163        } 
     164         
    163165        var parent = node.parentNode; 
    164166         
     
    203205            var parentPos = getElementPosition(parent); 
    204206            var parentWidth = parentPos.xr - parentPos.xl; 
    205                          
    206             /*console.log("parent.xl: " + parentPos.xl); 
    207             console.log("parent.xr: " + parentPos.xr); 
    208             console.log("parent width: " + parentWidth);*/ 
    209              
     207 
    210208            jsonNode.width = parentWidth; 
    211209        }