Ignore:
Timestamp:
2016-11-06T03:10:07+13:00 (7 years ago)
Author:
Georgiy Litvinov
Message:

More fixes and imporovements for hierarchy menu

File:
1 edited

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