var HubView = ScrollableView.extend({ el: "#hub", template: $("#hub .template").html(), events: { "click .store": "store_link", "click .gallery-left": "gallery_left", "click .gallery-right": "gallery_right", }, initialize: function(){ this.$content = this.$(".content") this.$loader = this.$(".loader") this.scroller = new IScroll('#hub', app.iscroll_optionsx) }, show: function(){ this.deferScrollToTop() app.footer.hide() document.body.className = "hub" }, populate: function(data){ this.data = data this.$loader.hide() this.$content.empty() // id date subtitle body link store image[uri caption] this.data.forEach(function(row){ // console.log(row) var t = this.template.replace(/{{id}}/, row.id) .replace(/{{date}}/, moment(row.date).format("MM.DD.YYYY")) .replace(/{{title}}/, row.title) .replace(/{{subtitle}}/, row.subtitle) .replace(/{{link}}/, row.link) .replace(/{{body}}/, row.body.replace(/\n/g, "
")) var $t = $(t) if (row.store != "true") { $t.find(".store").remove() } this.$content.append($t) if (row.image.length > 1) { // image gallery var $gallery = $(".gallery-" + row.id) row.image.forEach(function(img){ var el = document.createElement("div") el.style.backgroundImage = "url(" + img.uri + ")" el.className = "item" $gallery.append(el) }) new Flickity( ".gallery-" + row.id, { selector: '.item', cellAlign: 'center', autoPlay: false, freeScroll: false, wrapAround: true, imagesLoaded: true, prevNextButtons: false, pageDots: false, contain: true, draggable: true, }) } else { // single image var el = document.createElement("div") el.style.backgroundImage = "url(" + row.image[0].uri + ")" el.className = "item" $(".gallery-" + row.id).append(el) // video, append play button if (row.link.match(/youtube|youtu.be|vimeo/)) { var play = document.createElement("div") play.className = "play" $(".gallery-" + row.id).append(play) } $t.find("gallery-left").remove() $t.find("gallery-right").remove() } }.bind(this)) this.deferScrollToTop() }, store_link: function(){ app.router.go("store") }, gallery_prev: function(e){ $(e.currentTarget).closest("hub_item").flickity('prev') }, gallery_next: function(e){ $(e.currentTarget).closest("hub_item").flickity('next') }, })