OSDN Git Service

crush router and render
authoryasushiito <yas@pen-chan.jp>
Thu, 29 Jan 2015 23:37:16 +0000 (08:37 +0900)
committeryasushiito <yas@pen-chan.jp>
Thu, 29 Jan 2015 23:37:16 +0000 (08:37 +0900)
app/assets/javascripts/ap.js
app/assets/javascripts/main.js.coffee
app/assets/javascripts/models/user.js.coffee
app/assets/javascripts/pettanr.js.coffee
app/assets/javascripts/routes.js.coffee
app/assets/javascripts/views/balloons/show.js.coffee
app/assets/javascripts/views/layouts/default.js.coffee [new file with mode: 0644]
app/assets/javascripts/views/speeches/show.js.coffee
app/assets/javascripts/views/top/account.js.coffee
app/views/layouts/ap.html.erb

index 93237a8..27e37c1 100644 (file)
 //= 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
index 526c1ca..5f6e116 100644 (file)
@@ -25,21 +25,12 @@ $ ->
   loaded_local_manifest.init()\r
   window.operators = new Pettanr.Operator({})\r
   \r
-  r = new Pettanr.Views.Top.Index({})\r
-  $("#header").html(r.render().el)\r
-  \r
   window.onbeforeunload = (e)->\r
     return('leave?')\r
-  window.router = new Pettanr.Router()\r
   Backbone.history.start({silent: true, pushState: true, root: '/'})\r
   \r
-  # try getting current user(copy paste from users/index)\r
-  user = new Pettanr.User.Current()\r
-  user.save({}, (current_user) ->\r
-    r = new Pettanr.Views.Top.Account({operators: window.operators})\r
-    $('#account').html(r.render().el)\r
-    window.router.home()\r
-  )\r
+  layout = new Pettanr.Views.Layout.Default()\r
+  $('#pettanr').html(layout.render().el)\r
   \r
   t: () ->\r
     #i = new Pettanr.Balloon({id: 49})\r
index 4e95aff..ffd53b3 100644 (file)
@@ -11,26 +11,18 @@ class Pettanr.User extends Backbone.Model
   artist: () ->\r
   \r
   initialize: () ->\r
+    _.extend(this, Backbone.Events)\r
     if @id\r
       @url = @url + @id\r
   \r
 class Pettanr.User.Current extends Pettanr.User\r
   \r
-  save: (model_attr, after_save = null) ->\r
+  save: (model_attr) ->\r
     super(model_attr, {\r
       success: (model, response, options) =>\r
-        author = new Pettanr.Author(@get('author')) if @get('author')\r
-        artist = new Pettanr.Artist(@get('artist')) if @get('artist')\r
-        window.operators = new Pettanr.Operator({\r
-          user: this, \r
-          author: author, \r
-          artist: artist\r
-        })\r
-        if after_save\r
-          after_save(this)\r
+        @trigger('sign_in:success')\r
       error: (model, response, options) ->\r
-        r = new Pettanr.Views.User.Index({})\r
-        $("#pettanr").html(r.render().el)\r
+        @trigger('sign_in:fail')\r
     })\r
   \r
   initialize: () ->\r
index 6c39f29..614d8c5 100644 (file)
@@ -198,36 +198,6 @@ class Pettanr
     form_edit: () ->\r
       @set_edit()\r
     \r
-  class Pettanr.AppBody extends Backbone.View\r
-    el: "#pettanr"\r
-    \r
-    initialize: (options) ->\r
-      super(options)\r
-    \r
-    render: () ->\r
-      this.$el.html('')\r
-      this\r
-    \r
-    refresh: (body) ->\r
-      @listenTo(body, 'navigate', @navigate)\r
-      this.$el.html(body.el)\r
-    \r
-    fire: (params) ->\r
-      c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
-      controller = new c\r
-      controller.params = params\r
-      @listenTo(controller, 'ready', @refresh)\r
-      @listenTo(controller, 'retitle', @retitle)\r
-      controller[params['action']]()\r
-    \r
-    navigate: (url) ->\r
-      window.router.navigate(url, true)\r
-    \r
-    retitle: (params, str = null) ->\r
-      t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
-      site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
-      $(document).attr('title', t + ' - ' + site_caption)\r
-    \r
   class Pettanr.Dialog extends Backbone.View\r
     \r
     initialize: (options) ->\r
index f1a3b42..18b3906 100644 (file)
@@ -17,13 +17,9 @@ class Pettanr.Router extends Backbone.Router
     params\r
   \r
   initialize: () ->\r
+    _.extend(this, Backbone.Events)\r
     _.each @peta_routes(), (r) =>\r
       @route(r.route, r.callback)\r
-    @body = new Pettanr.AppBody()\r
-  \r
-  fire: (params, dialog) ->\r
-    b = dialog || @body\r
-    b.fire(params)\r
   \r
   peta_routes: () ->\r
     [\r
@@ -37,9 +33,10 @@ class Pettanr.Router extends Backbone.Router
       {route: 'users/sign_in', callback: 'user_sign_in'}, \r
     ]\r
   \r
