Ignore:
Timestamp:
2013-01-18T18:37:03+13:00 (11 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 deleted
5 edited

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        }
Note: See TracChangeset for help on using the changeset viewer.