var NavView = View.extend({ el: "body", events: { "click #prev": "prev", "click #next": "next", "click #refresh": "refresh", "click #random": "random", }, initialize: function(){ this.id = -1 this.$pip = this.$("#pip img") this.$image = this.$("#luckyimage") $(window).on("keydown", this.keydown.bind(this)) $(document).ajaxError(function(){ this.fetching = false }.bind(this)) window.onpopstate = function(event) { this.display(event.state) }.bind(this) if (window.location.pathname.indexOf("/p/") !== -1) { var id = window.location.pathname.split("/")[2] this.fetch(id) } else { this.latest() } }, keydown: function(e){ if (e.shiftKey || e.metaKey || e.ctrlKey || e.altKey) { return } switch (e.keyCode) { case 37: // left this.prev() break case 39: // right this.next() break case 38: // up this.random() break case 40: // down this.latest() break } }, latest: function(){ if (this.fetching) return this.fetch("latest") this.onLatest = true }, prev: function(){ if (this.fetching) return if (this.id - 1 < 1) { return } this.fetch(this.id-1) }, next: function(){ if (this.fetching) return if (this.onLatest || this.id < 1) { return } this.fetch(this.id+1) }, random: function(){ if (this.fetching) return this.fetch("random") }, fetch: function(id){ this.fetching = true this.onLatest = false $.get("/get/" + id, function(data){ this.fetching = false this.display(data) history.pushState(data, document.title, "/p/" + data.id) }.bind(this)) }, display: function(data){ if (! data || ! data.id) { this.onLatest = true return } this.id = data.id this.$pip.attr("src", data.url) this.$image.css("background-image", "url(" + data.url + ")") }, })