📄 autocomplete.js
字号:
YAHOO.widget.DataSource.prototype.queryMatchContains = false;YAHOO.widget.DataSource.prototype.queryMatchSubset = false;YAHOO.widget.DataSource.prototype.queryMatchCase = false;YAHOO.widget.DataSource.prototype.getName = function () {return this._sName;};YAHOO.widget.DataSource.prototype.toString = function () {return "DataSource " + this._sName;};YAHOO.widget.DataSource.prototype.getResults = function (oCallbackFn, sQuery, oParent) {var aResults = this._doQueryCache(oCallbackFn, sQuery, oParent);if (aResults.length === 0) {this.queryEvent.fire(this, oParent, sQuery);this.doQuery(oCallbackFn, sQuery, oParent);}};YAHOO.widget.DataSource.prototype.doQuery = function (oCallbackFn, sQuery, oParent) {};YAHOO.widget.DataSource.prototype.flushCache = function () {if (this._aCache) {this._aCache = [];}if (this._aCacheHelper) {this._aCacheHelper = [];}this.cacheFlushEvent.fire(this);};YAHOO.widget.DataSource.prototype.queryEvent = null;YAHOO.widget.DataSource.prototype.cacheQueryEvent = null;YAHOO.widget.DataSource.prototype.getResultsEvent = null;YAHOO.widget.DataSource.prototype.getCachedResultsEvent = null;YAHOO.widget.DataSource.prototype.dataErrorEvent = null;YAHOO.widget.DataSource.prototype.cacheFlushEvent = null;YAHOO.widget.DataSource._nIndex = 0;YAHOO.widget.DataSource.prototype._sName = null;YAHOO.widget.DataSource.prototype._aCache = null;YAHOO.widget.DataSource.prototype._init = function () {var maxCacheEntries = this.maxCacheEntries;if (isNaN(maxCacheEntries) || (maxCacheEntries < 0)) {maxCacheEntries = 0;}if (maxCacheEntries > 0 && !this._aCache) {this._aCache = [];}this._sName = "instance" + YAHOO.widget.DataSource._nIndex;YAHOO.widget.DataSource._nIndex++;this.queryEvent = new YAHOO.util.CustomEvent("query", this);this.cacheQueryEvent = new YAHOO.util.CustomEvent("cacheQuery", this);this.getResultsEvent = new YAHOO.util.CustomEvent("getResults", this);this.getCachedResultsEvent = new YAHOO.util.CustomEvent("getCachedResults", this);this.dataErrorEvent = new YAHOO.util.CustomEvent("dataError", this);this.cacheFlushEvent = new YAHOO.util.CustomEvent("cacheFlush", this);};YAHOO.widget.DataSource.prototype._addCacheElem = function (resultObj) {var aCache = this._aCache;if (!aCache || !resultObj || !resultObj.query || !resultObj.results) {return;}if (aCache.length >= this.maxCacheEntries) {aCache.shift();}aCache.push(resultObj);};YAHOO.widget.DataSource.prototype._doQueryCache = function (oCallbackFn, sQuery, oParent) {var aResults = [];var bMatchFound = false;var aCache = this._aCache;var nCacheLength = (aCache) ? aCache.length : 0;var bMatchContains = this.queryMatchContains;if ((this.maxCacheEntries > 0) && aCache && (nCacheLength > 0)) {this.cacheQueryEvent.fire(this, oParent, sQuery);if (!this.queryMatchCase) {var sOrigQuery = sQuery;sQuery = sQuery.toLowerCase();}for (var i = nCacheLength - 1; i >= 0; i--) {var resultObj = aCache[i];var aAllResultItems = resultObj.results;var matchKey = (!this.queryMatchCase) ? encodeURIComponent(resultObj.query.toLowerCase()) : encodeURIComponent(resultObj.query);if (matchKey == sQuery) {bMatchFound = true;aResults = aAllResultItems;if (i != nCacheLength - 1) {aCache.splice(i, 1);this._addCacheElem(resultObj);}break;} else {if (this.queryMatchSubset) {for (var j = sQuery.length - 1; j >= 0; j--) {var subQuery = sQuery.substr(0, j);if (matchKey == subQuery) {bMatchFound = true;for (var k = aAllResultItems.length - 1; k >= 0; k--) {var aRecord = aAllResultItems[k];var sKeyIndex = (this.queryMatchCase) ? encodeURIComponent(aRecord[0]).indexOf(sQuery) : encodeURIComponent(aRecord[0]).toLowerCase().indexOf(sQuery);if ((!bMatchContains && (sKeyIndex === 0)) || (bMatchContains && (sKeyIndex > -1))) {aResults.unshift(aRecord);}}resultObj = {};resultObj.query = sQuery;resultObj.results = aResults;this._addCacheElem(resultObj);break;}}if (bMatchFound) {break;}}}}if (bMatchFound) {this.getCachedResultsEvent.fire(this, oParent, sOrigQuery, aResults);oCallbackFn(sOrigQuery, aResults, oParent);}}return aResults;};YAHOO.widget.DS_XHR = function (sScriptURI, aSchema, oConfigs) {if (typeof oConfigs == "object") {for (var sConfig in oConfigs) {this[sConfig] = oConfigs[sConfig];}}if (!aSchema || (aSchema.constructor != Array)) {return;} else {this.schema = aSchema;}this.scriptURI = sScriptURI;this._init();};YAHOO.widget.DS_XHR.prototype = new YAHOO.widget.DataSource();YAHOO.widget.DS_XHR.prototype.TYPE_JSON = 0;YAHOO.widget.DS_XHR.prototype.TYPE_XML = 1;YAHOO.widget.DS_XHR.prototype.TYPE_FLAT = 2;YAHOO.widget.DS_XHR.prototype.ERROR_DATAXHR = "XHR response failed";YAHOO.widget.DS_XHR.prototype.connTimeout = 0;YAHOO.widget.DS_XHR.prototype.scriptURI = null;YAHOO.widget.DS_XHR.prototype.scriptQueryParam = "query";YAHOO.widget.DS_XHR.prototype.scriptQueryAppend = "";YAHOO.widget.DS_XHR.prototype.responseType = YAHOO.widget.DS_XHR.prototype.TYPE_JSON;YAHOO.widget.DS_XHR.prototype.responseStripAfter = "\n<!--";YAHOO.widget.DS_XHR.prototype.doQuery = function (oCallbackFn, sQuery, oParent) {var isXML = (this.responseType == this.TYPE_XML);var sUri = this.scriptURI + "?" + this.scriptQueryParam + "=" + sQuery;if (this.scriptQueryAppend.length > 0) {sUri += "&" + this.scriptQueryAppend;}var oResponse = null;var oSelf = this;var responseSuccess = function (oResp) {if (!oSelf._oConn || (oResp.tId != oSelf._oConn.tId)) {oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, oSelf.ERROR_DATANULL);return;}for (var foo in oResp) {}if (!isXML) {oResp = oResp.responseText;} else {oResp = oResp.responseXML;}if (oResp === null) {oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, oSelf.ERROR_DATANULL);return;}var aResults = oSelf.parseResponse(sQuery, oResp, oParent);var resultObj = {};resultObj.query = decodeURIComponent(sQuery);resultObj.results = aResults;if (aResults === null) {oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, oSelf.ERROR_DATAPARSE);return;} else {oSelf.getResultsEvent.fire(oSelf, oParent, sQuery, aResults);oSelf._addCacheElem(resultObj);oCallbackFn(sQuery, aResults, oParent);}};var responseFailure = function (oResp) {oSelf.dataErrorEvent.fire(oSelf, oParent, sQuery, oSelf.ERROR_DATAXHR);return;};var oCallback = {success:responseSuccess, failure:responseFailure};if (!isNaN(this.connTimeout) && this.connTimeout > 0) {oCallback.timeout = this.connTimeout;}if (this._oConn) {YAHOO.util.Connect.abort(this._oConn);}oSelf._oConn = YAHOO.util.Connect.asyncRequest("GET", sUri, oCallback, null);};YAHOO.widget.DS_XHR.prototype.parseResponse = function (sQuery, oResponse, oParent) {var aSchema = this.schema;var aResults = [];var bError = false;var nEnd = ((this.responseStripAfter !== "") && (oResponse.indexOf)) ? oResponse.indexOf(this.responseStripAfter) : -1;if (nEnd != -1) {oResponse = oResponse.substring(0, nEnd);}switch (this.responseType) {case this.TYPE_JSON:var jsonList;if (window.JSON && (navigator.userAgent.toLowerCase().indexOf("khtml") == -1)) {var jsonObjParsed = JSON.parse(oResponse);if (!jsonObjParsed) {bError = true;break;} else {jsonList = eval("jsonObjParsed." + aSchema[0]);}} else {try {while (oResponse.substring(0, 1) == " ") {oResponse = oResponse.substring(1, oResponse.length);}if (oResponse.indexOf("{") < 0) {bError = true;break;}if (oResponse.indexOf("{}") === 0) {break;}var jsonObjRaw = eval("(" + oResponse + ")");if (!jsonObjRaw) {bError = true;break;}jsonList = eval("(jsonObjRaw." + aSchema[0] + ")");}catch (e) {bError = true;break;}}if (!jsonList) {bError = true;break;}for (var i = jsonList.length - 1; i >= 0; i--) {var aResultItem = [];var jsonResult = jsonList[i];for (var j = aSchema.length - 1; j >= 1; j--) {var dataFieldValue = jsonResult[aSchema[j]];if (!dataFieldValue) {dataFieldValue = "";}aResultItem.unshift(dataFieldValue);}aResults.unshift(aResultItem);}break;case this.TYPE_XML:var xmlList = oResponse.getElementsByTagName(aSchema[0]);if (!xmlList) {bError = true;break;}for (var k = xmlList.length - 1; k >= 0; k--) {var result = xmlList.item(k);var aFieldSet = [];for (var m = aSchema.length - 1; m >= 1; m--) {var sValue = null;var xmlAttr = result.attributes.getNamedItem(aSchema[m]);if (xmlAttr) {sValue = xmlAttr.value;} else {var xmlNode = result.getElementsByTagName(aSchema[m]);if (xmlNode && xmlNode.item(0) && xmlNode.item(0).firstChild) {sValue = xmlNode.item(0).firstChild.nodeValue;} else {sValue = "";}}aFieldSet.unshift(sValue);}aResults.unshift(aFieldSet);}break;case this.TYPE_FLAT:if (oResponse.length > 0) {var newLength = oResponse.length - aSchema[0].length;if (oResponse.substr(newLength) == aSchema[0]) {oResponse = oResponse.substr(0, newLength);}var aRecords = oResponse.split(aSchema[0]);for (var n = aRecords.length - 1; n >= 0; n--) {aResults[n] = aRecords[n].split(aSchema[1]);}}break;default:break;}sQuery = null;oResponse = null;oParent = null;if (bError) {return null;} else {return aResults;}};YAHOO.widget.DS_XHR.prototype._oConn = null;YAHOO.widget.DS_JSFunction = function (oFunction, oConfigs) {if (typeof oConfigs == "object") {for (var sConfig in oConfigs) {this[sConfig] = oConfigs[sConfig];}}if (!oFunction || (oFunction.constructor != Function)) {return;} else {this.dataFunction = oFunction;this._init();}};YAHOO.widget.DS_JSFunction.prototype = new YAHOO.widget.DataSource();YAHOO.widget.DS_JSFunction.prototype.dataFunction = null;YAHOO.widget.DS_JSFunction.prototype.doQuery = function (oCallbackFn, sQuery, oParent) {var oFunction = this.dataFunction;var aResults = [];aResults = oFunction(sQuery);if (aResults === null) {this.dataErrorEvent.fire(this, oParent, sQuery, this.ERROR_DATANULL);return;}var resultObj = {};resultObj.query = decodeURIComponent(sQuery);resultObj.results = aResults;this._addCacheElem(resultObj);this.getResultsEvent.fire(this, oParent, sQuery, aResults);oCallbackFn(sQuery, aResults, oParent);return;};YAHOO.widget.DS_JSArray = function (aData, oConfigs) {if (typeof oConfigs == "object") {for (var sConfig in oConfigs) {this[sConfig] = oConfigs[sConfig];}}if (!aData || (aData.constructor != Array)) {return;} else {this.data = aData;this._init();}};YAHOO.widget.DS_JSArray.prototype = new YAHOO.widget.DataSource();YAHOO.widget.DS_JSArray.prototype.data = null;YAHOO.widget.DS_JSArray.prototype.doQuery = function (oCallbackFn, sQuery, oParent) {var aData = this.data;var aResults = [];var bMatchFound = false;var bMatchContains = this.queryMatchContains;if (!this.queryMatchCase) {sQuery = sQuery.toLowerCase();}for (var i = aData.length - 1; i >= 0; i--) {var aDataset = [];if (typeof aData[i] == "string") {aDataset[0] = aData[i];} else {aDataset = aData[i];}var sKeyIndex = (this.queryMatchCase) ? encodeURIComponent(aDataset[0]).indexOf(sQuery) : encodeURIComponent(aDataset[0]).toLowerCase().indexOf(sQuery);if ((!bMatchContains && (sKeyIndex === 0)) || (bMatchContains && (sKeyIndex > -1))) {aResults.unshift(aDataset);}}this.getResultsEvent.fire(this, oParent, sQuery, aResults);oCallbackFn(sQuery, aResults, oParent);};});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -