Ajax Framework Rollup

Source: Internet
Author: User
Tags functions header net variables php class php and string ruby on rails
Ajax|ajax Framework


1. Pure http://www.alixixi.com/web/a/JavaScript: Application frameworks



1.1 Bindows (founded in 2003)



Backbase is a complete suite of Windows desktop Web application solutions that are combined with strong technologies such as DHTML, JavaScript, CSS, and HTML. Bindows need not download installation client support components (such as Java, ActiveX or Flash), only one browser. The idea of pure OO is embodied anywhere in Bindows, Bindows is perhaps the most complete and powerful javascript:void (0) that I have ever seen. >ajax Application Platform.
Bindows is a commercial program that uses technology from MB (headquartered in GA USA, the main development center in Sweden, founded in 2002).


The features and features provided by the Bindows framework are:
    • Class and API based on face-object technology
    • A complete Windows desktop system that supports a variety of feature window modes, including menus, forms, tables, sliders, measuring instrument windows, and other Windows window features.
    • is to develop Zero-footprint (0 space occupancy) SOA client application Preferred Toolkit
    • Xml,soap and XML-RPC support for this machine
    • Single-user to enterprise-level development support
    • Built in perfect javascript:void (0); >ajax Support
Bindows Development Environment:
    • Support for enterprise-scale project development
    • Cross-browser, cross-OS platform support
    • Not restricted by server structure
    • Good interoperability with new and existing resources
    • Unified Development Interface





1.2 Backbase (founded in 2003)


Backbaseis a complete browser-side framework that provides rich browser-operation capabilities as well as the right. NET and the Java platform integration.
Commercial products from Backbase B.V (headquartered in Amsterdam, founded in 2003).





1.3 DOJO (in development, founded in September 2004)



Dojo provides complete lightweight window components and browser-Server message mapping support


    • Provides framework support for creating custom JavaScript window components
    • Prefabricated Rich window type library
    • b/S message mapping support--xmlhttprequest and other mechanisms
    • Support for URL manipulation in browsers
    • Open Source License (Academic Free License 2.1), led by JotSpot 's Alex Russell .


1.4 Open Rico (in development; founded in May 2005; Based on an early proprietary framework)



Open Rico is a multipurpose framework that supports AJAX architecture and user interaction.


    • A XMLHttpRequest response can be invoked by one or more Dom objects, or by JavaScript objects.
    • Support for drag and drop operations
    • Support based on javascript:void (0); " >ajax animation modes, such as scaling and transformation
    • Behaviors-based Operations library
    • Use guide , provided by Russmirimar's Yonah
    • Open source. Originated from the Sabre Airlines solution, maintained by Bill Scott, Darren James and others.





1.5 Qooxdoo (in development; Founded in May 2005)


Qooxdoois another fast-growing application framework that provides extensive UI support and is developing features such as infrastructure.
  • Infrastructure Features:
    • can easily capture and manipulate DOM events
    • Support debugging
    • Timer class that supports one time operation
    • Getter/setter Support
  • Ui:
    • Window component libraries and frames
    • Interface Layout Management
    • Image caching and transparent PNG image processing
  • Open Source (LGPL).


1.6 Tibet (in development; Founded in June 2005)



Tibet provides a large number of portable and complete JavaScript APIs that can quickly generate a large number of client-side code, Tibet claiming to be enterprise-class javascript:void (0); >ajax.


    • Remote script call encapsulated in XMLHttpRequest
    • URI Support
    • Supports all HTTP events, no longer just get and post
    • Low-level protocols-file://and WebDAV can also be used as HTTP normal
    • WEB Services invocation support, including SOAP, XML-RPC, and so on
    • Large JavaScript Object Library
    • A wide variety of XML operational support
    • IDE and development tools
    • Open Source Protocol (OSI)


1.7 Ajform (founded in June 2005)



Ajform is a very easy to javascript:void (0); >ajax framework, which is used to write entry-level javascript:void (0); " >ajax code that provides the following features:


    • Three-Step installation
    • Automatically supports arbitrary HTML form elements
    • Javascript:void (0) can be realized almost without coding; >ajax


2 Pure http://www.alixixi.com/web/a/JavaScript: Infrastructural frameworks



