phpBMS

Changeset 447 for trunk/phpbms/common

Show
Ignore:
Timestamp:
02/27/09 10:58:47 (3 years ago)
Author:
brieb
Message:
  • Added ability of smart searches to optionally not require a correct response from the database.
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/phpbms/common/javascript/smartsearch.js

    r386 r447  
    3838 
    3939smartSearch = { 
    40          
     40 
    4141        displayValue: Array(), 
    42          
     42 
    4343        triggerLookup: Array(), 
    4444 
     
    4848 
    4949        committedDisplayValue: Array(), 
    50          
    51         changeDisplay: function(e){              
     50 
     51        changeDisplay: function(e){ 
    5252                //this sets the time out to do an ajax lookup when they are done typing their search criteria. 
    53                  
     53 
    5454                var display = e.src(); 
    5555                var ssID = display.id.substr(3); 
     
    5757                if(!smartSearch.displayValue[ssID]) 
    5858                        smartSearch.displayValue[ssID] = ""; 
    59                  
     59 
    6060                var lookupValue = display.value.trim(); 
    61                  
     61 
    6262                if (lookupValue != smartSearch.displayValue[ssID] && lookupValue != ""){ 
    6363 
     
    6666 
    6767                        smartSearch.triggerLookup[ssID] = window.setTimeout("smartSearch.lookup('"+ssID+"')",250); 
    68                          
     68 
    6969                } else { 
    7070                        //it's possible they hit the down, up arrow, or the return button 
     
    7373 
    7474                        switch(key){ 
    75                                  
     75 
    7676                                case 40: 
    7777                                        //move highlight down 
    7878                                        smartSearch.moveSearchHighlight(ssID, "down"); 
    7979                                        break; 
    80                  
     80 
    8181                                case 38: 
    8282                                        //move highlight down 
    8383                                        smartSearch.moveSearchHighlight(ssID, "up"); 
    8484                                        break; 
    85                                  
     85 
    8686                                case 27: 
    8787                                        //cancel 
    8888                                        smartSearch.cancelSearch(null, ssID); 
    89                                  
     89 
    9090                        }//endswitch 
    9191 
    9292                }//endif 
    93                  
     93 
    9494        },//end method 
    9595 
     
    9898 
    9999        lookup: function(ssID, offset){ 
    100                  
     100 
    101101                // We need to do an ajax lookup based on the criteria. 
    102102                // Fisrt we need to see if the holding box is visible. 
    103                 // if not we need to create it           
     103                // if not we need to create it 
    104104                if (!smartSearch.searchBox[ssID]) 
    105105                        smartSearch.createSearchBox(ssID); 
    106                          
     106 
    107107 
    108108                var sbResults = getObjectFromID("SBResults-" + ssID); 
     
    112112                        sbResults.style.height=""; 
    113113                } 
    114                                                  
    115                 var closeButton = getObjectFromID("SBCloseButton-" + ssID);              
     114 
     115                var closeButton = getObjectFromID("SBCloseButton-" + ssID); 
    116116                closeButton.className = "graphicButtons buttonSpinner"; 
    117                  
     117 
    118118                var searchDisplay = getObjectFromID("ds-" + ssID); 
    119119                smartSearch.displayValue[ssID] = searchDisplay.value; 
    120                  
     120 
    121121                var sdbid = getObjectFromID("sdbid-" + ssID); 
    122                          
     122 
    123123 
    124124                var theurl = APP_PATH + "smartsearch.php?sdbid=" + encodeURI(sdbid.value) + "&t=" + encodeURI(searchDisplay.value.trim()); 
    125                  
     125 
    126126                if(offset != 0) 
    127127                        theurl += "&o=" + offset; 
    128                  
     128 
    129129                if(!smartSearch.searchResultsConnects[ssID]) 
    130130                        smartSearch.searchResultsConnects[ssID] = Array(); 
     
    144144 
    145145                var numRecords = response.resultRecords.length 
    146                  
     146 
    147147                var totalRecords = response.totalRecords; 
    148148 
    149                 var newText="";          
     149                var newText=""; 
    150150 
    151151                if(numRecords) { 
    152                         for(var i=0; i<numRecords; i++){                                 
     152                        for(var i=0; i<numRecords; i++){ 
    153153 
    154154                                newText += '\ 
     
    158158                                        </a>'; 
    159159 
    160                                                                  
     160 
    161161                        }//endfor 
    162162 
     
    167167                                <div id="SBMoreDiv-' + ssID + '">\ 
    168168                                        <button type="button" id="SBMoreButton-' + ssID +'" class="smallButtons" name="' + (parseInt(offset) + parseInt(numRecords)) + '">more results...</button>\ 
    169                                 </div>';                                 
     169                                </div>'; 
    170170 
    171171                        }//end if 
    172                          
     172 
    173173                } else { 
    174                          
     174 
    175175                        newText = '<div>No Records Found Matching Criteria</div>'; 
    176                          
     176 
    177177                }//endif 
    178178 
    179179                if(!offset) 
    180                         sbResults.innerHTML =  newText;  
     180                        sbResults.innerHTML =  newText; 
    181181                else 
    182182                        sbResults.innerHTML += newText; 
    183                  
     183 
    184184                var searchItems = getElementsByClassName("SBSI-" + ssID); 
    185185                smartSearch.searchResultsConnects[ssID] = Array(); 
     
    187187                for(i=0; i < searchItems.length; i++) 
    188188                        smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(searchItems[i], "onclick", smartSearch.clickSearchResult); 
    189                          
     189 
    190190                var moreButton = getObjectFromID("SBMoreButton-" + ssID); 
    191191                if(moreButton) 
    192                         smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(moreButton, "onclick", smartSearch.getMoreResults);                    
     192                        smartSearch.searchResultsConnects[ssID][smartSearch.searchResultsConnects[ssID].length] = connect(moreButton, "onclick", smartSearch.getMoreResults); 
    193193 
    194194                closeButton.className = "graphicButtons buttonX"; 
     
    197197 
    198198        createSearchBox: function(ssID){ 
    199                  
     199 
    200200                //need to grab search box for reference x and ys 
    201201                var searchdisplay = getObjectFromID("ds-"+ssID); 
    202                  
     202 
    203203                if(!smartSearch.searchBoxConnects[ssID]) 
    204204                        smartSearch.searchBoxConnects[ssID] = Array(); 
    205                  
     205 
    206206                if(smartSearch.searchBoxConnects[ssID][0]) 
    207207                        disconnect(smartSearch.searchBoxConnects[ssID][0]); 
     
    227227                newDiv.innerHTML = '<button type="button" id="SBCloseButton-' + ssID + '" class="SBCloseButton graphicButtons buttonSpinner" tabindex="4000"><span>close</span></button>'; 
    228228                smartSearch.searchBox[ssID].appendChild(newDiv) 
    229                  
     229 
    230230                newDiv = document.createElement("div"); 
    231231                newDiv.id = "SBResults-" + ssID; 
     
    237237                newDiv.id = "SBFooter"; 
    238238                smartSearch.searchBox[ssID].appendChild(newDiv) 
    239                  
     239 
    240240                searchdisplay.parentNode.appendChild(smartSearch.searchBox[ssID]); 
    241                  
     241 
    242242                var closeButton = getObjectFromID("SBCloseButton-" + ssID); 
    243                  
     243 
    244244                smartSearch.searchBoxConnects[ssID][0] = connect(smartSearch.searchBox[ssID],"onmousedown", smartSearch.mouseDownDropDown); 
    245245                smartSearch.searchBoxConnects[ssID][1] = connect(closeButton,"onclick",smartSearch.cancelSearch); 
    246                  
     246 
    247247        },//end method 
    248248 
     
    253253                var box = e.src(); 
    254254                var ssID = box.id.substr(10) 
    255                  
     255 
    256256                smartSearch.inDropDown[ssID] = true; 
    257                  
     257 
    258258        },//end method - clickDropDown 
    259259 
     
    261261 
    262262        blurIdent: Array(), 
    263          
     263 
    264264        blurDisplay: function(e){ 
    265265 
    266266                var display = e.src(); 
    267                 var ssID = display.id.substr(3);                 
     267                var ssID = display.id.substr(3); 
    268268 
    269269                if(!smartSearch.inDropDown[ssID]) 
    270270                        smartSearch.blurIdent[ssID] = window.setTimeout("smartSearch._blurDisplay('" + ssID + "')",200); 
    271                  
     271 
    272272                smartSearch.inDropDown[ssID] = false; 
    273                  
    274         },//end method 
    275          
    276          
     273 
     274        },//end method 
     275 
     276 
    277277        _blurDisplay: function(ssID){ 
    278278 
    279279                var searchDisplay = getObjectFromID("ds-" + ssID); 
    280                  
     280 
    281281                if(smartSearch.searchBox[ssID] || searchDisplay.value != smartSearch.committedDisplayValue[ssID]){ 
    282                          
     282 
    283283                        var highlight = getElementsByClassName("SBSel-"+ssID); 
    284284 
    285285                        if(highlight.length !== 0){ 
    286                                  
     286 
    287287                                smartSearch.chooseSearchItem(highlight[0]) 
    288                                  
     288 
    289289                        } else { 
    290290 
     
    293293                                else 
    294294                                        smartSearch.blankSearch(ssID); 
    295                                  
     295 
    296296                        }//end if 
    297                          
     297 
    298298                }//end if 
    299                  
     299 
    300300                smartSearch.blurIdent[ssID] = false; 
    301                                  
     301 
    302302        },//end method 
    303303 
    304304 
    305305        blankSearch: function(ssID){ 
    306                  
    307                 var searchDisplay = getObjectFromID("ds-" + ssID);                               
     306 
     307                var searchDisplay = getObjectFromID("ds-" + ssID); 
    308308                var valueField = getObjectFromID(ssID); 
    309                  
     309 
    310310                valueField.value = "" 
    311311                smartSearch.displayValue[ssID] = ""; 
     
    324324 
    325325        cancelSearch: function(e, ssID){ 
    326                  
     326 
    327327                if(e){ 
    328                          
     328 
    329329                        var thebutton = e.src() 
    330330                        ssID = thebutton.id.substr(14); 
    331                          
     331 
    332332                }//endif - e 
    333                  
    334                 var searchDisplay = getObjectFromID("ds-" + ssID);                               
    335  
    336                 if(smartSearch.searchBox[ssID])          
     333 
     334                var searchDisplay = getObjectFromID("ds-" + ssID); 
     335                var freeForm = getObjectFromID("sff-" + ssID); 
     336 
     337                if(smartSearch.searchBox[ssID]) 
    337338                        searchDisplay.parentNode.removeChild(smartSearch.searchBox[ssID]); 
    338                  
    339                 searchDisplay.value = smartSearch.committedDisplayValue[ssID]; 
    340                 smartSearch.displayValue[ssID] = smartSearch.committedDisplayValue[ssID]; 
     339 
     340                if(freeForm.value == 0){ 
     341 
     342                        searchDisplay.value = smartSearch.committedDisplayValue[ssID]; 
     343                        smartSearch.displayValue[ssID] = smartSearch.committedDisplayValue[ssID]; 
     344 
     345                }//end free forming wipes 
     346 
    341347                smartSearch.searchBox[ssID] = null; 
    342                  
     348 
    343349                smartSearch.inDropDown[ssID] = false; 
    344350                //searchDisplay.blur(); 
     
    349355 
    350356        clickSearchResult: function(e){ 
    351                  
     357 
    352358                var theItem = e.src(); 
    353359                var classes = theItem.className.split(" "); 
    354360                var ssID = classes[1].substr(5); 
    355                  
     361 
    356362                window.clearTimeout(smartSearch.blurIdent[ssID]); 
    357363                smartSearch.blurIdent[ssID] = false; 
    358                  
     364 
    359365                smartSearch.chooseSearchItem(theItem); 
    360366                e.stop(); 
    361                  
     367 
    362368        },//end method 
    363369 
    364370 
    365371        chooseSearchItem: function(atag){ 
    366                  
     372 
    367373                var classes = atag.className.split(" "); 
    368374                var ssID = classes[1].substr(5); 
    369                  
     375 
    370376                var valueField = getObjectFromID(ssID); 
    371377                var searchDisplay = getObjectFromID("ds-"+ssID); 
    372                                  
     378 
    373379                valueField.value = atag.id.substr(3); 
    374                  
     380 
    375381                for(var i=0; i< atag.childNodes.length; i++) 
    376382                        if(atag.childNodes[i].className) 
    377383                                if(atag.childNodes[i].className == "SBMain") 
    378384                                        searchDisplay.value = htmlDecode(atag.childNodes[i].innerHTML); 
    379                                  
     385 
    380386                smartSearch.committedDisplayValue[ssID] = searchDisplay.value; 
    381387                smartSearch.displayValue[ssID] = searchDisplay.value; 
     
    383389                //remove the box 
    384390                searchDisplay.parentNode.removeChild(smartSearch.searchBox[ssID]); 
    385                  
     391 
    386392                smartSearch.searchBox[ssID] = null; 
    387                  
     393 
    388394                //lastly, if the value field has an onchange we need to trgger it 
    389395                //First we check for legacy on changes 
     
    398404 
    399405        moveSearchHighlight: function(ssID, direction){ 
    400                  
     406 
    401407                var sbResults = getObjectFromID("SBResults-" + ssID); 
    402408                var currentItem = 0 
    403409                var classes, newClassName 
    404                  
     410 
    405411                if(direction=="down") 
    406412                        direction = 1; 
    407413                else 
    408414                        direction =-1; 
    409                  
     415 
    410416                for(var i=0; i < sbResults.childNodes.length; i++){ 
    411                          
     417 
    412418                        if(sbResults.childNodes[i].className){ 
    413419                                if(sbResults.childNodes[i].className.indexOf("SBSelected") !== -1){ 
     
    425431                                }//endif - SBSELECTED 
    426432                        }//endif - clasname 
    427                                                          
     433 
    428434                }//endfor 
    429435 
    430436                var newItem = currentItem + direction 
    431                  
     437 
    432438                while(newItem >= 0 && newItem < sbResults.childNodes.length){ 
    433                          
     439 
    434440                        if(sbResults.childNodes[newItem].className){ 
    435                                  
     441 
    436442                                sbResults.childNodes[newItem].className += " SBSelected SBSel-"+ssID; 
    437443                                newItem = -1000; 
    438                                  
    439                         }else  
     444 
     445                        }else 
    440446                                newItem += direction 
    441                                  
     447 
    442448                }//endwhile 
    443                  
     449 
    444450        }, //endif 
    445451 
    446452 
    447453        getMoreResults: function(e){ 
    448                  
     454 
    449455                var button = e.src(); 
    450456                var ssID = button.id.substr(13); 
     
    452458                window.clearTimeout(smartSearch.blurIdent[ssID]); 
    453459                smartSearch.blurIdent[ssID] = false; 
    454                                  
     460 
    455461                var thediv = button.parentNode; 
    456                  
     462 
    457463                thediv.parentNode.removeChild(thediv); 
    458                  
     464 
    459465                var sbResults = getObjectFromID("SBResults-" + ssID); 
    460466                sbResults.style.height = "330px"; 
    461                  
    462                 var offset = button.name  
     467 
     468                var offset = button.name 
    463469                button.id = "invalid-removed"; 
    464                  
    465                 smartSearch.lookup(ssID, offset);        
    466                  
     470 
     471                smartSearch.lookup(ssID, offset); 
     472 
    467473                var searchDisplay = getObjectFromID("ds-" + ssID); 
    468474                searchDisplay.focus(); 
    469                  
     475 
    470476        }//end method 
    471          
     477 
    472478}//end struct 
    473479 
     
    475481/* ------------------------------------------------------- */ 
    476482connect(window,"onload",function() { 
    477                  
     483 
    478484        //grab all smart search boxes 
    479485        var smartSearches = getElementsByClassName("inputSmartSearch"); 
     
    486492 
    487493                var ssID = smartSearches[i].id.substr(3); 
    488                  
     494 
    489495                smartSearch.displayValue[ssID] = smartSearches[i].value; 
    490496                smartSearch.committedDisplayValue[ssID] = smartSearches[i].value; 
    491497 
    492498        }//endfor smartSearches 
    493          
    494                                                                   
     499 
     500 
    495501}) 
phpBMS vulnerability assesment provided by Orvant Inc. Copyright © 2010 Kreotek, LLC. All Rights reserved.