var ThreadBox = View.extend({ el: "#threads", events: { }, initialize: function(){ this.__super__.initialize.call(this) this.template = this.$(".template").html() this.keywordTemplate = this.$(".keywordTemplate").html() }, load: function(data){ if (data.keyword) { var $row = this.parseKeyword(data.keyword) this.$el.append($row) } data.threads.forEach(this.appendThread.bind(this)) }, parse: function(thread){ var views = hush_views(thread.viewed) var size = hush_size(thread.size) var comments = hush_null(thread.comment_count, "c") var files = hush_null(thread.file_count, "f") var dot = privacy_dot(thread.private) var datetime = verbose_date(thread.lastmodified) var age = get_age(thread.lastmodified) var id = thread.id + get_revision(thread) var t = this.template .replace(/{{id}}/g, id) .replace(/{{username}}/g, thread.username) .replace(/{{privacy_dot}}/g, dot) .replace(/{{title}}/g, thread.title) .replace(/{{date}}/g, datetime[0]) .replace(/{{time}}/g, datetime[1]) .replace(/{{date_class}}/g, carbon_date(thread.lastmodified) ) .replace(/{{views}}/g, views[1]) .replace(/{{comments}}/g, comments[1]) .replace(/{{files}}/g, files[1]) .replace(/{{size}}/g, size[1] ) .replace(/{{views_class}}/g, views[0]) .replace(/{{comments_class}}/g, comments[0]) .replace(/{{files_class}}/g, files[0]) .replace(/{{show_files}}/g, thread.file_count == 0 ? "hidden" : "") .replace(/{{size_class}}/g, size[0] ) .replace(/{{color}}/g, thread.color || "ivory" ) return t }, parseKeyword: function(keyword){ var t = this.keywordTemplate .replace(/{{keyword}}/g, keyword.keyword) return t }, prependThread: function(thread){ var $row = $( this.parse(thread) ) this.$el.prepend($row) }, appendThread: function(thread){ var $row = $( this.parse(thread) ) this.$el.append($row) }, })