From 43969f1518a81197dfc5298361134ac494f2dc65 Mon Sep 17 00:00:00 2001 From: yasushiito Date: Fri, 30 Jan 2015 08:37:16 +0900 Subject: [PATCH] crush router and render --- app/assets/javascripts/ap.js | 1 + app/assets/javascripts/main.js.coffee | 13 +-- app/assets/javascripts/models/user.js.coffee | 16 +-- app/assets/javascripts/pettanr.js.coffee | 30 ------ app/assets/javascripts/routes.js.coffee | 9 +- .../javascripts/views/balloons/show.js.coffee | 42 +++++++- .../javascripts/views/layouts/default.js.coffee | 107 +++++++++++++++++++++ .../javascripts/views/speeches/show.js.coffee | 42 +++++++- app/assets/javascripts/views/top/account.js.coffee | 6 +- app/views/layouts/ap.html.erb | 6 -- 10 files changed, 202 insertions(+), 70 deletions(-) create mode 100644 app/assets/javascripts/views/layouts/default.js.coffee diff --git a/app/assets/javascripts/ap.js b/app/assets/javascripts/ap.js index 93237a80..27e37c10 100644 --- a/app/assets/javascripts/ap.js +++ b/app/assets/javascripts/ap.js @@ -292,6 +292,7 @@ //= require_directory ./views/ground_colors //= require_directory ./views/ground_pictures //= require_directory ./views/home +//= require_directory ./views/layouts //= require_directory ./views/licenses //= require_directory ./views/license_groups //= require_directory ./views/original_pictures diff --git a/app/assets/javascripts/main.js.coffee b/app/assets/javascripts/main.js.coffee index 526c1caf..5f6e1169 100644 --- a/app/assets/javascripts/main.js.coffee +++ b/app/assets/javascripts/main.js.coffee @@ -25,21 +25,12 @@ $ -> loaded_local_manifest.init() window.operators = new Pettanr.Operator({}) - r = new Pettanr.Views.Top.Index({}) - $("#header").html(r.render().el) - window.onbeforeunload = (e)-> return('leave?') - window.router = new Pettanr.Router() Backbone.history.start({silent: true, pushState: true, root: '/'}) - # try getting current user(copy paste from users/index) - user = new Pettanr.User.Current() - user.save({}, (current_user) -> - r = new Pettanr.Views.Top.Account({operators: window.operators}) - $('#account').html(r.render().el) - window.router.home() - ) + layout = new Pettanr.Views.Layout.Default() + $('#pettanr').html(layout.render().el) t: () -> #i = new Pettanr.Balloon({id: 49}) diff --git a/app/assets/javascripts/models/user.js.coffee b/app/assets/javascripts/models/user.js.coffee index 4e95aff1..ffd53b37 100644 --- a/app/assets/javascripts/models/user.js.coffee +++ b/app/assets/javascripts/models/user.js.coffee @@ -11,26 +11,18 @@ class Pettanr.User extends Backbone.Model artist: () -> initialize: () -> + _.extend(this, Backbone.Events) if @id @url = @url + @id class Pettanr.User.Current extends Pettanr.User - save: (model_attr, after_save = null) -> + save: (model_attr) -> super(model_attr, { success: (model, response, options) => - author = new Pettanr.Author(@get('author')) if @get('author') - artist = new Pettanr.Artist(@get('artist')) if @get('artist') - window.operators = new Pettanr.Operator({ - user: this, - author: author, - artist: artist - }) - if after_save - after_save(this) + @trigger('sign_in:success') error: (model, response, options) -> - r = new Pettanr.Views.User.Index({}) - $("#pettanr").html(r.render().el) + @trigger('sign_in:fail') }) initialize: () -> diff --git a/app/assets/javascripts/pettanr.js.coffee b/app/assets/javascripts/pettanr.js.coffee index 6c39f298..614d8c54 100644 --- a/app/assets/javascripts/pettanr.js.coffee +++ b/app/assets/javascripts/pettanr.js.coffee @@ -198,36 +198,6 @@ class Pettanr form_edit: () -> @set_edit() - class Pettanr.AppBody extends Backbone.View - el: "#pettanr" - - initialize: (options) -> - super(options) - - render: () -> - this.$el.html('') - this - - refresh: (body) -> - @listenTo(body, 'navigate', @navigate) - this.$el.html(body.el) - - fire: (params) -> - c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller'] - controller = new c - controller.params = params - @listenTo(controller, 'ready', @refresh) - @listenTo(controller, 'retitle', @retitle) - controller[params['action']]() - - navigate: (url) -> - window.router.navigate(url, true) - - retitle: (params, str = null) -> - t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title') - site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption) - $(document).attr('title', t + ' - ' + site_caption) - class Pettanr.Dialog extends Backbone.View initialize: (options) -> diff --git a/app/assets/javascripts/routes.js.coffee b/app/assets/javascripts/routes.js.coffee index f1a3b420..18b39066 100644 --- a/app/assets/javascripts/routes.js.coffee +++ b/app/assets/javascripts/routes.js.coffee @@ -17,13 +17,9 @@ class Pettanr.Router extends Backbone.Router params initialize: () -> + _.extend(this, Backbone.Events) _.each @peta_routes(), (r) => @route(r.route, r.callback) - @body = new Pettanr.AppBody() - - fire: (params, dialog) -> - b = dialog || @body - b.fire(params) peta_routes: () -> [ @@ -37,9 +33,10 @@ class Pettanr.Router extends Backbone.Router {route: 'users/sign_in', callback: 'user_sign_in'}, ] + # render App(render:all) home: () -> params = @home_params() - @fire(params) + @trigger('fire', params) home_params: () -> params = {} diff --git a/app/assets/javascripts/views/balloons/show.js.coffee b/app/assets/javascripts/views/balloons/show.js.coffee index d68d10f6..b9ad79a5 100644 --- a/app/assets/javascripts/views/balloons/show.js.coffee +++ b/app/assets/javascripts/views/balloons/show.js.coffee @@ -22,9 +22,49 @@ class Pettanr.Views.Balloon.Show extends Backbone.View caption_url: caption_url, prof_url: prof_url }) + @listenTo(this, 'ready', @ready) + @speech_balloon = @item.speech_balloon() + @speech_balloon.fetch({cache: true}).done => + @panel = @speech_balloon.panel({with_elements: true}) + @panel.fetch({cache: false}).done => # with elements + @author = new Pettanr.Views.Show.HeaderAuthor({item: @panel}) + @body = new Pettanr.Views.Panel.Body({ + panel: @panel, + operators: @operators, + spot: @item + }) + @credits = new Pettanr.Views.Panel.ShowModule.Credits({ + pictures: @panel.licensed_pictures() + }) + @listenTo(@header, 'click:icon', @click_show) + @listenTo(@header, 'click:caption', @click_show) + @listenTo(@header, 'click:prof', @click_prof) + @listenTo(@author, 'click:author', @click_author) + @listenTo(@credits, 'click:credit:icon', @click_credit_icon) + @trigger('ready') render: () -> this.$el.html('') - this.$el.append(@header.render().el) this + ready: () -> + this.$el.html('') + this.$el.append(@header.render().el) + this.$el.append(@author.render().el) + this.$el.append(@body.render().el) + this.$el.append(@credits.render().el) + rb = new Tag.RowBreak() + this.$el.append(rb.render().el) + + click_show: () -> + window.router.navigate(@item.show_url(), true) + + click_author: () -> + window.router.navigate(@panel.author().show_url(), true) + + click_prof: () -> + window.router.navigate(@item.prof_url(), true) + + click_credit_icon: (item) -> + window.router.navigate(item.show_url(), true) + diff --git a/app/assets/javascripts/views/layouts/default.js.coffee b/app/assets/javascripts/views/layouts/default.js.coffee new file mode 100644 index 00000000..1a83ebce --- /dev/null +++ b/app/assets/javascripts/views/layouts/default.js.coffee @@ -0,0 +1,107 @@ +class Pettanr.Views.Layout +class Pettanr.Views.Layout.Default extends Backbone.View + tagName: 'div' + + initialize: (options) -> + @operators = options.operators + @header = new Pettanr.Views.Layout.Default.Header() + @body = new Pettanr.Views.Layout.Default.Body() + @footer = new Pettanr.Views.Layout.Default.Footer() + @listenTo(@body, 'refresh', @refresh) + @listenTo(@body, 'refresh:top', @refresh_top) + + render: () -> + this.$el.html('') + this.$el.append(@header.render().el) + this.$el.append(@body.render().el) + this.$el.append(@footer.render().el) + this + +class Pettanr.Views.Layout.Default.Header extends Backbone.View + tagName: 'div' + id: 'header' + + initialize: (options) -> + @operators = options.operators + @user = new Pettanr.User.Current() + @listenTo(@user, 'signin:success', @signin_success) + @listenTo(@user, 'signin:fail', @signin_fail) + # try getting current user + @user.save({}) + + render: () -> + this.$el.html('') + this + + refresh: () -> + render_sign_in: () -> + view = new Pettanr.Views.Top.Account() + this.$el.html(@header.render().el) + + render_sign_in: () -> + view = new Pettanr.Views.Top.Index() + this.$el.html(@header.render().el) + + sign_in_success: () -> + author = new Pettanr.Author(@user.get('author')) if @user.get('author') + artist = new Pettanr.Artist(@user.get('artist')) if @user.get('artist') + window.operators = new Pettanr.Operator({ + user: @user, + author: author, + artist: artist + }) + @render_signin() + @trigger('sign_in:success') + @trigger('refresh:body', @view) + + sign_in_fail: () -> + @trigger('signin:fail') + + sign_out: () -> + + navigate: (url) -> + @trigger('navigate', url) + +class Pettanr.Views.Layout.Default.Body extends Backbone.View + tagName: 'div' + id: 'body' + + initialize: (options) -> + @router = new Pettanr.Router() + @listenTo(@router, 'fire', @fire) + + render: () -> + this.$el.html('') + view = new Pettanr.Views.Top.Account() + this + + fire: (params) -> + c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller'] + controller = new c + controller.params = params + @listenTo(controller, 'ready', @refresh) + @listenTo(controller, 'retitle', @retitle) + controller[params['action']]() + + retitle: (params, str = null) -> + t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title') + site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption) + $(document).attr('title', t + ' - ' + site_caption) + + refresh: (view) -> + @listenTo(view, 'navigate', @navigate) + this.$el.html(view.el) + + navigate: (url) -> + @router.navigate(url) + +class Pettanr.Views.Layout.Default.Footer extends Backbone.View + tagName: 'div' + id: 'footer' + + initialize: (options) -> + + render: () -> + this.$el.html('') + this + diff --git a/app/assets/javascripts/views/speeches/show.js.coffee b/app/assets/javascripts/views/speeches/show.js.coffee index 87848159..445afd0f 100644 --- a/app/assets/javascripts/views/speeches/show.js.coffee +++ b/app/assets/javascripts/views/speeches/show.js.coffee @@ -22,9 +22,49 @@ class Pettanr.Views.Speech.Show extends Backbone.View caption_url: caption_url, prof_url: prof_url }) + @listenTo(this, 'ready', @ready) + @speech_balloon = @item.speech_balloon() + @speech_balloon.fetch({cache: true}).done => + @panel = @speech_balloon.panel({with_elements: true}) + @panel.fetch({cache: false}).done => # with elements + @author = new Pettanr.Views.Show.HeaderAuthor({item: @panel}) + @body = new Pettanr.Views.Panel.Body({ + panel: @panel, + operators: @operators, + spot: @item + }) + @credits = new Pettanr.Views.Panel.ShowModule.Credits({ + pictures: @panel.licensed_pictures() + }) + @listenTo(@header, 'click:icon', @click_show) + @listenTo(@header, 'click:caption', @click_show) + @listenTo(@header, 'click:prof', @click_prof) + @listenTo(@author, 'click:author', @click_author) + @listenTo(@credits, 'click:credit:icon', @click_credit_icon) + @trigger('ready') render: () -> this.$el.html('') - this.$el.append(@header.render().el) this + ready: () -> + this.$el.html('') + this.$el.append(@header.render().el) + this.$el.append(@author.render().el) + this.$el.append(@body.render().el) + this.$el.append(@credits.render().el) + rb = new Tag.RowBreak() + this.$el.append(rb.render().el) + + click_show: () -> + window.router.navigate(@item.show_url(), true) + + click_author: () -> + window.router.navigate(@panel.author().show_url(), true) + + click_prof: () -> + window.router.navigate(@item.prof_url(), true) + + click_credit_icon: (item) -> + window.router.navigate(item.show_url(), true) + diff --git a/app/assets/javascripts/views/top/account.js.coffee b/app/assets/javascripts/views/top/account.js.coffee index d21ad9fd..40be1faf 100644 --- a/app/assets/javascripts/views/top/account.js.coffee +++ b/app/assets/javascripts/views/top/account.js.coffee @@ -19,7 +19,7 @@ class Pettanr.Views.Top.Account extends Backbone.View if @artist_view this.$el.append(@artist_view.render().el) sign_out = new Tag.A({ - attr: {href: '/'}, + attr: {href: '/users/sign_out'}, class_name: 'sign_out', content: 'sign out' }) @@ -28,10 +28,10 @@ class Pettanr.Views.Top.Account extends Backbone.View this author_click: () -> - window.router.navigate(@author_view.url(), true) + @trigger('navigate', @author_view.url()) artist_click: () -> - window.router.navigate(@artist_view.url(), true) + @trigger('navigate', @artist_view.url()) sign_out: () -> user = new Backbone.Model({id: 0}) diff --git a/app/views/layouts/ap.html.erb b/app/views/layouts/ap.html.erb index 2e46ddba..55a32186 100644 --- a/app/views/layouts/ap.html.erb +++ b/app/views/layouts/ap.html.erb @@ -11,14 +11,8 @@ - -
-
-