var APP = { refreshStep: 0, preUrl: '/html/', _storage: { lastupdated: null, feeds: {} }, feeds: ['paleo','lifestyle'], lastUpdated: null, init: function() { $('#refresh').on('click', $.proxy(this.refresh, this)); console.log('app starting...'); this.doLoad(); this.getLastUpdateDate(); console.log('Last updated: ' + this.lastUpdated); }, getLastUpdateDate: function() { var formatted, dt; // this.lastUpdated = localStorage.getItem('lastUpdated') || null; if (this.lastUpdated == null) $('#lastupdate').empty().append('Never'); else { dt = new Date(this.lastUpdated); formatted = moment(dt).startOf('minute').fromNow(); console.log(formatted); $('#lastupdate').empty().append(formatted); } }, refresh: function() { this.refreshStep = 0; console.log('refresh'); console.log(this); console.log('get ' + this.feeds[this.refreshStep]); $('#lastupdate').empty().append('Refreshing...'); this.doRefresh(); }, doRefresh: function() { var self = this; if (this.refreshStep < this.feeds.length) { var feedUrl = this.preUrl + this.feeds[this.refreshStep] + '.json'; $('#lastupdate').empty().append('Refreshing: ' + this.feeds[this.refreshStep]); $.getJSON(feedUrl, function(data) { console.log(self); self.doUpdate(data); }); } else { console.log('Done'); this.doSave(); } }, doUpdate: function(data) { console.log(this); console.log(data); this._storage.feeds[this.feeds[this.refreshStep]] = data; console.log(this._storage); this.refreshStep++; this.doRefresh(); }, doSave: function() { console.log('Saving...'); this.lastUpdated = new Date(); this._storage.lastupdated = this.lastUpdated; localStorage.setItem('lastUpdated',this.lastUpdated); localStorage.setItem('_storage',JSON.stringify(this._storage)); this.getLastUpdateDate(); }, doLoad: function() { $('#lastupdate').empty().append('Loading...'); this._storage = JSON.parse(localStorage.getItem('_storage')); this.lastUpdated = this._storage.lastupdated; this.showList(); }, showList: function() { var output,d={},list = []; for(var key in this._storage.feeds) { console.log(key); list.push({name:key}); } d.list = list; var output = new EJS({url: 'ejs/list.ejs'}).render(d); $('#list').empty().append(output); for(var key in this._storage.feeds) { $('#' + key).on('click', $.proxy(this.showFeed, this, key)); } }, showFeed: function(opt) { var output, d; console.log('show feed ' + opt); $('#feedcontent').empty(); d = {d:this._storage.feeds[opt]}; var output = new EJS({url: 'ejs/test.ejs'}).render(d); $('#feedcontent').append(output); } }; Zepto(function($) { console.log('Start app'); if (typeof(Storage) !== "undefined") { APP.init(); } else { // Sorry! No Web Storage support.. alert('No local storage'); } });