datasource-offlinecache.mustache revision 72378c4b11f0468874fbad14749246d2ae564474
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen<style scoped>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen#demo .output {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen margin-bottom:1em;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen padding:10px;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen border:1px solid #D9D9D9;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen}
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen#demo .output pre {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen font-size: 11px;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen}
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen#demo .output strong {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen padding: .25em .4em;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen background: #333;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen color: #fff;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen text-shadow: -1px -1px 1px #000;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen border-radius: 5px;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen}
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen</style>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen<div class="intro">
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen <p>The DataSourceCache plugin enables caching on any DataSource to reduce high-latency calls to remote sources and to reduce server load. The plugin can point to `Y.OfflineCache` to allow cached data to persist across browser sessions in browsers that support <a href="http://dev.w3.org/html5/webstorage/" title="Web Storage">HTML5 localStorage</a>.</p>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen</div>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen<div class="example">
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen {{>datasource-offlinecache-source}}
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen</div>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen<p>Use the `plug()` method to initialize the DataSourceCache plugin
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainenand point the configuration value `cache` to Y.CacheOffline to enable
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainenoffline caching. The configuration value `expires` can be set to
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainenchange how soon the data expires.</p>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen```
16c89b1260c9d07c01c83a9219424d3727069b2eTimo SirainenYUI().use("datasource", "dataschema", "cache", function(Y) {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen var callback = {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen success: function (e) { /* output to screen */ },
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen failure: function (e) { /* output to screen */ }
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen },
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource = new Y.DataSource.Get({
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen source: "https://api.github.com/users/",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // this is only needed because the query appends the url
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // rather than the url's query params
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen generateRequestCallback: function (guid) {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen return '/repos?callback=YUI.Env.DataSource.callbacks.' + guid;
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen }
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen }),
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen schema: {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen resultListLocator: "data",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen resultFields: ["name"]
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen }
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // Enable offline data caching by pointing to Y.CacheOffline.
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // For demonstration purposes, data is set to expire after 10 seconds
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.plug(Y.Plugin.DataSourceCache, {
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen cache: Y.CacheOffline,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen expires: 10000,
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen max: 5
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // Retrieves from server. Adds to cache
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.sendRequest({
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen request : "lsmith",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen callback: callback
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // Retrieves from server. Adds to cache
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.sendRequest({
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen request : "davglass",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen callback: callback
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // Retrieves from cache if requested within 5 seconds
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.sendRequest({
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen request : "lsmith",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen callback: callback
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // ... wait 10 seconds ...
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen // Cached data has expired. Retrieves from server. Adds to cache.
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen myDataSource.sendRequest({
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen request : "davglass",
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen callback: callback
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen });
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen});
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen```
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen<h3 id="fullsource">Full Example Source Listing</h3>
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen```
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen {{>datasource-offlinecache-source}}
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen```
16c89b1260c9d07c01c83a9219424d3727069b2eTimo Sirainen