2.1 Ajaxcaller (created in May 2005, currently Alpha)


Ajaxcaller is a XMLHttpRequest component with multi-threaded security access, primarily for Ajax developers, and is still in the alpha development phase, only in ajaxpatterns This program is used in the online search paradigm.
  • Data implementation and server interaction with plaintext or XML structures (get/post/put/delete)
  • Support the Xmlhttrequest of the object (Destroy object, C + + support memory object's operation of the structure)
  • Support for response cache (still in plan)
  • Simple library file code is easy for beginners to learn to use, and support script debugging
  • Open Source Protocol


2.2 Flash JavaScript Integration Kit



The flash JavaScript Integration Kit enables the integration of Flash and JavaScript script implementations.


    • You can implement a call to Flash ActionScript script in JavaScript and vice versa.
    • Delivery calls in different environments that support almost the main data types of both parties.
    • Open source Agreement, there are several flash open source enthusiasts maintenance.


2.3 Google Ajaxslt (June 2005 issue)



Google Ajaxslt, a JavaScript framework, is used to perform XSLT transformations and XPath queries.


    • This is currently used on the Google map.
    • Open Source Protocol (BSD)


2.4 Htmlhttprequest (Beta edition; founded in 2005)



Htmlhttprequest 's biggest feature is the use of XMLHttpRequest objects and standard HTML tag iframe to achieve maximum cross viewing across the platform Javascript:void (0); The principle of >ajax support is to invoke XMLHTTP on browsers that support XMLHttpRequest and, if not, to simulate asynchronous interactions with an IFRAME.


    • Browsers currently supported: Ie6/win, Ie5.5/win, Ie5/win, Ie4/win, Mozilla/win, Opera7/win, Safari/mac, Ie5/mac
    • Browsers not tested: Ie4/mac, Mozilla/mac, Opera/other, Konqueror/linux.
    • Open Source Protocol (LGPL)


2.5 Interactive Website Framework (founded in 2005)



Interactive Website Framework positioning supports a wide variety of javascript:void (0) in browsers; >ajax Open Source project for basic application. An interactive web framework that boasts high performance through JavaScript, CSS, XML, and HTML, including a customizable, readable XML parser. In fact, the IWF is a javascript:void (0); The >ajax infrastructure, and includes some common scripting code.


    • Implements thread-safe XMLHttpRequest
    • Encapsulates the XML document to create more readable code:
      var node = doc.groceries.frozen[0].pizza[0].size;
      the encapsulated data reads
      var node = doc.documentElement.firstChild.firstChild.getAttribute ("size");
      The original DOM operation reads
    • Open Source Protocol


2.6 Libxmlhttprequest (released in June 2003)



Libxmlrequest is a small xmlhttprequest package


    • Simplifies xmlhttpreuqest invocation with Getxml () and Postxml () two events
    • Support for XMLHttpRequest object pooling
    • Response Cache Processing
    • Source code can be used, but there is copyright protection.


2.7 Majax



Majax is another very compact HttpRequest package that provides a simple interface for sending and receiving character information and sets the callback interface for each action.



2.8 Rslite (x)



Rslite is a XMLHttpRequest packaged component that is released separately as part of Brent Ashley's JSRs (JavaScript Remote scripting). Details can see the introduction of JSRs



2.9 Sack (in development, founded in May 2005)



Sack is also a very name for a miniature XMLHttpRequest package. The caller can customize the callback function or a DOM object. By using the callback DOM object, you can embed response data back into the DOM directly as text.



2.10 Sarissa (released in February 2003)



Sarissa is a JavaScript API that encapsulates the ability to invoke XML independently at the browser end.


    • Portable XMLHttpRequest Object creation
    • Portable XPath Queries
    • Portable DOM Manipulation
    • Portable XSLT
    • Portable XML Serialization
    • Open Source Protocol (GPL2.0 and LGPL2.1)


2.11 Xhconn (released in April 2005)



Xhconn is also a small XMLHttpRequest packaging library. The author also uses the modified Xhconn, which is characterized by simple calls, and the code is clearly readable.


    • Example:
      new Xhconn (). Connect ("mypage.php", "POST", "Foo=bar&baz=qux", Fnwhendone);
    • Open Source Agreement license


3 Server-side:multi-language



3.1 Cross-platform Asynchronous INterface Toolkit (May 2005)



Cpaint is a real javascript:void (0) that supports both PHP and Asp/vbscript scripts; >ajax and JSRs kits. Cpaint in the background to provide you with the required javascript:void (0); >ajax and JSRs code, and automatically returns to the browser-side corresponding JavaScript scripting code, which is easy to feed back to the requirements of the Web application.


    • Support for PHP and ASP
    • All functional functions are in a unified JavaScript file
    • Support for remote scripts and XML
    • Support for local and remote function calls
    • You can create single or multiple XMLHTTP objects
    • The data returned to the background can be either text or Xml/dom document objects
    • Supports Post and get
    • Implementation of remote function and data access operation with service-side proxy
    • Test usage in most browsers
    • Issued under the GNU, GPL, LGPL Open Source Agreement protection


3.2 SAJAX (March 2005)



SAJAX implementations are unique, such as invoking a JavaScript method, X_calculatebudget (), which will first upload the response to the server and invoke a Java Calculatebudget () method. The value is then returned to X_CALCULATEBUDGET_CB () in JavaScript mode. Sajax's reputation is good, it is estimated that a lot of people have heard or even used, but the disadvantage is that it's this set of mapping theory, far less than some lightweight packaging library easy to use, but sajax the biggest feature is the support of the platform is rich, almost include the web under the Common programming language and platform


    • Easy mapping from JavaScript functions to server-side proxy operations
    • Supports multiple platforms (Asp/coldfusion/io/lua/perl/php/python/ruby)
    • Open Source Protocol


3.3 Javascipt Object notation (JSON) and JSON-RPC



JSON is a "face-free" XML, and json-rpc is a remote interaction protocol, similar to XML-RPC, with strong support for JavaScript


    • support for multi-server platforms : Java, Python, Ruby, Perl.
    • There are different packages and license agreements for different platforms, such as Json-rpc-java.


3.4 JavaScript Remote Scripting (JSRS) (2000)



JSRs, a more classic remote scripting access component, supports the remote data/operation interaction of the client data through the server proxy.


    • Supported browsers: Ie4+,ns4.x,ns6.x,mozilla,opera7 and Galeon.
    • Server-side scripting language support: Asp,coldfusion,perlcgi,php,python and JSP (servlet).
    • Open source Protocol. The support is provided by Brent Ashley .


3.5 bitkraft for asp.net



Bitkraft is a CLR (common language Runtime) based on the (. NET) Web framework that allows you to create and manipulate distributed Web content in a unique way. Written in C #, running under Microsoft's. NET 1.1 and Mono framework, seamless client-server response is its greatest feature. Instead of using XML to organize data, Bitkraft uses JSON instead.


    • Supported browsers: ie5+, firefox1+, NS6
    • Server-side requirements: asp.net, Mono xsp, Cassini, Apache (Modmono). NET Framework 1.1+
    • Event-driven
    • Remote agents that support synchronous and asynchronous
    • The client supports all. NET type or custom class object is mapped into JSON
    • Replacing XML with JSON
    • Free, open source license Agreement


4 Server-side:java



4.1 Weborb for Java (August 2005)



Weborb for Java is a development javascript:void (0); >ajax and the development platform for rich client applications based on Flash. Online Example


    • Weborb includes a rich client development class library. Provides a simple online API to bind or invoke any Java object, XML Web services, and EJB
    • Support for asynchronous or synchronous event-driven
    • You do not need to modify any code on the server, and you do not need to customize methods or properties, variables, and so on. Do not require the design-time designation of agents.
    • Synchronous calls do not require callbacks, and asynchronous calls require a callback method.
    • The client can request the specified activity mode to the server side, and the processing result can be easily turned into state without any programming required.
    • Provides a specific API to handle database query results-server code can return a dataset or DataTable, and the client displays this result with a JavaScript object similar to the recordset. This object provides methods for retrieving column names and row data.
    • Support Data paging technology. The client application can retrieve data from the page.
    • Supports returning all service-side data types as parameters, such as primitives, strings, complex types, arrays, native. NET collections, remote references
    • There are currently two versions: Standard Edition (free), Professional Edition (commercial license)


4.2 Echo 2 (March 2005)



Echo 2 allows you to write Javascript:void (0) in the Pure Java language; >ajax program. Demo.


    • Automatically generate HTML and JavaScript code
    • Passing messages on the client-server side with XML
    • If you are willing to support a custom JavaScript component
    • Open Source Protocol (Mozilla public License or GNU LGPL)


4.3 Direct Web Remoting (DWR) (2005)



Direct Web Remoting can directly invoke the application framework of Java methods in JavaScript code


    • Similar to Sajax, you can transfer request calls in JavaScript to Java methods and return the results to JavaScript
    • Can be used with any web framework, such as struts, tapestry, and so on
    • Open Source (Apache), the product is currently added to the webwork


4.4 Swato (2005)



Swato is a reusable and well integrated Java/javascript library that implements a much easier way to change the interaction of your Web applications through javascript:void (0); >ajax way to achieve.


    • The server-side Java library can be easily deployed to all servlet2.3+-compliant containers
    • Client JavaScript libraries can be used in all browsers that support XMLHttpRequest
    • Use JSON technology to organize POJO data on the server side so that you can access these remote data in any JavaScript environment (HTML, XUL, SVG), which is easily integrated into the current application through hard coding or some mature JavaScript library
    • Provides a simple interface that allows you to invoke remote Pojo data in JavaScript
    • Use <servlet> and <filter> flexibility to configure in Web.xml, and can integrate (not necessarily) into your spring framework
    • Provides several components to help you quickly develop Web applications (such as AutoComplete text boxes, online forms, online listings, and so on)


4.5 javascript:void (0); " >ajax JSP Tag Library



the AJAX JSP The library is a set of JSP tag libraries used to javascript:void (0); >ajax program development. can easily develop javascript:void (0) Under the Java EE without JavaScript. The web Form for >ajax mode. The tag library is a more general javascript:void (0); The >ajax feature provides 5 tags: tag Library


    • AutoComplete: The user enters the character in the text box, automatically matches the character entered by the user from the specified data, similar to the Google suggest
    • Callout: You can add a bubble message to the a tag box, but the real-time server to remove data
    • Select/dropdown: Similar to the linkage menu, such as the Prefectures linkage drop-down box
    • Toggle: Switch brake buttons, such as storing true and falsh in a hidden form field, and displaying the appropriate IMG image
    • Update field: Updates the data, which means no refresh commits.


4.6 javascript:void (0); " >ajax Java Server Faces Framework



the ajax-jsf used to transform any JSF application into javascript:void (0); >ajax Applications



Server-side:lisp



5.1 Cl-ajax



Cl-ajax implements JavaScript to invoke service-side Lisp directly



6 server-side:. NET



6.1 Weborb for. NET (August 2005)



weborb for. NET is a. NET and XML Web Services development javascript:void (0); " >ajax and Flash based rich client applications ( online example )



6.2 Ajax. NET (March 2005)



. NET is the first free library that supports various ways to access server. NET via JavaScript Ajax. Net


    • Like Sajax, JavaScript requests can be sent to the. NET method, service-side back to JavaScript, and even serialization of custom classes.
    • Session and application data can be accessed in JavaScript
    • Cached Query Results
    • Free use of source code
    • No need to change the source code, allow to add and modify methods and properties to Ajax.NET
    • All classes support JavaScript client return data and can use Dataset:res.tables[0 in JavaScript. Rows
    • Accessing and returning data using the HtmlControls component
    • The page does not need to be overloaded with event proxies (data access layer)
    • Because only one call interface method is provided, the server-side CPU takes up very little


6.3 Comfortasp.net (August 2005)



comfortasp.net can let developers in pure. NET under the development of similar javascript:void (0); >ajax (Dhtml,javascript,xmlhttp) attribute application.


    • Quick response
    • Reduce HTML transmission
    • Reduce page overload
    • No blinking browser content changes
    • Javascript:void (0); " >ajax User Experience,


6.4 Ajaxaspects (August 2005)



ajaxaspects is an engine that can use JavaScript to invoke server-side WebService events


    • Server-client communication with standard SOAP and WSDL
    • Supports return values with parameters with simple types and XML objects
    • Caching support
    • Action queues
    • Free use, open source protocol


7 server-side:php



7.1 Ajaxac (April 2005)



Ajaxac encapsulates the full application functionality with a separate class


    • All features are integrated into the self-contained classes (plus some JavaScript libraries)
    • Calling PHP files or HTML pages is easy, simply by creating the app class to pass the class reference to the JavaScript object or HTML element that needs to be invoked.
    • Capturing JavaScript Events
    • Can customize configuration data and support Run-time parameter changes
    • No more messy HTML code in JavaScript code, all events are dynamically appended to the
    • Thanks to the above two advantages, a good template engine is supported
    • Easy to hook to PHP class and MySQL data has been returned to your request
    • It is easy to create a windowed mode application with JavaScript.


7.2 Jpspan



Jpspan calls functions in PHP directly from JavaScript.


    • Conducted rigorous unit testing.
    • Open Source License (PHP)


7.3 Xajax



Xajax The functions in PHP directly via JavaScript


    • Support for invoking PHP scripts with JavaScript
    • Open Source License Agreement


8 Server-side:ruby



8.1 Ruby on Rails



Ruby on Rails is a support javascript:void (0); >ajax's complete Web framework, written in Ruby language, is developed in strict accordance with the MVC architecture.


    • When Ajax appeared, Rails was in the early stages of its development, so Ajax could become the core of the rails framework.
    • Generates a JavaScript script for most/all of the window application components and animations in the browser.
    • Supports server-side calls.
    • Queue support
    • Open Source License
From Moztwwiki
This article is the JavaScript for Mozilla Developer Center: void (0); >ajax:getting started (HTTP://DEVELOPER.MOZILLA.O ...) of translation. The author of the original and the history of the compilation can be seen on its history page (HTTP://DEVELOPER.MOZILLA.O ... action=history).

This article describes JavaScript: void (0); >ajax the basics of related technologies and provide examples for you to use.





Javascript:void (0); " What's >ajax?




Javascript: void (0); >ajax (Asynchronous JavaScript and XML, asynchronous JavaScript, and XML technology) is a new word, but the connotation is two JavaScript features that have existed for some time. These two functions have been neglected in the past, in Gmail, Google suggest and Google Maps after the emergence of the fame world know.

These two JavaScript features are:

* Send a request to the server without reading the page again (request)
* Parse, use XML file




The first step-how to issue XMLHttpRequest




In order to send HTTP requirements to the server with JavaScript, you must first make the entity (instance) in the relevant category (class). Internet Explorer First provides the XMLHTTP category as an ActiveX object, while Mozilla, Safari, and other browsers then support the categories and attributes in this ActiveX object in the XMLHttpRequest category.

So, if you want to cross browser, you can write this:

if (window. XMLHttpRequest) {//Mozilla, Safari, ...
Http_request = new XMLHttpRequest ();
else if (window. ActiveXObject) {//IE
Http_request = new ActiveXObject ("Microsoft.XMLHTTP");
}

(Since this program is for illustration only, it is the simplest way to write it.) In the third step of this article, there is another kind of writing that we use more often. )

Some versions of Mozilla browsers have errors when the server returns data that does not contain an XML Mime-type file header (header). To avoid this problem, you can overwrite the file headers returned by the server in the following ways, so as not to return the text/xml.

Http_request = new XMLHttpRequest ();
Http_request.overridemimetype (' Text/xml ');

The next step is to determine how the server is going to return the data, at which point you can specify a JavaScript function name to process the return value by using the onReadyStateChange attribute, for example:

Http_request.onreadystatechange = nameofthefunction;

Note that the specified function name has no parentheses and no parameters. In addition to specifying a function name, you can also define a new handler using the Javascript instant definition function, as follows:

Http_request.onreadystatechange = function () {
Do something.
};

Once you have decided to process the request, you need to call the open () and send () method in the HTTP request category, as follows:

Http_request.open (' Get ', ' http://www.example.org/some.file ', true);
Http_request.send (NULL);

* The first parameter of the Open () is the HTTP request method, which is chosen from the Get, POST and head, and can be supported on your host. To follow the HTTP standard, remember that these methods are all uppercase, or some browsers (such as Firefox) may not be able to ignore you. A list of other methods that HTTP request can support refer to the http://www.w3.org/Protocol ....
* The second parameter is the destination URL. Based on security considerations, you cannot call a Web page other than the same domain. If the domain is different, the error of "Insufficient permissions, denial of Access" occurs when you call open (). Most of the mistakes that we make are the pages in the DOMAIN.TLD Web site that call Www.domain.tld, just a little bit of difference.
* The third parameter determines whether this request is not synchronized and, if set to TRUE, continues to execute the rest of the program even if the server has not yet returned the data, which is the JavaScript: void (0); The meaning of the first a represented in >ajax.

The parameters of Send () can be anything that you want to pass to the server when you send the request at POST, and the data is listed as a query string, for example:

Name=value&anothername=othervalue&so=on

However, if you want to send data by POST, you must first change the MIME form to the following:

Http_request.setrequestheader (' Content-type ', ' application/x-www-form-urlencoded ');

Otherwise, the server will not be able to ignore the information you pass over.



Step Two – Process the data returned by the server




The function name that handles the return value must be provided when the request is outgoing.

Http_request.onreadystatechange = nameofthefunction;

So let's take a look at what this function should do. First, it must check the current state of the request: if the status value of 4 indicates that the server has returned all the information, it can begin parsing the resulting information.

if (http_request.readystate = = 4) {
All OK, continue to parse
} else {
It's not done yet.
}

ReadyState all possible values are as follows:

* 0 (not yet started)
* 1 (in read)
* 2 (Read)
* 3 (exchange of information)
* 4 (all completed)

(Data Source: MSDN (http://msdn.microsoft.com/...)

Next, check the HTTP status code returned by the server. All status codes are available on the Web site (Http://www.w3.org/Protocol ...). , but we're going to be in the state of OK.

if (Http_request.status = = 200) {
Everything is available
} else {
There seems to be a problem, maybe the server returned 404 (check this page) or 500 (internal error) or something
}

After checking the HTTP status code returned, it is up to you to decide what to do with the returned data. There are two ways to access data:

* http_request.responsetext– This will send back the worth of string
* http_request.responsexml– This will treat the return value as a XmlDocument object, and then use the JavaScript DOM correlation function to process



Step three-everything is ready-simple example




OK, then do a simple HTTP example, demo just the various techniques. This JavaScript will ask the server for an HTML file (test.html) with the words "i ' m a test.", and then list the contents of the file with alert ().


Style= "Cursor:pointer; Text-decoration:underline "
>
Make a request


In this example:

* First user presses "make a request"
* This will call the MakeRequest () function, also passed the parameter value test.html (that is, the name of the HTML file, placed in the same directory)
* The request is then issued and the dominance is handed over to the onreadystatechange-specified alertcontents () function
* Alertcontents () Check that the response is normal and then alert () lists the contents of the test.html

You can then test this example (Http://www.w3clubs.com/moz ..., or refer to the test file (Http://www.w3clubs.com/moz ...).



Step Fourth – Process XML response values




In the previous example, after receiving the HTTP return value we used the contents of the test.html file with the Reponsetext attribute of the object, and then try the method of Responsexml property.

First, we need to make a well-formed XML file so that we can take it later. This file name called Test.xml, the contents are as follows:

<--l version= "1.0"-->

I ' m a test.


In the program, we call the file with a place that only needs to be modified as follows:

...
>
...

Then in Alertcontents (), we have to take alert (http_request.responsetext); Change to this:

var xmldoc = Http_request.responsexml;
var root_node = xmldoc.getelementsbytagname (' root '). Item (0);
alert (root_node.firstChild.data);

This allows us to get the XmlDocument object that Responsexml returns, and then takes the XML file content in a DOM-related way. You can refer to Test.xml's original code (Http://www.w3clubs.com/moz ...). and the Modified test program (Http://www.w3clubs.com/moz ...).

For other DOM-related methods, refer to the Mozilla Dom (http://www.mozilla.org/doc) file. <

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.