Changeset 31063

Show
Ignore:
Timestamp:
06.11.2016 03:10:07 (3 years ago)
Author:
litvinovg
Message:

More fixes and imporovements for hierarchy menu

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/hierarchy.js

    r31023 r31063  
    99} 
    1010// Function to set Id as TEXTAREA value 
    11 function setHierarchyId(a) 
     11function chooseHierarchyOption(a) 
    1212{ 
    1313     
     
    2323        $(tr.getElementsByTagName("TEXTAREA")).val(metaValue); 
    2424        //  Set button name 
    25         removeSuggestionsMenu(tr, metaTitle); 
     25        setHierarchyButtonText(tr, metaTitle); 
     26        removeSuggestionsMenu(tr); 
    2627        //Hide menu after click 
    2728        $(tr).find(".metaDataHierarchyMenu").find("ul li ul li").hide(); 
    28         //If we left TEXTAREA, hide all menus 
    29         //if (document.activeElement.tagName != "TEXTAREA") 
    30         //{ 
    31         //  $(tr).find(".metaDataHierarchyMenu").hide(); 
    32         //} 
     29        //Set focus on textarea 
    3330        tr.getElementsByTagName("TEXTAREA")[0].focus(); 
    3431         
     
    3936function openHierarchyMenuLevel(menuItem) 
    4037{ 
    41         //console.log(menuItem); 
    42              
    43             var tr = findAncestorByTagName(menuItem,"TR"); 
    44             //get current MetaDataName 
    45             var metaName = $(tr.getElementsByClassName("metaTableCellName")[0]).text(); 
     38           var tr = findAncestorByTagName(menuItem,"TR"); 
     39           //get current MetaDataName 
     40           var metaName = getMetaName(tr); 
    4641           //Get current hierarchy from storages 
    4742           var hierarchyData = hierarchyStorage[metaName]; 
     
    5853                 { 
    5954                    id = menuItem.attr('id').match(getIdExp); 
    60                      } 
    61                 //console.log("ID " + id); 
    62                 //id.match(getIdExp); 
     55                 } 
    6356                if (id == null) 
    6457                { 
     
    7366                { 
    7467                    if(childExpr.test(key)){ 
    75                         levelItems[key]='<li id="'+key+'" ><button onclick="setHierarchyId(this)"  metavalue='+ hierarchyData[key][0] +' metatitle='+ hierarchyData[key][1] +'>' + hierarchyData[key][1] + '</button></li>'; 
    76                         //console.log(levelItems[key]); 
    77                          
     68                        levelItems[key]='<li class="hierarchyOption" id="'+key+'" ><button onclick="chooseHierarchyOption(this)"  metavalue="'+ hierarchyData[key][0] +'" metatitle="'+ hierarchyData[key][1] +'">' + hierarchyData[key][1] + '</button></li>'; 
    7869                    } 
    7970                 } 
    80               //If no elements in hierarchy level 
     71                 //If no elements in hierarchy level 
    8172                 if (jQuery.isEmptyObject(levelItems)) 
    8273                 { 
     
    8475                    menuItem.append("<ul></ul>"); 
    8576                     
    86                  // console.log("no elements in hierarchy level"); 
    8777                 } 
    8878                 else { 
     
    10494                        //menuItem.find('ul'); 
    10595                        menuItem.children('ul').slideDown(); 
    106                    
    107                                       
    108                     //console.log("debug line 5"); 
    10996                 } 
    11097                  
     
    135122          if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    136123          { 
    137               var hierarchyFile = xmlhttp.responseText; 
    138               var StringData = []; 
    139                 var hierarchyData = {}; 
    140                 //var expr = /^([0-9]+(?:\.[0-9]+)*)\ ([0-9]+(?:\.[0-9]+)*)\ (.*)/m; 
    141                 var expr = /^(\S*|\"[^\"]*\")\ +([0-9]+(?:\.[0-9]+)*)\ +(.*)/m; 
    142                 StringData = hierarchyFile.split('\n'); 
    143                 for (var i = 0; i < StringData.length; i++)  
    144                     { 
    145                     var result = StringData[i].match(expr); 
    146                     // If result not null 
    147                     if (result != null && result.length == 4)  
    148                         { 
    149                         // populate hierarchy object 
    150                         hierarchyData[result[2]] = [result[1], result[3]]; 
    151                         } 
    152  
    153                     } 
    154                 addHierarchyToStorage(metaName, hierarchyData); 
    155                 setHierarchyEventsWrappers(metaName); 
     124            var hierarchyFile = xmlhttp.responseText; 
     125            var StringData = []; 
     126            var hierarchyData = {}; 
     127            var expr = /^(\S*|\"[^\"]*\")\ +([0-9]+(?:\.[0-9]+)*)\ +(.*)/m; 
     128            StringData = hierarchyFile.split('\n'); 
     129            for (var i = 0; i < StringData.length; i++) { 
     130                var result = StringData[i].match(expr); 
     131                // If result not null 
     132                if (result != null && result.length == 4) { 
     133                    // populate hierarchy object 
     134                    hierarchyData[result[2]] = [ result[1].replace(/^\"|\"$/g, ''), result[3].replace(/^\"|\"$/g, '') ]; 
     135                } 
     136 
     137            } 
     138            addHierarchyToStorage(metaName, hierarchyData); 
     139            setHierarchyEventsWrappers(metaName); 
    156140          } 
    157141      } 
     
    174158{ 
    175159        //get current MetaDataName 
    176         var metaName = $(row.getElementsByClassName("metaTableCellName")[0]).text(); 
    177          
    178         var hierarchyMenuName = 'Menu'; 
     160        var metaName = getMetaName(row); 
     161        defaultHierarchyButtonText = 'Top level menu'; 
     162        var hierarchyButtonText = defaultHierarchyButtonText; 
    179163        // Check if textarea already contain right menu key 
    180164        var textAreaValue = $(row).find('TEXTAREA').val(); 
     
    182166        //Get current hierarchy from storages 
    183167        var hierarchyData = hierarchyStorage[metaName]; 
    184          
    185         if (hierarchyData[textAreaValue] && (hierarchyData[textAreaValue] != null))  
    186         {                
    187             hierarchyMenuName = hierarchyData[textAreaValue][1]; 
    188              
     168        //TODO Modificate 
     169         
     170         
     171        for(var key in hierarchyData) 
     172        { 
     173            if (hierarchyData[key][0] == textAreaValue) 
     174                { 
     175                    hierarchyButtonText = hierarchyData[key][1]; 
     176                    break; 
     177                } 
    189178        } 
    190179         
    191180        //Menu element 
    192         var mainmenu = '<td class="metaDataHierarchyMenu" style="display: none;"><ul><li id="hierarchyLevel"><button class="hierarchyMenuButton"  title="Menu">' + hierarchyMenuName + '</button></li></ul></td>' 
     181        var mainmenu = '<td class="metaDataHierarchyMenu" style="display: none;"><ul><li id="hierarchyLevel"><button class="hierarchyMenuButton"  title="Menu">' + hierarchyButtonText + '</button></li></ul></td>' 
    193182        //Insert hierarchy menu 
    194183        $(row).find('.metaTableCellRemove').after(mainmenu); 
     
    199188        { 
    200189            var input = $(this).val(); 
     190            var hierarchyButtonText; 
    201191            var row = this.parentElement.parentElement; 
    202192            //RegExp to test a valid key in input  
     
    205195            var KeyStartExp = /^(?:[0-9]+(?:\.[0-9]+)*)?\.$/; 
    206196            //if input valid and key found  
    207             if ( KeyExp.test(input) && hierarchyData[input])  
     197            removeSuggestionsMenu(row); 
     198            createSuggestionsMenu(row); 
     199            /*if ( KeyExp.test(input) && hierarchyData[input] || KeyStartExp.test(input))  
    208200            { 
    209                 removeSuggestionsMenu(row,hierarchyData[input]); 
    210201                createSuggestionsMenu(row); 
    211202            } 
    212             else if (KeyStartExp.test(input))  
    213             { 
    214                 removeSuggestionsMenu(row,hierarchyMenuButton); 
    215                 createSuggestionsMenu(row); 
     203            */ 
     204            if (hierarchyData[input]){ 
     205                hierarchyButtonText = hierarchyData[input][1]; 
     206            } else { 
     207                hierarchyButtonText = defaultHierarchyButtonText; 
    216208            } 
    217             else { 
    218                 removeSuggestionsMenu(row,hierarchyMenuButton);  
    219             }  
     209            setHierarchyButtonText(row, hierarchyButtonText); 
     210             
    220211        }); 
    221212        //Show created menu 
     
    226217{ 
    227218    //get current MetaDataName 
    228     var metaName = $(row.getElementsByClassName("metaTableCellName")[0]).text(); 
    229     //Get current hierarchy from storages 
     219    var metaName = getMetaName(row);  
     220    //Get current hierarchy from storage 
    230221    var hierarchyData = hierarchyStorage[metaName]; 
    231      
    232     var input = $(row.getElementsByClassName("metaTableCellArea")[0]).val(); 
    233      
    234     //RegExp to get SuggestionsMenu 
    235     var SuggestionsMenuExp = new RegExp("^0*" + input.replace(/\./g, '\\.0*') + "\\.?[0-9]+$") 
    236222    //Hierarchy suggestions menu 
    237223    var SuggestionsMenu = ""; 
    238     for(var key in hierarchyData) 
     224     
     225    var input = $(row.getElementsByClassName("metaTableCellArea")[0]).val(); 
     226     
     227    if (input.replace(/[0-9\.\s]/g, '') === "") 
    239228    { 
    240     var SuggestionsMenuItems = {}; 
    241          
    242         if (SuggestionsMenuExp.test(key))  
     229        //RegExp to get SuggestionsMenu 
     230        var SuggestionsMenuExp = new RegExp("^0*" + input.replace(/\./g, '\\.0*') + "\\.?[0-9]+$") 
     231         
     232            for(var key in hierarchyData) 
    243233        { 
    244             SuggestionsMenuItems[key]='<li class="hierarchySuggestionsMenu" id="'+key+'" ><button metavalue='+ hierarchyData[key][0] +' metatitle='+ hierarchyData[key][1] +' onclick="setHierarchyId(this)" >' + key.substring(String(input).length) + " " + hierarchyData[key][1] + '</button></li>'; 
     234            if (SuggestionsMenuExp.test(key))  
     235            { 
     236                SuggestionsMenu +='<li class="hierarchySuggestionsMenu hierarchyOption" id="'+key+'" ><button metavalue="'+ hierarchyData[key][0] +'" metatitle="'+ hierarchyData[key][1] +'" onclick="chooseHierarchyOption(this)" >' + key.substring(String(input).length) + " " + hierarchyData[key][1] + '</button></li>'; 
     237            } 
    245238        } 
    246          
    247         for(var key in SuggestionsMenuItems) 
     239    } else { 
     240        //RegExp to get SuggestionsMenu 
     241        var SuggestionsMenuExp = new RegExp(".*" + input + ".*","i") 
     242         
     243            for(var key in hierarchyData) 
    248244        { 
    249             //Fill menu with items 
    250             SuggestionsMenu += SuggestionsMenuItems[key]; 
     245            if (SuggestionsMenuExp.test(hierarchyData[key][1]) && input !== hierarchyData[key][0])  
     246            { 
     247                SuggestionsMenu +='<li class="hierarchySuggestionsMenu hierarchyOption" id="'+key+'" ><button metavalue="'+ hierarchyData[key][0] +'" metatitle="'+ hierarchyData[key][1] +'" onclick="chooseHierarchyOption(this)" >' + hierarchyData[key][1] + '</button></li>'; 
     248            } 
    251249        } 
    252          
    253250    } 
     251     
     252     
    254253     
    255254    //Append new SuggestionsMenu 
     
    258257    $(row).each(function(){setHierarchyHoverEvent($(this),".hierarchySuggestionsMenu")}); 
    259258} 
    260 function removeSuggestionsMenu(row,menuNewText) 
    261 { 
    262     //Remove old SuggestionsMenu 
     259//function removeSuggestionsMenu(row,menuNewText) 
     260function removeSuggestionsMenu(row) 
     261{ 
    263262    $(row).find(".hierarchySuggestionsMenu").remove(); 
    264     //Replace text on Hierarchy menu to default 
    265     $(row).find(".hierarchyMenuButton").text(menuNewText); 
     263} 
     264function setHierarchyButtonText(row, title){ 
     265    $(row).find(".hierarchyMenuButton").text(title); 
    266266} 
    267267 
    268268function setHierarchyEventsWrappers(metaName) 
    269269{ 
    270      
    271270    //Loop through every metaTableCell 
    272271    $(".metaTableCellName").each(function() { 
    273272        //Check if it is a hierarchy row 
    274         //TODO implement real check 
    275         //if($(this).text()=="rubricator") 
    276273        var currentMetaName = $(this).text(); 
    277         //console.log(metaName) 
    278         //console.log(metaDataName) 
    279274        if (currentMetaName in hierarchyStorage && currentMetaName == metaName) 
    280275        { 
    281             //console.log('testXX') 
    282276            var row = this.parentElement; 
    283277            var textArea = row.getElementsByClassName("metaTableCellArea")[0]; 
     
    369363                       { 
    370364                            var row = this.parentElement.parentElement; 
    371                             //Test if there are open submenu 
     365                             
    372366                            var found = $(row).find('.metaDataHierarchyMenu ul li ul').filter(":visible")[0]; 
    373                              
    374                             //Hide hierarchy menu if there are no open submenus 
    375                             if ( found === undefined)  
     367                            //Test if there are open submenu and cursor left tr element 
     368                            if ( found === undefined && !$(row).is(':hover'))  
    376369                            { 
    377                                 //Hide menu 
     370                                //Hide hierarchy menu if there are no open submenus 
    378371                                $(row).find('.metaDataHierarchyMenu').hide(); 
    379                                 //console.log(this); 
    380                                 //console.log(row); 
    381                                 //console.log(found); 
     372                                 
     373                                //Set metadata value if textarea contains hierarchy path 
     374                                substituteHierarchyMetaValue(row); 
    382375                            } 
    383376                             
     
    388381      }); 
    389382} 
     383 
     384function substituteHierarchyMetaValue(row){ 
     385    var text = $(row).find('TEXTAREA').val(); 
     386    var metaName = getMetaName(row); 
     387    var hierarchyData = hierarchyStorage[metaName]; 
     388    if (hierarchyData[text]){ 
     389        var metaValue = hierarchyData[text][0]; 
     390        $(row).find('TEXTAREA').val(metaValue); 
     391         
     392    } 
     393 
     394} 
     395function getMetaName(row){ 
     396    return $(row.getElementsByClassName("metaTableCellName")[0]).text(); 
     397} 
    390398var hierarchyStorage = {}; 
    391399function addHierarchyToStorage(metaDataName,processedHierarchy) 
    392400{ 
    393401    hierarchyStorage[metaDataName] = processedHierarchy; 
    394     //console.log( hierarchyStorage) 
    395     //console.log( metaDataName) 
    396      
    397 } 
    398  
     402     
     403} 
     404