datasource-caching-source.mustache revision 72378c4b11f0468874fbad14749246d2ae564474
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrews<form id="demo" action="http://search.yahoo.com/search">
5ae0e2c8b72fa44237edeb37d1945b1c3535ca39Automatic Updater <h6>Look up github repositories by username (e.g., davglass, lsmith or rgrove):</h6>
5ae0e2c8b72fa44237edeb37d1945b1c3535ca39Automatic Updater <input type="input" id="demo_input_query" name="p">
59dd3b3cd954239d98ef52cd26328856cb6f2975Automatic Updater <input type="submit" id="demo_query_retrieve" value="Retrieve data">
59dd3b3cd954239d98ef52cd26328856cb6f2975Automatic Updater <input type="button" id="demo_cache_clear" value="Clear cache">
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater <div id="demo_output_response" class="output"></div>
59dd3b3cd954239d98ef52cd26328856cb6f2975Automatic Updater</form>
a3b428812703d22a605a9f882e71ed65f0ffdc65Mark Andrews
bb93c8542756719b53096b9939e4041d0966026fAutomatic Updater<script type="text/javascript">
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic UpdaterYUI().use("json-stringify","node", "datasource-get", "datasource-jsonschema", "datasource-cache", "datatype-date", function (Y) {
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington var output = Y.one("#demo_output_response"),
ac4e70ff8955669341f435bc0a734a17c01af124Mark Andrews source = "remote source",
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington myDataSource = new Y.DataSource.Get({
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater source:"https://api.github.com/users/",
5c0fc20d6e59216d9a142409e5fdb498153aeaa5Automatic Updater generateRequestCallback: function (guid) {
56874aef380a64a2c183b7c282c3e7a361d67fa1Automatic Updater return '/repos?callback=YUI.Env.DataSource.callbacks.' + guid;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
56874aef380a64a2c183b7c282c3e7a361d67fa1Automatic Updater }),
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews callback = {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews success: function(e){
04eba969cb9a54bbda2896db2067c07b2ac5ba16Automatic Updater var when = Y.DataType.Date.format(new Date(), {format:"%F %r"}),
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews data = Y.JSON.stringify(e.response, null, 2);
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews output.setContent(
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews "<p>[" + when + "] Retrieved from " +
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews "<strong>" + source + "</strong></p>" +
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson "<pre>" +
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews data.replace(/&/g,"&amp;")
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews .replace(/</g,"&lt;")
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson .replace(/>/g,"&gt;") +
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews "</pre>");
9e3a7b0faf417a10f5f689edf288807b2d5eedc5Brian Wellington },
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater failure: function(e){
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews var when = Y.DataType.Date.format(new Date(), {format:"%F %r"}),
fc3576328379e813ccf6b3a6e66d9bb701a79c83Automatic Updater message = /fields retrieval/.test(e.error.message) ?
298c514fff250c1a147176cfbbc1c0ca441d1ea5Automatic Updater "User not found" : e.error.message;
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
bbb069be941f649228760edcc241122933c066d2Automatic Updater output.setContent(
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews "<p>[" + when + "] Could not retrieve data: " +
3098364bcdd7a719fbafa5fc8d2cc9e90e5a5989Automatic Updater "<em>" + message + "</em>" +
9d330c054e02f52cefd8dc0e71550b0fe07e077eAutomatic Updater "</p>");
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews }
ca904804e43f663f08eb1ac9d6d617930b9a3cd3Automatic Updater };
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews
3a6600c8d319275d73c36eb625f77103cd83e824Automatic Updater myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews schema: {
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews resultListLocator: "data",
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews resultFields: ["name"]
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson }
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews });
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews myDataSource.plug(Y.Plugin.DataSourceCache, { max: 3 });
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews myDataSource.cache.on("retrieve", function(){
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson source = "cache";
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews });
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson Y.one("#demo_cache_clear").on("click", function(){
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews var when = Y.DataType.Date.format(new Date(), {format:"%F %r"});
d145b64cacc8d9cda51f9924ec70cd4661c3e2cfAutomatic Updater
bb93c8542756719b53096b9939e4041d0966026fAutomatic Updater myDataSource.cache.flush();
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont output.setContent("<p>[" + when + "] Cache cleared.</p>");
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont });
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont
2a31bd531072824ef252c18303859d6af7451b00Francis Dupont Y.on("submit", function(e){
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews e.halt();
6f046a065e5543f8cd7e2f24991c65d2372f4c8dMark Andrews var query = encodeURIComponent(
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews Y.one("#demo_input_query")
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews .get("value")
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews .replace(/"/g,'\\"')
4d0520004a9663324a6a30f2d1716565e6d0024cAutomatic Updater .replace(/\W/g, ''));
4b2cb1422c7c600fbc13b1cb06a8b4693bc11af8Mark Andrews
c651f15b30f1dae5cc2f00878fb5da5b3a35a468Mark Andrews if(query) {
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater source = "remote source";
ce9cad6bb04869c5e94d9dc721032b25117f9210Automatic Updater myDataSource.sendRequest({
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews request:query,
efb0e886f18894a1d2489f1ad74ad14b579e11c7Mark Andrews callback:callback
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews });
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson } else {
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews output.setContent("<p>Please enter a query.</p>");
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews }
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson }, "#demo");
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews});
91216cff91b34c9ff6e846dc23f248219cafe660Andreas Gustafsson</script>
aa1d397c4736cd86540555193d71e55fa3b37b2aMark Andrews