`. This configuration is widely when you have list of items that are paginated, sorted or maybe grouped by some attributes and you want to update only these items and nothing more on page.
```html
...
```
**You can use Wiselinks with forms**! As easy and clear as with links. After submit button is clicked, Wiselinks will perform a request to "/" with serialized form attributes. The result of this request will be pasted into `
`.
```html
...
```
### Rendering
The idea of Wiselinks is that you should render only content that you need in current request. Usually you don't need to reload your stylesheets and javascripts on every request.
### Javascript Events
While using Wiselinks you **can rely** on `DOMContentLoaded` or `jQuery.ready()` to trigger your JavaScript code, but Wiselinks gives you some additional useful event to deal with the lifecycle of the page:
**page:loading (url, target, render = 'template')**
Event is triggered before the `XMLHttpRequest` is initialised and performed.
* *url* - URL of the request that will be performed;
* *target* – element of the page where result of the request will be loaded into;
* *render = 'template'* – what should be rendered; can be 'template' or 'partial';
**page:success ($target, status)**
Event is triggered if the request succeeds.
* *$target* – JQuery object that was updated by request;
* *status* – a string describing the status;
**page:error (status, error)**
Event is triggered if the request fails.
* *status* – a string describing the type of error that occurred;
* *error* – optional exception object, if one occurred;
So if you wanted to have a client-side spinner, you could listen for `page:loading` to start it and `page:success` or `page:error` to stop it.
### ActionDispatch::Request extensions
Wiselinks adds a couple of methods to `ActionDispatch::Request`. These methods are mostly syntax sugar and don't have any complex logic, so you can use them or not.
#### #wiselinks? ###
Method returns `true` if current request is initiated by Wiselinks, `false` otherwise.
#### #wiselinks_template? ###
Method returns `true` if current request is initiated by Wiselinks and client want to render template, `false` otherwise.
#### #wiselinks_partial? ###
Method returns `true` if current request is initiated by Wiselinks and client want to render partial, `false` otherwise.
### Assets change detection
You can enable assets change detection with Wiselinks. To do this you have to enable assets digests by adding this to you environment file:
```ruby
config.assets.digest = true
```
Then you should append your layout by adding this to head section:
```erb
<%= wiselinks_meta_tag %>
```
Now Wiselinks will track changes of your assets and if anything will change, your page will be reloaded completely.
### Title handling
Wiselinks handles page titles by passing `X-Title` header with response. To do this you can use `wiselinks_title` helper.
```html
<% wiselinks_title("Wiselinks is awesome") %>
...
```
Of course you can use `wiselinks_title` helper in your own helpers too.
## Example
We crafted example application that uses nearly all features of Wiselinks so you can see it in action.
* GitHub Repository: [https://github.com/igor-alexandrov/wiselinks_example](https://github.com/igor-alexandrov/wiselinks_example)
* Live Example: [http://wiselinks.herokuapp.com/](http://wiselinks.herokuapp.com/)
## Note on Patches / Pull Requests
* Fork the project.
* Make your feature addition or bug fix.
* Add tests for it. This is important so I don't break it in a
future version unintentionally.
* Commit, do not mess with rakefile, version, or history.
(if you want to have your own version, that is fine but
bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches.
## Credits

Wiselinks is maintained by [JetRockets](http://www.jetrockets.ru/en).
Contributors:
* [Igor Alexandrov](http://igor-alexandrov.github.com/)
* [Alexey Solilin](https://github.com/solilin)
* [Julia Egorova](https://github.com/vankiru)
## License
It is free software, and may be redistributed under the terms specified in the LICENSE file.