From 0f156cd9a462aa645aeb8007755c89dc408de822 Mon Sep 17 00:00:00 2001 From: Steffen van Bergerem Date: Fri, 24 Jan 2014 02:52:05 +0100 Subject: [PATCH] Remove unused beta code --- Changelog.md | 1 + app/assets/javascripts/app/app.js | 1 - .../javascripts/app/forms/picture_form.js | 59 -------- app/assets/javascripts/app/forms/post_form.js | 18 --- app/assets/javascripts/app/pages/stream.js | 68 ---------- .../app/views/aspects_dropdown_view.js | 67 ---------- .../app/views/post/canvas_frame.js | 66 --------- .../javascripts/app/views/post/small_frame.js | 83 ------------ .../app/views/post/stream_frame.js | 29 ---- .../views/post/stream_interactions_view.js | 20 --- .../views/single-post-viewer/new_comment.js | 42 ------ .../app/views/single-post-viewer/reactions.js | 45 ------- .../templates/feedback-actions_tpl.jst.hbs | 33 ----- app/assets/templates/mood_tpl.jst.hbs | 23 ---- app/assets/templates/picture-form_tpl.jst.hbs | 13 -- app/assets/templates/post-form_tpl.jst.hbs | 8 -- .../new-comment_tpl.jst.hbs | 8 -- .../single-post-viewer/reactions_tpl.jst.hbs | 36 ----- .../templates/small-frame/default_tpl.jst.hbs | 52 -------- .../templates/stream-interactions_tpl.jst.hbs | 3 - .../app/forms/picture_form_spec.js | 57 -------- spec/javascripts/app/pages/stream_spec.js | 33 ----- .../app/views/aspects_dropdown_view_spec.js | 126 ------------------ .../app/views/post/canvas_frame_spec.js | 31 ----- .../app/views/post/small_frame_view_spec.js | 85 ------------ .../app/views/post/stream_frame_spec.js | 37 ----- 26 files changed, 1 insertion(+), 1043 deletions(-) delete mode 100644 app/assets/javascripts/app/forms/picture_form.js delete mode 100644 app/assets/javascripts/app/forms/post_form.js delete mode 100644 app/assets/javascripts/app/pages/stream.js delete mode 100644 app/assets/javascripts/app/views/aspects_dropdown_view.js delete mode 100644 app/assets/javascripts/app/views/post/canvas_frame.js delete mode 100644 app/assets/javascripts/app/views/post/small_frame.js delete mode 100644 app/assets/javascripts/app/views/post/stream_frame.js delete mode 100644 app/assets/javascripts/app/views/post/stream_interactions_view.js delete mode 100644 app/assets/javascripts/app/views/single-post-viewer/new_comment.js delete mode 100644 app/assets/javascripts/app/views/single-post-viewer/reactions.js delete mode 100644 app/assets/templates/feedback-actions_tpl.jst.hbs delete mode 100644 app/assets/templates/mood_tpl.jst.hbs delete mode 100644 app/assets/templates/picture-form_tpl.jst.hbs delete mode 100644 app/assets/templates/post-form_tpl.jst.hbs delete mode 100644 app/assets/templates/single-post-viewer/new-comment_tpl.jst.hbs delete mode 100644 app/assets/templates/single-post-viewer/reactions_tpl.jst.hbs delete mode 100644 app/assets/templates/small-frame/default_tpl.jst.hbs delete mode 100644 app/assets/templates/stream-interactions_tpl.jst.hbs delete mode 100644 spec/javascripts/app/forms/picture_form_spec.js delete mode 100644 spec/javascripts/app/pages/stream_spec.js delete mode 100644 spec/javascripts/app/views/aspects_dropdown_view_spec.js delete mode 100644 spec/javascripts/app/views/post/canvas_frame_spec.js delete mode 100644 spec/javascripts/app/views/post/small_frame_view_spec.js delete mode 100644 spec/javascripts/app/views/post/stream_frame_spec.js diff --git a/Changelog.md b/Changelog.md index 69ea0adcb..4ff382dfe 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,7 @@ ## Refactor * Drop number of followers from tags page [#4717](https://github.com/diaspora/diaspora/issues/4717) +* Remove some unused beta code [#4738](https://github.com/diaspora/diaspora/issues/4738) ## Bug fixes * Improve time agos by updating the plugin [#4280](https://github.com/diaspora/diaspora/issues/4280) diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index 2c2e219a5..04f93abb9 100644 --- a/app/assets/javascripts/app/app.js +++ b/app/assets/javascripts/app/app.js @@ -11,7 +11,6 @@ //= require_tree ./pages //= require_tree ./collections //= require_tree ./views -//= require_tree ./forms var app = { collections: {}, diff --git a/app/assets/javascripts/app/forms/picture_form.js b/app/assets/javascripts/app/forms/picture_form.js deleted file mode 100644 index 76a8d6808..000000000 --- a/app/assets/javascripts/app/forms/picture_form.js +++ /dev/null @@ -1,59 +0,0 @@ -app.forms.PictureBase = app.views.Base.extend({ - events : { - 'ajax:complete .new_photo' : "photoUploaded", - "change input[name='photo[user_file]']" : "submitForm" - }, - - onSubmit : $.noop, - uploadSuccess : $.noop, - - postRenderTemplate : function(){ - this.$("input[name=authenticity_token]").val($("meta[name=csrf-token]").attr("content")) - }, - - submitForm : function (){ - this.$("form").submit(); - this.onSubmit(); - }, - - photoUploaded : function(evt, xhr) { - resp = JSON.parse(xhr.responseText) - if(resp.success) { - this.uploadSuccess(resp) - } else { - alert("Upload failed! Please try again. " + resp.error); - } - } -}); - -/* multi photo uploader */ -app.forms.Picture = app.forms.PictureBase.extend({ - templateName : "picture-form", - - initialize : function() { - this.photos = this.model.photos || new Backbone.Collection() - this.photos.bind("add", this.render, this) - }, - - postRenderTemplate : function(){ - this.$("input[name=authenticity_token]").val($("meta[name=csrf-token]").attr("content")) - this.$("input[name=photo_ids]").val(this.photos.pluck("id")) - this.renderPhotos(); - }, - - onSubmit : function (){ - this.$(".photos").append($('')) - }, - - uploadSuccess : function(resp) { - this.photos.add(new Backbone.Model(resp.data)) - }, - - renderPhotos : function(){ - var photoContainer = this.$(".photos") - this.photos.each(function(photo){ - var photoView = new app.views.Photo({model : photo}).render().el - photoContainer.append(photoView) - }) - } -}); diff --git a/app/assets/javascripts/app/forms/post_form.js b/app/assets/javascripts/app/forms/post_form.js deleted file mode 100644 index 944cdd9a8..000000000 --- a/app/assets/javascripts/app/forms/post_form.js +++ /dev/null @@ -1,18 +0,0 @@ -app.forms.Post = app.views.Base.extend({ - templateName : "post-form", - className : "post-form", - - subviews : { - ".new_picture" : "pictureForm" - }, - - initialize : function() { - this.pictureForm = new app.forms.Picture({model: this.model}); - }, - - postRenderTemplate : function() { - Mentions.initialize(this.$("textarea.text")); - Mentions.fetchContacts(); //mentions should use app.currentUser - this.$('textarea').autoResize({minHeight: '200', maxHeight:'300', animate: false}); - } -}); \ No newline at end of file diff --git a/app/assets/javascripts/app/pages/stream.js b/app/assets/javascripts/app/pages/stream.js deleted file mode 100644 index 988af0d8d..000000000 --- a/app/assets/javascripts/app/pages/stream.js +++ /dev/null @@ -1,68 +0,0 @@ -app.pages.Stream = app.views.Base.extend({ - templateName : "stream", - - events : { - 'activate .stream-frame-wrapper' : 'triggerInteractionLoad' - }, - - subviews : { - "#stream-content" : "streamView", - "#stream-interactions" : "interactionsView" - }, - - initialize : function(){ - this.stream = this.model = new app.models.Stream() - this.stream.preloadOrFetch() - - this.streamView = new app.pages.Stream.InfiniteScrollView({ model : this.stream }) - this.interactionsView = new app.views.StreamInteractions() - - this.streamView.on('loadMore', this.updateUrlState, this); - this.stream.on("fetched", this.refreshScrollSpy, this) - this.stream.on("frame:interacted", this.selectFrame, this) - }, - - selectFrame : function(post){ - if(this.selectedPost == post) { return } - this.selectedPost = post - - this.$(".stream-frame-wrapper").removeClass("selected-frame") - this.$(".stream-frame-wrapper[data-id=" + this.selectedPost.id +"]").addClass("selected-frame") - this.interactionsView.setInteractions(this.selectedPost) - }, - - updateUrlState : function(){ - var post = this.stream.items.last(); - if(post){ - this.navigateToPost(post) - } - }, - - navigateToPost : function(post){ - app.router.navigate(location.pathname + "?max_time=" + post.createdAt(), {replace: true}) - }, - - triggerInteractionLoad : function(evt){ - this._throttledInteractions = this._throttledInteractions || _.bind(_.throttle(function(id){ - this.selectFrame(this.stream.items.get(id)) - }, 500), this) - - this._throttledInteractions($(evt.target).data("id")) - }, - - refreshScrollSpy : function(){ - _.defer($('body').scrollspy('refresh')) - } -}, - -//static methods -{ - InfiniteScrollView : app.views.InfScroll.extend({ - initialize: function(){ - this.stream = this.model - this.collection = this.stream.items - this.postClass = app.views.Post.StreamFrame - this.setupInfiniteScroll() - } - }) -}); diff --git a/app/assets/javascripts/app/views/aspects_dropdown_view.js b/app/assets/javascripts/app/views/aspects_dropdown_view.js deleted file mode 100644 index 11e2a7d59..000000000 --- a/app/assets/javascripts/app/views/aspects_dropdown_view.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * the aspects dropdown specifies the scope of a posted status message. - * - * this view is part of the publisher where users are presented the options - * 'public', 'all aspects' and a list of their personal aspects, for limiting - * 'the audience of created contents. - */ -app.views.AspectsDropdown = app.views.Base.extend({ - templateName : "aspects-dropdown", - events : { - "change .dropdown-menu input" : "setVisibility" - }, - - presenter : function(){ - var selectedAspects = this.model.get("aspect_ids") - , parsedIds = _.map(selectedAspects, parseInt) - - return { - aspects : _.map(app.currentUser.get('aspects'), function(aspect){ - return _.extend({}, aspect, {checked :_.include(parsedIds, aspect.id) }) - }), - - public :_.include(selectedAspects, "public"), - 'all-aspects' :_.include(selectedAspects, "all_aspects") - } - }, - - postRenderTemplate : function(){ - if(this.model.get("aspect_ids")) { - this.setDropdownText() - } else { - this.setVisibility({target : this.$("input[value='public']").first()}) - } - }, - - setVisibility : function(evt){ - var input = $(evt.target).closest("input") - - if(_.include(['public', 'all_aspects'], input.val())) { - this.$("input").attr("checked", false) - input.attr("checked", "checked") - } else { - this.$("input.public, input.all_aspects").attr("checked", false) - } - - this.setDropdownText() - }, - - setDropdownText : function(){ - var selected = this.$("input").serializeArray() - , text; - - switch (selected.length) { - case 0: - text = "Private" - break - case 1: - text = selected[0].name - break - default: - text = ["In", selected.length, "aspects"].join(" ") - break - } - - $.trim(this.$(".dropdown-toggle .text").text(text)) - } -}); diff --git a/app/assets/javascripts/app/views/post/canvas_frame.js b/app/assets/javascripts/app/views/post/canvas_frame.js deleted file mode 100644 index f1b5b311e..000000000 --- a/app/assets/javascripts/app/views/post/canvas_frame.js +++ /dev/null @@ -1,66 +0,0 @@ -//= require ./small_frame - -app.views.Post.CanvasFrame = app.views.Post.SmallFrame.extend({ - SINGLE_COLUMN_WIDTH : 265, - DOUBLE_COLUMN_WIDTH : 560, - - events : { - "click .info" : "goToPost", // the only event copied from SmallFrame - "click .content" : "favoritePost", - "click .delete" : "killPost" - }, - - adjustedImageHeight : function() { - if(!(this.model.get("photos") || [])[0]) { return } - - var modifiers = [this.dimensionsClass(), this.colorClass()].join(' ') - , width; - - /* mobile width - * - * currently does not re-calculate on orientation change */ - if($(window).width() <= 767) { - width = $(window).width(); - } - - var firstPhoto = this.model.get("photos")[0] - , width = width || (modifiers.search("x2") != -1 ? this.DOUBLE_COLUMN_WIDTH : this.SINGLE_COLUMN_WIDTH) - , ratio = width / firstPhoto.dimensions.width; - - return(ratio * firstPhoto.dimensions.height) - }, - - presenter : function(){ - return _.extend(this.smallFramePresenter(), { - adjustedImageHeight : this.adjustedImageHeight() - }) - }, - - favoritePost : function(evt) { - if(evt) { - /* follow links instead of faving the targeted post */ - if($(evt.target).is('a')) { return } - - evt.stopImmediatePropagation(); evt.preventDefault(); - } - - var prevDimension = this.dimensionsClass(); - - this.model.toggleFavorite({save : this.model.get("author").diaspora_id == app.currentUser.get("diaspora_id")}) - - this.$el.removeClass(prevDimension) - this.render() - - app.page.stream.trigger("reLayout") - //trigger moar relayouts in the case of images WHOA GROSS HAX - _.delay(function(){app.page.stream.trigger("reLayout")}, 200) - - // track the action - app.instrument("track", "Resize Frame") - }, - - killPost : function(){ - this.destroyModel() - _.delay(function(){app.page.stream.trigger("reLayout")}, 0) - } -}); diff --git a/app/assets/javascripts/app/views/post/small_frame.js b/app/assets/javascripts/app/views/post/small_frame.js deleted file mode 100644 index 6920c19aa..000000000 --- a/app/assets/javascripts/app/views/post/small_frame.js +++ /dev/null @@ -1,83 +0,0 @@ -//= require "../post_view" - -app.views.Post.SmallFrame = app.views.Post.extend({ - className : "canvas-frame", - - templateName : "small-frame/default", // default to fall back to - - events : { - "click .info" : "goToPost" - }, - - subviews : { - '.embed-frame' : "oEmbedView", - '.open-graph-frame' : 'openGraphView' - }, - - initialize : function(options) { - this.stream = options.stream; - this.addStylingClasses() - }, - - oEmbedView : function(){ - return new app.views.OEmbed({model : this.model}) - }, - - openGraphView : function(){ - return new app.views.OpenGraph({model : this.model}) - }, - - smallFramePresenter : function(){ - //todo : we need to have something better for small frame text, probably using the headline() scenario. - return _.extend(this.defaultPresenter(), - { - text : this.model && app.helpers.textFormatter(this.model.get("text"), this.model), - likesCount : this.model.interactions.likesCount(), - resharesCount : this.model.interactions.resharesCount(), - commentsCount : this.model.interactions.commentsCount() - }) - }, - - postRenderTemplate : function() { - this.addStylingClasses() - }, - - addStylingClasses : function() { - this.$el.addClass([this.dimensionsClass(), this.colorClass(), this.frameClass()].join(' ')) - }, - - frameClass : function(){ - var name = this.model.get("frame_name") || "" - return name.toLowerCase() - }, - - colorClass : function() { - var text = this.model.get("text") - , baseClass = $.trim(text).length == 0 ? "no-text" : "has-text"; - - if(this.model.get("photos").length > 0 || this.model.get("o_embed_cache") || this.model.get("open_graph_cache")) - baseClass += " has-media"; - - if(baseClass == "no-text" || this.model.get("photos").length > 0 || this.model.get("o_embed_cache") || this.model.get("open_graph_cache")) { return baseClass } - - var randomColor = _.first(_.shuffle(['cyan', 'green', 'yellow', 'purple', 'lime-green', 'orange', 'red', 'turquoise', 'sand'])); - - var textClass = randomColor; - - if(text.length < 40) { - textClass += " big-text" - } - - return [baseClass, textClass].join(" ") - }, - - dimensionsClass : function() { - return (this.model.get("favorite")) ? "x2 width height" : "" - }, - - goToPost : function(evt) { - if(evt) { evt.preventDefault() && evt.stopImmediatePropagation(); } - app.setPreload('post',this.model.attributes) - app.router.navigate(this.model.url(), true) - } -}); diff --git a/app/assets/javascripts/app/views/post/stream_frame.js b/app/assets/javascripts/app/views/post/stream_frame.js deleted file mode 100644 index 7410fa66e..000000000 --- a/app/assets/javascripts/app/views/post/stream_frame.js +++ /dev/null @@ -1,29 +0,0 @@ -app.views.Post.StreamFrame = app.views.Base.extend({ - className : "stream-frame", - - templateName : "stream-frame", - - subviews : { - ".small-frame" : "smallFrameView", - ".stream-frame-feedback" : "feedbackView" - }, - - initialize : function(options) { - this.stream = options.stream - this.smallFrameView = new app.views.Post.SmallFrame({model : this.model}) - this.feedbackView = new app.views.FeedbackActions({ model: this.model }) - }, - - events : { - 'click .content' : 'triggerInteracted', - "click a.permalink" : "goToPost" - }, - - triggerInteracted : function() { - this.stream.trigger("frame:interacted", this.model) - }, - - goToPost : function(evt) { - this.smallFrameView.goToPost(evt) - } -}); diff --git a/app/assets/javascripts/app/views/post/stream_interactions_view.js b/app/assets/javascripts/app/views/post/stream_interactions_view.js deleted file mode 100644 index 8a3da7a34..000000000 --- a/app/assets/javascripts/app/views/post/stream_interactions_view.js +++ /dev/null @@ -1,20 +0,0 @@ -app.views.StreamInteractions = app.views.Base.extend({ - id : "post-info", - - subviews:{ - ".comments" : "comments", - ".new-comment" : "newCommentView" - }, - - templateName : "stream-interactions", - - setInteractions : function (model) { - model.interactions.fetch().done( - _.bind(function () { - this.render() - }, this)); - - this.comments = new app.views.PostViewerReactions({ model: model.interactions }) - this.newCommentView = new app.views.PostViewerNewComment({ model : model }) - } -}); diff --git a/app/assets/javascripts/app/views/single-post-viewer/new_comment.js b/app/assets/javascripts/app/views/single-post-viewer/new_comment.js deleted file mode 100644 index 3ec049b1d..000000000 --- a/app/assets/javascripts/app/views/single-post-viewer/new_comment.js +++ /dev/null @@ -1,42 +0,0 @@ -app.views.PostViewerNewComment = app.views.Base.extend({ - - templateName: "single-post-viewer/new-comment", - - events : { - "click button" : "createComment", - "focus textarea" : "scrollToBottom" - }, - - scrollableArea : "#post-reactions", - - initialize : function(){ - this.model.interactions.comments.bind("sync", this.clearAndReactivateForm, this) - }, - - postRenderTemplate : function() { - this.$("textarea").placeholder(); - this.$("textarea").autoResize({'extraSpace' : 0}); - }, - - createComment: function(evt) { - if(evt){ evt.preventDefault(); } - this.toggleFormState() - this.model.comment(this.$("textarea").val()); - }, - - clearAndReactivateForm : function() { - this.toggleFormState() - this.$("textarea").val("") - .css('height', '18px') - .focus() - }, - - toggleFormState : function() { - this.$("form").children().toggleClass('disabled') - }, - - scrollToBottom : function() { - $(this.scrollableArea).scrollTop($(this.scrollableArea).prop("scrollHeight")) - } - -}); diff --git a/app/assets/javascripts/app/views/single-post-viewer/reactions.js b/app/assets/javascripts/app/views/single-post-viewer/reactions.js deleted file mode 100644 index 393c8243a..000000000 --- a/app/assets/javascripts/app/views/single-post-viewer/reactions.js +++ /dev/null @@ -1,45 +0,0 @@ -app.views.PostViewerReactions = app.views.Base.extend({ - - className : "", - - templateName: "single-post-viewer/reactions", - - tooltipSelector : ".avatar", - - initialize : function() { - this.model.on('change', this.render, this); - this.model.comments.bind("add", this.appendComment, this) - }, - - presenter : function(){ - return { - likes : this.model.likes.toJSON(), - comments : this.model.comments.toJSON(), - reshares : this.model.reshares.toJSON() - } - }, - - postRenderTemplate : function() { - this.populateComments() - }, - - /* copy pasta from commentStream */ - populateComments : function() { - this.model.comments.each(this.appendComment, this) - }, - - /* copy pasta from commentStream */ - appendComment: function(comment) { - // Set the post as the comment's parent, so we can check on post ownership in the Comment view. - // model was post on old view, is interactions on new view - - var parent = this.model.get("post_type") ? this.model.toJSON : this.model.post.toJSON() - comment.set({parent : parent}) - - this.$("#post-comments").append(new app.views.Comment({ - model: comment, - className : "post-comment media", - templateName : "post-viewer/comment" - }).render().el); - } -}); diff --git a/app/assets/templates/feedback-actions_tpl.jst.hbs b/app/assets/templates/feedback-actions_tpl.jst.hbs deleted file mode 100644 index bff9a8251..000000000 --- a/app/assets/templates/feedback-actions_tpl.jst.hbs +++ /dev/null @@ -1,33 +0,0 @@ - - {{#if userLike}} - - {{else}} - - {{/if}} - {{likesCount}} - - -{{#if userCanReshare}} - - {{#if userReshare}} - - {{else}} - - {{/if}} - {{resharesCount}} - -{{else}} - - {{#if userReshare}} - - {{else}} - - {{/if}} - {{resharesCount}} - -{{/if}} - - - - {{commentsCount}} - diff --git a/app/assets/templates/mood_tpl.jst.hbs b/app/assets/templates/mood_tpl.jst.hbs deleted file mode 100644 index 739e23565..000000000 --- a/app/assets/templates/mood_tpl.jst.hbs +++ /dev/null @@ -1,23 +0,0 @@ -
-
- - - {{#if o_embed_cache}} - {{#if o_embed_cache.data}} - {{{o_embed_cache.data.html}}} - {{/if}} - {{else}} - {{#if open_graph_cache}} - - {{/if}} - {{/if}} - -
{{{headline}}}
-
{{{body}}}
-
diff --git a/app/assets/templates/picture-form_tpl.jst.hbs b/app/assets/templates/picture-form_tpl.jst.hbs deleted file mode 100644 index 2dccd9059..000000000 --- a/app/assets/templates/picture-form_tpl.jst.hbs +++ /dev/null @@ -1,13 +0,0 @@ -
- -
- -
- -
-
- Add Photos - -
-
-
diff --git a/app/assets/templates/post-form_tpl.jst.hbs b/app/assets/templates/post-form_tpl.jst.hbs deleted file mode 100644 index 31891b7cf..000000000 --- a/app/assets/templates/post-form_tpl.jst.hbs +++ /dev/null @@ -1,8 +0,0 @@ -
- -
-
- - - - -
diff --git a/app/assets/templates/single-post-viewer/reactions_tpl.jst.hbs b/app/assets/templates/single-post-viewer/reactions_tpl.jst.hbs deleted file mode 100644 index 9221f9bf9..000000000 --- a/app/assets/templates/single-post-viewer/reactions_tpl.jst.hbs +++ /dev/null @@ -1,36 +0,0 @@ -{{# if likes}} -
-
-
- -
-
- {{#each likes}} - {{#linkToPerson author}} - {{{personImage this "small" "micro"}}} - {{/linkToPerson}} - {{/each}} -
-
-
-{{/if}} - -{{# if reshares}} -
-
-
- -
-
- {{#each reshares}} - {{#linkToPerson author}} - {{{personImage this "small" "micro"}}} - {{/linkToPerson}} - {{/each}} -
-
-
-{{/if}} - -
- diff --git a/app/assets/templates/small-frame/default_tpl.jst.hbs b/app/assets/templates/small-frame/default_tpl.jst.hbs deleted file mode 100644 index 6c6c6ca39..000000000 --- a/app/assets/templates/small-frame/default_tpl.jst.hbs +++ /dev/null @@ -1,52 +0,0 @@ -
- {{#if photos}} -
- {{#each photos}} - - {{/each}} -
- {{/if}} - - {{#if object_url}} -
- - - -
- {{/if}} - -
-
- - {{#if text}} -
- {{{text}}} -
-
- {{else}} -
-

-
- {{/if}} - - -
- -
- - -
- diff --git a/app/assets/templates/stream-interactions_tpl.jst.hbs b/app/assets/templates/stream-interactions_tpl.jst.hbs deleted file mode 100644 index 56aa2f895..000000000 --- a/app/assets/templates/stream-interactions_tpl.jst.hbs +++ /dev/null @@ -1,3 +0,0 @@ -