[Phpcms-plugins-cvs] livesearch4phpCMS livesearch.php,NONE,1.1 livesearch.js,NONE,1.1 .cvsignore,NON
Brought to you by:
mjahn
From: Martin J. <mj...@us...> - 2004-12-08 17:52:35
|
Update of /cvsroot/phpcms-plugins/livesearch4phpCMS In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv7446 Added Files: livesearch.php livesearch.js .cvsignore Log Message: initial import --- NEW FILE: .cvsignore --- .project js* live-request.zip project.index --- NEW FILE: livesearch.php --- <?php $searchdir = $_SERVER ['DOCUMENT_ROOT'].'/cms/data/suche/'; $searchterm = $_GET ['q']; $maxlength = 15; if (file_exists ($searchdir.'words.gz')) { $searchfield = gzfile ($searchdir.'words.gz'); } elseif (file_exists ($searchdir.'words.db')) { $searchfield = file ($searchdir.'words.db'); } else { return ''; } if (file_exists ($searchdir.'files.gz')) { $filesfield = gzfile ($searchdir.'files.gz'); } elseif (file_exists ($searchdir.'files.db')) { $filesfield = file ($searchdir.'files.db'); } else { return ''; } if (file_exists ($searchdir.'data.gz')) { $datafield = gzfile ($searchdir.'data.gz'); } elseif (file_exists ($searchdir.'data.db')) { $datafield = file ($searchdir.'data.db'); } else { return ''; } if (!is_array ($searchfield)) { return ''; } $foundfiles = array (); $foundwords = array (); for ($i = 0; $i < count ($searchfield); $i++) { if (!stristr ($searchfield [$i], $searchterm)) { continue; } $foundwords [] = trim ($searchfield [$i]); $fileids = explode ('+', $datafield [$i]); for ($j = 0; $j < count ($fileids); $j++) { list ($id, $value) = explode ('*', $fileids [$j]); if (!isset ($foundfiles [$id])) { $foundfiles [$id] = 0; } $foundfiles [$id] += $value; } } $foundfiles = array_unique ($foundfiles); arsort ($foundfiles); echo '<ul>'."\n"; echo '<h3>Gefundene Seiten</h3>'."\n"; foreach ($foundfiles as $id=>$value) { list ($link, $title, $text) = explode (';', $filesfield [$id], 3); $link = str_replace ('##', ';', $link); $text = str_replace ('##', ';', $text); $title = str_replace (array ('##', ' — kreischa.info'), array (';', ''), $title); if (strlen ($title) > $maxlength) { $title_short = substr ($title, 0, 15).'…'; } else { $title_short = $title; } echo '<li><a href="'.$link.'" title="'.$text.'">'.$title_short.'</a></li>'."\n"; } echo '</ul>'; sort ($foundwords); echo '<ul class="LSRes">'."\n"; echo '<h3>Gefundene Wörter</h3>'."\n"; for ($i = 0; $i < count ($foundwords); $i++) { echo '<li class="LSRow"><a href="#" onclick="document.getElementById (\'livesearch\').value = \''.$foundwords [$i].'\';return false;">'.$foundwords [$i].'</a></li>'."\n"; } echo '</ul>'."\n"; ?> --- NEW FILE: livesearch.js --- /* // +----------------------------------------------------------------------+ // | Copyright (c) 2004 Bitflux GmbH | // +----------------------------------------------------------------------+ // | Licensed under the Apache License, Version 2.0 (the "License"); | // | you may not use this file except in compliance with the License. | // | You may obtain a copy of the License at | // | http://www.apache.org/licenses/LICENSE-2.0 | // | Unless required by applicable law or agreed to in writing, software | // | distributed under the License is distributed on an "AS IS" BASIS, | // | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | // | implied. See the License for the specific language governing | // | permissions and limitations under the License. | // +----------------------------------------------------------------------+ // | Author: Bitflux GmbH <de...@bi...> | // +----------------------------------------------------------------------+ */ var liveSearchReq = false; var t = null; var liveSearchLast = ""; var isIE = false; // on !IE we only have to initialize it once if (window.XMLHttpRequest) { liveSearchReq = new XMLHttpRequest(); } function liveSearchInit() { if (navigator.userAgent.indexOf("Safari") > 0) { document.getElementById('livesearch').addEventListener("keydown",liveSearchKeyPress,false); // document.getElementById('livesearch').addEventListener("blur",liveSearchHide,false); } else if (navigator.product == "Gecko") { document.getElementById('livesearch').addEventListener("keypress",liveSearchKeyPress,false); document.getElementById('livesearch').addEventListener("blur",liveSearchHideDelayed,false); } else { document.getElementById('livesearch').attachEvent('onkeydown',liveSearchKeyPress); // document.getElementById('livesearch').attachEvent("onblur",liveSearchHide,false); isIE = true; } document.getElementById('livesearch').setAttribute("autocomplete","off"); } function liveSearchHideDelayed() { window.setTimeout("liveSearchHide()",400); } function liveSearchHide() { document.getElementById("LSResult").style.display = "none"; var highlight = document.getElementById("LSHighlight"); if (highlight) { highlight.removeAttribute("id"); } } function liveSearchKeyPress(event) { if (event.keyCode == 40 ) //KEY DOWN { highlight = document.getElementById("LSHighlight"); if (!highlight) { highlight = document.getElementById("LSShadow").firstChild.firstChild; } else { highlight.removeAttribute("id"); highlight = highlight.nextSibling; } if (highlight) { highlight.setAttribute("id","LSHighlight"); } if (!isIE) { event.preventDefault(); } } //KEY UP else if (event.keyCode == 38 ) { highlight = document.getElementById("LSHighlight"); if (!highlight) { highlight = document.getElementById("LSResult").firstChild.firstChild.lastChild; } else { highlight.removeAttribute("id"); highlight = highlight.previousSibling; } if (highlight) { highlight.setAttribute("id","LSHighlight"); } if (!isIE) { event.preventDefault(); } } //ESC else if (event.keyCode == 27) { highlight = document.getElementById("LSHighlight"); if (highlight) { highlight.removeAttribute("id"); } document.getElementById("LSResult").style.display = "none"; } } function liveSearchStart() { if (t) { window.clearTimeout(t); } t = window.setTimeout("liveSearchDoSearch()",200); } function liveSearchDoSearch() { if (typeof liveSearchRoot == "undefined") { liveSearchRoot = ""; } if (typeof liveSearchRootSubDir == "undefined") { liveSearchRootSubDir = ""; } if (typeof liveSearchParams == "undefined") { liveSearchParams = ""; } if (liveSearchLast != document.forms.searchform.query.value) { if (liveSearchReq && liveSearchReq.readyState < 4) { liveSearchReq.abort(); } if ( document.forms.searchform.query.value == "") { liveSearchHide(); return false; } if (window.XMLHttpRequest) { // branch for IE/Windows ActiveX version } else if (window.ActiveXObject) { liveSearchReq = new ActiveXObject("Microsoft.XMLHTTP"); } liveSearchReq.onreadystatechange= liveSearchProcessReqChange; liveSearchReq.open("GET", liveSearchRoot + "/cms/plugins/livesearch4phpcms/livesearch.php?q=" + document.searchform.query.value + liveSearchParams); liveSearchLast = document.forms.searchform.query.value; liveSearchReq.send(null); } } function liveSearchProcessReqChange() { if (liveSearchReq.readyState == 4) { var res = document.getElementById("LSResult"); res.style.display = "block"; var sh = document.getElementById("LSShadow"); sh.innerHTML = liveSearchReq.responseText; } } function liveSearchSubmit() { var highlight = document.getElementById("LSHighlight"); if (highlight && highlight.firstChild) { window.location = liveSearchRoot + liveSearchRootSubDir + highlight.firstChild.nextSibling.getAttribute("href"); return false; } else { return true; } } |