+  # render App(render:all)\r
   home: () ->\r
     params = @home_params()\r
-    @fire(params)\r
+    @trigger('fire', params)\r
   \r
   home_params: () ->\r
     params = {}\r
index d68d10f..b9ad79a 100644 (file)
@@ -22,9 +22,49 @@ class Pettanr.Views.Balloon.Show extends Backbone.View
       caption_url: caption_url,\r
       prof_url: prof_url\r
     })\r
+    @listenTo(this, 'ready', @ready)\r
+    @speech_balloon = @item.speech_balloon()\r
+    @speech_balloon.fetch({cache: true}).done =>\r
+      @panel = @speech_balloon.panel({with_elements: true})\r
+      @panel.fetch({cache: false}).done =>  # with elements\r
+        @author = new Pettanr.Views.Show.HeaderAuthor({item: @panel})\r
+        @body = new Pettanr.Views.Panel.Body({\r
+          panel: @panel,\r
+          operators: @operators,\r
+          spot: @item\r
+        })\r
+        @credits = new Pettanr.Views.Panel.ShowModule.Credits({\r
+          pictures: @panel.licensed_pictures()\r
+        })\r
+        @listenTo(@header, 'click:icon', @click_show)\r
+        @listenTo(@header, 'click:caption', @click_show)\r
+        @listenTo(@header, 'click:prof', @click_prof)\r
+        @listenTo(@author, 'click:author', @click_author)\r
+        @listenTo(@credits, 'click:credit:icon', @click_credit_icon)\r
+        @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
-    this.$el.append(@header.render().el)\r
     this\r
   \r
+  ready: () ->\r
+    this.$el.html('')\r
+    this.$el.append(@header.render().el)\r
+    this.$el.append(@author.render().el)\r
+    this.$el.append(@body.render().el)\r
+    this.$el.append(@credits.render().el)\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+  \r
+  click_show: () ->\r
+    window.router.navigate(@item.show_url(), true)\r
+  \r
+  click_author: () ->\r
+    window.router.navigate(@panel.author().show_url(), true)\r
+  \r
+  click_prof: () ->\r
+    window.router.navigate(@item.prof_url(), true)\r
+  \r
+  click_credit_icon: (item) ->\r
+    window.router.navigate(item.show_url(), true)\r
+  \r
diff --git a/app/assets/javascripts/views/layouts/default.js.coffee b/app/assets/javascripts/views/layouts/default.js.coffee
new file mode 100644 (file)
index 0000000..1a83ebc
--- /dev/null
@@ -0,0 +1,107 @@
+class Pettanr.Views.Layout\r
+class Pettanr.Views.Layout.Default extends Backbone.View\r
+  tagName: 'div'\r
+  \r
+  initialize: (options) ->\r
+    @operators = options.operators\r
+    @header = new Pettanr.Views.Layout.Default.Header()\r
+    @body = new Pettanr.Views.Layout.Default.Body()\r
+    @footer = new Pettanr.Views.Layout.Default.Footer()\r
+    @listenTo(@body, 'refresh', @refresh)\r
+    @listenTo(@body, 'refresh:top', @refresh_top)\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    this.$el.append(@header.render().el)\r
+    this.$el.append(@body.render().el)\r
+    this.$el.append(@footer.render().el)\r
+    this\r
+  \r
+class Pettanr.Views.Layout.Default.Header extends Backbone.View\r
+  tagName: 'div'\r
+  id: 'header'\r
+  \r
+  initialize: (options) ->\r
+    @operators = options.operators\r
+    @user = new Pettanr.User.Current()\r
+    @listenTo(@user, 'signin:success', @signin_success)\r
+    @listenTo(@user, 'signin:fail', @signin_fail)\r
+    # try getting current user\r
+    @user.save({})\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    this\r
+  \r
+  refresh: () ->\r
+  render_sign_in: () ->\r
+    view = new Pettanr.Views.Top.Account()\r
+    this.$el.html(@header.render().el)\r
+  \r
+  render_sign_in: () ->\r
+    view = new Pettanr.Views.Top.Index()\r
+    this.$el.html(@header.render().el)\r
+  \r
+  sign_in_success: () ->\r
+    author = new Pettanr.Author(@user.get('author')) if @user.get('author')\r
+    artist = new Pettanr.Artist(@user.get('artist')) if @user.get('artist')\r
+    window.operators = new Pettanr.Operator({\r
+      user: @user, \r
+      author: author, \r
+      artist: artist\r
+    })\r
+    @render_signin()\r
+    @trigger('sign_in:success')\r
+    @trigger('refresh:body', @view)\r
+  \r
+  sign_in_fail: () ->\r
+    @trigger('signin:fail')\r
+  \r
+  sign_out: () ->\r
+  \r
+  navigate: (url) ->\r
+    @trigger('navigate', url)\r
+  \r
+class Pettanr.Views.Layout.Default.Body extends Backbone.View\r
+  tagName: 'div'\r
+  id: 'body'\r
+  \r
+  initialize: (options) ->\r
+    @router = new Pettanr.Router()\r
+    @listenTo(@router, 'fire', @fire)\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    view = new Pettanr.Views.Top.Account()\r
+    this\r
+  \r
+  fire: (params) ->\r
+    c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
+    controller = new c\r
+    controller.params = params\r
+    @listenTo(controller, 'ready', @refresh)\r
+    @listenTo(controller, 'retitle', @retitle)\r
+    controller[params['action']]()\r
+  \r
+  retitle: (params, str = null) ->\r
+    t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
+    site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
+    $(document).attr('title', t + ' - ' + site_caption)\r
+  \r
+  refresh: (view) ->\r
+    @listenTo(view, 'navigate', @navigate)\r
+    this.$el.html(view.el)\r
+  \r
+  navigate: (url) ->\r
+    @router.navigate(url)\r
+  \r
+class Pettanr.Views.Layout.Default.Footer extends Backbone.View\r
+  tagName: 'div'\r
+  id: 'footer'\r
+  \r
+  initialize: (options) ->\r
+  \r
+  render: () ->\r
+    this.$el.html('')\r
+    this\r
+  \r
index 8784815..445afd0 100644 (file)
@@ -22,9 +22,49 @@ class Pettanr.Views.Speech.Show extends Backbone.View
       caption_url: caption_url,\r
       prof_url: prof_url\r
     })\r
