@openui5/sap.ui.core
Version:
OpenUI5 Core Library sap.ui.core
106 lines (92 loc) • 3.34 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2009-2021 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
// Provides control sap.ui.core.search.OpenSearchProvider.
sap.ui.define([
'./SearchProvider',
"sap/base/Log",
"sap/base/security/encodeURL",
"sap/ui/thirdparty/jquery",
'sap/ui/core/library' // ensure that required DataTypes are available
],
function(SearchProvider, Log, encodeURL, jQuery) {
"use strict";
/**
* Constructor for a new search/OpenSearchProvider.
*
* @param {string} [sId] id for the new control, generated automatically if no id is given
* @param {object} [mSettings] initial settings for the new control
*
* @class
* A SearchProvider which uses the OpenSearch protocol (either JSON or XML).
* @extends sap.ui.core.search.SearchProvider
* @version 1.87.1
*
* @public
* @alias sap.ui.core.search.OpenSearchProvider
* @ui5-metamodel This control/element also will be described in the UI5 (legacy) designtime metamodel
*/
var OpenSearchProvider = SearchProvider.extend("sap.ui.core.search.OpenSearchProvider", /** @lends sap.ui.core.search.OpenSearchProvider.prototype */ { metadata : {
library : "sap.ui.core",
properties : {
/**
* The URL for suggestions of the search provider. As placeholder for the concrete search queries '{searchTerms}' must be used. For cross domain requests maybe a proxy must be used.
*/
suggestUrl : {type : "sap.ui.core.URI", group : "Misc", defaultValue : null},
/**
* The type of data which is provided by the given suggestUrl: either 'json' or 'xml'.
*/
suggestType : {type : "string", group : "Misc", defaultValue : 'json'}
}
}});
/**
* Call this function to get suggest values from the search provider.
* The given callback function is called with the suggest value (type 'string', 1st parameter)
* and an array of the suggestions (type '[string]', 2nd parameter).
*
* @param {string} sValue The value for which suggestions are requested.
* @param {function} fCallback The callback function which is called when the suggestions are available.
* @type void
* @public
*/
OpenSearchProvider.prototype.suggest = function(sValue, fCallback) {
var sUrl = this.getSuggestUrl();
if (!sUrl) {
return;
}
sUrl = sUrl.replace("{searchTerms}", encodeURL(sValue));
var sType = this.getSuggestType();
var fSuccess;
if (sType && sType.toLowerCase() === "xml") {
//Docu: http://msdn.microsoft.com/en-us/library/cc891508%28v=vs.85%29.aspx
sType = "xml";
fSuccess = function(data){
var jXMLDocument = jQuery(data);
var jItems = jXMLDocument.find("Text");
var aSuggestions = [];
jItems.each(function(){
aSuggestions.push(jQuery(this).text());
});
fCallback(sValue, aSuggestions);
};
} else {
//Docu: http://www.opensearch.org/Specifications/OpenSearch/Extensions/Suggestions/1.1#Response_format
sType = "json";
fSuccess = function(data){
fCallback(sValue, data[1]);
};
}
jQuery.ajax({
url: sUrl,
dataType: sType,
success: fSuccess,
error: function(XMLHttpRequest, textStatus, errorThrown) {
Log.fatal("The following problem occurred: " + textStatus, XMLHttpRequest.responseText + ","
+ XMLHttpRequest.status);
}
});
};
return OpenSearchProvider;
});