diff --git a/app/assets/javascripts/app/app.js b/app/assets/javascripts/app/app.js index 4dd6aca79..150f9258b 100644 --- a/app/assets/javascripts/app/app.js +++ b/app/assets/javascripts/app/app.js @@ -6,7 +6,6 @@ //= require_tree ./pages //= require_tree ./collections //= require_tree ./views -//= require ./forms //= require_tree ./forms var app = { diff --git a/app/assets/javascripts/app/forms.js b/app/assets/javascripts/app/forms.js deleted file mode 100644 index a9f3fe105..000000000 --- a/app/assets/javascripts/app/forms.js +++ /dev/null @@ -1,14 +0,0 @@ -app.forms.Base = app.views.Base.extend({ - formSelector : "form", - - initialize : function() { - this.setupFormEvents() - }, - - setupFormEvents : function(){ - this.events = {} - this.events['submit ' + this.formSelector] = 'setModelAttributes'; - this.delegateEvents(); - }, - -}) diff --git a/app/assets/javascripts/app/forms/picture_form.js b/app/assets/javascripts/app/forms/picture_form.js index f8aaf64fd..0cfe74ad3 100644 --- a/app/assets/javascripts/app/forms/picture_form.js +++ b/app/assets/javascripts/app/forms/picture_form.js @@ -1,4 +1,4 @@ -app.forms.Picture = app.forms.Base.extend({ +app.forms.Picture = app.views.Base.extend({ templateName : "picture-form", events : { diff --git a/app/assets/javascripts/app/forms/post_form.js b/app/assets/javascripts/app/forms/post_form.js index 1af088fe4..c21137691 100644 --- a/app/assets/javascripts/app/forms/post_form.js +++ b/app/assets/javascripts/app/forms/post_form.js @@ -1,48 +1,13 @@ -app.forms.Post = app.forms.Base.extend({ +app.forms.Post = app.views.Base.extend({ templateName : "post-form", - formSelector : ".new-post", + className : "post-form", subviews : { - ".aspect_selector" : "aspectsDropdown", - ".service_selector" : "servicesSelector", ".new_picture" : "pictureForm" }, - formAttrs : { -// "textarea#text_with_markup" : "text", //fix mentions - "textarea.text" : "text", - "input.aspect_ids" : "aspect_ids", - "input.service:checked" : "services" - }, - initialize : function() { - this.aspectsDropdown = new app.views.AspectsDropdown(); - this.servicesSelector = new app.views.ServicesSelector(); this.pictureForm = new app.forms.Picture(); - - this.setupFormEvents(); - }, - - setModelAttributes : function(evt){ - if(evt){ evt.preventDefault(); } - var form = this.$(this.formSelector); - - this.model.set(_.inject(this.formAttrs, setValueFromField, {})) - //pass collections across - this.model.photos = this.pictureForm.photos - this.model.set({"photos": this.model.photos.toJSON() }) - - function setValueFromField(memo, attribute, selector){ - var selectors = form.find(selector); - if(selectors.length > 1) { - memo[attribute] = _.map(selectors, function(selector){ - return $(selector).val() - }) - } else { - memo[attribute] = selectors.val(); - } - return memo - } }, postRenderTemplate : function() { diff --git a/app/assets/javascripts/app/pages/composer.js b/app/assets/javascripts/app/pages/composer.js new file mode 100644 index 000000000..fe5f947e1 --- /dev/null +++ b/app/assets/javascripts/app/pages/composer.js @@ -0,0 +1,67 @@ +app.pages.Composer = app.views.Base.extend({ + templateName : "flow", + + subviews : { + ".flow-content" : "postForm", + ".flow-controls .controls" : "composerControls" + }, + + events : { + "click button.next" : "navigateNext" + }, + + formAttrs : { +// "textarea#text_with_markup" : "text", //fix mentions + "textarea.text" : "text", + "input.aspect_ids" : "aspect_ids", + "input.service:checked" : "services" + }, + + + initialize : function(){ + app.frame = this.model = new app.models.StatusMessage(); + this.postForm = new app.forms.Post({model : this.model}); + this.composerControls = new app.views.ComposerControls({model : this.model}); + }, + + navigateNext : function(){ + this.setModelAttributes(); + app.router.navigate("framer", true); + }, + + setModelAttributes : function(evt){ + if(evt){ evt.preventDefault(); } + + var form = this.$el; + + this.model.set(_.inject(this.formAttrs, setValueFromField, {})) + this.model.photos = this.postForm.pictureForm.photos + this.model.set({"photos": this.model.photos.toJSON() }) + + function setValueFromField(memo, attribute, selector){ + var selectors = form.find(selector); + if(selectors.length > 1) { + memo[attribute] = _.map(selectors, function(selector){ + return this.$(selector).val() + }) + } else { + memo[attribute] = selectors.val(); + } + return memo + } + } +}); + +app.views.ComposerControls = app.views.Base.extend({ + templateName : 'composer-controls', + + subviews : { + ".aspect-selector" : "aspectsDropdown", + ".service-selector" : "servicesSelector", + }, + + initialize : function() { + this.aspectsDropdown = new app.views.AspectsDropdown(); + this.servicesSelector = new app.views.ServicesSelector(); + } +}) diff --git a/app/assets/javascripts/app/pages/framer.js b/app/assets/javascripts/app/pages/framer.js index 90828fe71..c36551e42 100644 --- a/app/assets/javascripts/app/pages/framer.js +++ b/app/assets/javascripts/app/pages/framer.js @@ -1,15 +1,11 @@ app.pages.Framer = app.views.Base.extend({ - templateName : "framer", + templateName : "flow", id : "post-content", - events : { - "click button.done" : "saveFrame" - }, - subviews : { - ".post-view" : "postView", - ".template-picker" : "templatePicker" + ".flow-content" : "postView", + ".flow-controls .controls" : "framerControls" }, initialize : function(){ @@ -18,7 +14,8 @@ app.pages.Framer = app.views.Base.extend({ this.model.bind("change", this.render, this) this.model.bind("sync", this.navigateToShow, this) - this.templatePicker = new app.views.TemplatePicker({ model: this.model }) + + this.framerControls = new app.views.framerControls({model : this.model}) }, postView : function(){ @@ -27,9 +24,25 @@ app.pages.Framer = app.views.Base.extend({ navigateToShow : function(){ app.router.navigate(this.model.url(), {trigger: true, replace: true}) + } +}) + +app.views.framerControls = app.views.Base.extend({ + templateName : 'framer-controls', + + events : { + "click button.done" : "saveFrame" + }, + + subviews : { + ".template-picker" : 'templatePicker' + }, + + initialize : function(){ + this.templatePicker = new app.views.TemplatePicker({ model: this.model }) }, saveFrame : function(){ this.model.save() } -}) +}) \ No newline at end of file diff --git a/app/assets/javascripts/app/pages/post-new.js b/app/assets/javascripts/app/pages/post-new.js deleted file mode 100644 index ab8ed72a1..000000000 --- a/app/assets/javascripts/app/pages/post-new.js +++ /dev/null @@ -1,20 +0,0 @@ -app.pages.PostNew = app.views.Base.extend({ - templateName : "post-new", - - subviews : { "#new-post" : "postForm"}, - - events : { - "click button.next" : "navigateNext" - }, - - initialize : function(){ - this.model = new app.models.StatusMessage() - this.postForm = new app.forms.Post({model : this.model}) - }, - - navigateNext : function(){ - this.postForm.setModelAttributes() - app.frame = this.model; - app.router.navigate("framer", true) - } -}); diff --git a/app/assets/javascripts/app/router.js b/app/assets/javascripts/app/router.js index 8a56a353b..a030d8ce7 100644 --- a/app/assets/javascripts/app/router.js +++ b/app/assets/javascripts/app/router.js @@ -18,7 +18,7 @@ app.Router = Backbone.Router.extend({ "followed_tags": "stream", "tags/:name": "stream", - "posts/new" : "newPost", + "posts/new" : "composer", "posts/:id": "singlePost", "p/:id": "singlePost", "framer": "framer" @@ -41,8 +41,8 @@ app.Router = Backbone.Router.extend({ $("#main_stream").html(app.page.render().el); }, - newPost : function(){ - var page = new app.pages.PostNew(); + composer : function(){ + var page = new app.pages.Composer(); $("#container").html(page.render().el) }, diff --git a/app/assets/stylesheets/login.css.scss b/app/assets/stylesheets/login.css.scss index d5e8d19bf..b4cd1c859 100644 --- a/app/assets/stylesheets/login.css.scss +++ b/app/assets/stylesheets/login.css.scss @@ -2,7 +2,7 @@ // licensed under the Affero General Public License version 3 or later. See // the COPYRIGHT file. -@import "_mixins.css.scss"; +@import "mixins"; #login { width: 400px; diff --git a/app/assets/stylesheets/new_styles/_base.scss b/app/assets/stylesheets/new_styles/_base.scss index b5c97d471..373600785 100644 --- a/app/assets/stylesheets/new_styles/_base.scss +++ b/app/assets/stylesheets/new_styles/_base.scss @@ -304,7 +304,27 @@ article { //mood posts $bring-dark-accent-forward-color: #DDD; -.framer-controls { + + +div[data-template=flow] { + display : table; + width : 100%; + height : 100%; + position : absolute; +} + +.flow-content { + display : table; + width : 100%; + height : 100%; +} + +.post-form { + display : table-cell; + vertical-align : middle; +} + +.flow-controls { @include info-container-base(); z-index: 999; @@ -312,8 +332,14 @@ $bring-dark-accent-forward-color: #DDD; width: 100%; bottom: 0; + padding: 20px 0; + max-height: 68px; + + box-sizing: border-box; + -moz-box-sizing: border-box; + .controls { - margin: 20px auto; + margin: 0 auto; max-width: 960px; text-align: center; @@ -323,6 +349,33 @@ $bring-dark-accent-forward-color: #DDD; } } + .aspect-selector { + float: left; + + i { + display: none; + } + + .selected i { + display: inline-block; + } + + a { + display : inline-block; + } + } + + .service-selector { + float: left; + margin-left: 100px; + } + + .dropdown-menu { + bottom : 0; + top: auto; + text-align: left; + } + a.mood { @include border-radius(); margin-right: 20px; diff --git a/app/assets/stylesheets/new_styles/_composer.scss b/app/assets/stylesheets/new_styles/_composer.scss index febec2c47..6c3a859d3 100644 --- a/app/assets/stylesheets/new_styles/_composer.scss +++ b/app/assets/stylesheets/new_styles/_composer.scss @@ -1,27 +1,5 @@ -.aspects_dropdown { - i { - display: none; - } - - .selected i { - display: inline-block; - } - - a { - display : inline-block; - } -} - .new_photo .photo{ display: inline; max-width: 200px; max-height: 200px; } - -.new-post-section { - margin-top: 100px; -} - -.aspect_selector { - float: right; -} \ No newline at end of file diff --git a/app/assets/templates/composer-controls.jst.hbs b/app/assets/templates/composer-controls.jst.hbs new file mode 100644 index 000000000..f2eaa1673 --- /dev/null +++ b/app/assets/templates/composer-controls.jst.hbs @@ -0,0 +1,3 @@ + +
+ diff --git a/app/assets/templates/flow.jst.hbs b/app/assets/templates/flow.jst.hbs new file mode 100644 index 000000000..dcafc4e02 --- /dev/null +++ b/app/assets/templates/flow.jst.hbs @@ -0,0 +1,5 @@ + + +