+    @listenTo(this, 'ready', @ready)\r
+    @speech_balloon = @item.speech_balloon()\r
+    @speech_balloon.fetch({cache: true}).done =>\r
+      @panel = @speech_balloon.panel({with_elements: true})\r
+      @panel.fetch({cache: false}).done =>  # with elements\r
+        @author = new Pettanr.Views.Show.HeaderAuthor({item: @panel})\r
+        @body = new Pettanr.Views.Panel.Body({\r
+          panel: @panel,\r
+          operators: @operators,\r
+          spot: @item\r
+        })\r
+        @credits = new Pettanr.Views.Panel.ShowModule.Credits({\r
+          pictures: @panel.licensed_pictures()\r
+        })\r
+        @listenTo(@header, 'click:icon', @click_show)\r
+        @listenTo(@header, 'click:caption', @click_show)\r
+        @listenTo(@header, 'click:prof', @click_prof)\r
+        @listenTo(@author, 'click:author', @click_author)\r
+        @listenTo(@credits, 'click:credit:icon', @click_credit_icon)\r
+        @trigger('ready')\r
   \r
   render: () ->\r
     this.$el.html('')\r
-    this.$el.append(@header.render().el)\r
     this\r
   \r
+  ready: () ->\r
+    this.$el.html('')\r
+    this.$el.append(@header.render().el)\r
+    this.$el.append(@author.render().el)\r
+    this.$el.append(@body.render().el)\r
+    this.$el.append(@credits.render().el)\r
+    rb = new Tag.RowBreak()\r
+    this.$el.append(rb.render().el)\r
+  \r
+  click_show: () ->\r
+    window.router.navigate(@item.show_url(), true)\r
+  \r
+  click_author: () ->\r
+    window.router.navigate(@panel.author().show_url(), true)\r
+  \r
+  click_prof: () ->\r
+    window.router.navigate(@item.prof_url(), true)\r
+  \r
+  click_credit_icon: (item) ->\r
+    window.router.navigate(item.show_url(), true)\r
+  \r
index d21ad9f..40be1fa 100644 (file)
@@ -19,7 +19,7 @@ class Pettanr.Views.Top.Account extends Backbone.View
     if @artist_view\r
       this.$el.append(@artist_view.render().el)\r
     sign_out = new Tag.A({\r
-      attr: {href: '/'}, \r
+      attr: {href: '/users/sign_out'}, \r
       class_name: 'sign_out', \r
       content: 'sign out'\r
     })\r
@@ -28,10 +28,10 @@ class Pettanr.Views.Top.Account extends Backbone.View
     this\r
   \r
   author_click: () ->\r
-    window.router.navigate(@author_view.url(), true)\r
+    @trigger('navigate', @author_view.url())\r
   \r
   artist_click: () ->\r
-    window.router.navigate(@artist_view.url(), true)\r
+    @trigger('navigate', @artist_view.url())\r
   \r
   sign_out: () ->\r
     user = new Backbone.Model({id: 0})\r
index 2e46ddb..55a3218 100644 (file)
 </head>\r
 <body>\r
 \r
-<div id="header">\r
-</div>\r
-<div id="body">\r
 <div id="pettanr">\r
 </div>\r
-</div>\r
-<div id="footer">\r
-</div>\r
 <script type="text/template" id="header_template">\r
   <span id="logo">\r
     <a class="logo" href="/"><&= title &></a>\r