OSDN Git Service

aff7337cc6c01492a281b4504c11052d3397a698
[pettanr/pettanr.git] / app / assets / javascripts / views / layout.js.coffee
1 class Pettanr.Views.Layout\r
2 class Pettanr.Views.Layout.Base extends Backbone.View\r
3   \r
4 class Pettanr.Views.Layout.Sns extends Pettanr.Views.Layout.Base\r
5   className: 'layout-sns'\r
6   \r
7   initialize: (options) ->\r
8     @operators = new Pettanr.Operator({})\r
9     @global_router = new Pettanr.GlobalRouter({operators: @operators})\r
10     @listenTo(@global_router, 'go', @body_get)\r
11     @gate = new Pettanr.BeforeUnload()\r
12     @header = new Pettanr.Views.Layout.Sns.Header({parent: this})\r
13     @history = new Pettanr.Views.History({parent: this})\r
14     @listenTo(@history, 'http_get', @body_http_get)\r
15     @listenTo(@history, 'get', @body_get)\r
16     @body = new Pettanr.Views.Layout.Sns.Body({parent: this})\r
17     @footer = new Pettanr.Views.Layout.Sns.Footer({parent: this})\r
18   \r
19   render: () ->\r
20     this.$el.html('')\r
21     this.$el.append(@header.render().el)\r
22     this.$el.append(@history.render().el)\r
23     rb = new Tag.RowBreak()\r
24     this.$el.append(rb.render().el)\r
25     this.$el.append(@body.render().el)\r
26     this.$el.append(@footer.render().el)\r
27     this\r
28   \r
29   init_operators: (user) ->\r
30     author = new Pettanr.Author(user.get('author')) if user.get('author')\r
31     artist = new Pettanr.Artist(user.get('artist')) if user.get('artist')\r
32     @operators.init({\r
33       user: user, \r
34       author: author, \r
35       artist: artist\r
36     })\r
37     @global_router.operators = @operators\r
38   \r
39   reset_operators: () ->\r
40     @operators.init({\r
41       user: null, \r
42       author: null, \r
43       artist: null\r
44     })\r
45     @global_router.operators = @operators\r
46   \r
47   start: () ->\r
48     # check current user signed in?\r
49     proxy = new Pettanr.Proxy({operators: @operators})\r
50     @listenTo(proxy, 'redirect', @test_redirect)\r
51     # @listenTo(proxy, 'success', @test_ok)\r
52     @listenTo(proxy, 'fail', @test_ng)\r
53     @listenTo(proxy, 'sign_in', @sign_in)\r
54     proxy.http_post('users/test')\r
55   \r
56   test_ok: (user, response) ->\r
57     @history.enable()\r
58   \r
59   test_ng: (response) ->\r
60     @history.disable()\r
61     @head_http_get('users/guest')\r
62     @body_http_get('user_sessions/new')\r
63   \r
64   test_redirect: (url) ->\r
65     proxy = @getter_proxy()\r
66     @stopListening(proxy, 'done')  # ignore global routing\r
67     @stopListening(proxy, 'title', @push_history)  # ignore push_history\r
68     proxy.http_get(url, null)\r
69   \r
70   sign_in: (user) ->\r
71     @init_operators(user)\r
72     @head_http_get('users/account')\r
73     @history.enable()\r
74   \r
75   sign_out: () ->\r
76     @reset_operators()\r
77     @head_http_get('users/guest')\r
78     @history.disable()\r
79   \r
80   head_http_get: (url) ->\r
81     proxy = new Pettanr.Proxy({operators: @operators})\r
82     @listenTo(proxy, 'ready', @head_ready)\r
83     proxy.http_get(url, null)\r
84   \r
85   head_ready: (view) ->\r
86     @listenTo(view, 'http_get', @body_http_get)\r
87     @listenTo(view, 'http_post', @body_http_post)\r
88     @header.refresh(view)\r
89   \r
90   getter_proxy: () ->\r
91     proxy = new Pettanr.Proxy({operators: @operators, gate: @gate})\r
92     @listenTo(proxy, 'ready', @body_ready)\r
93     @listenTo(proxy, 'title', @body_title)\r
94     @listenTo(proxy, 'title', @push_history)\r
95     @listenTo(proxy, 'done', @body_done)\r
96     @listenTo(proxy, 'lock', @body_lock)\r
97     @listenTo(proxy, 'unlock', @body_unlock)\r
98     proxy\r
99   \r
100   body_http_get: (url, form) ->\r
101     @getter_proxy().http_get(url, form)\r
102   \r
103   body_get: (params, form) ->\r
104     @getter_proxy().get(params, form)\r
105   \r
106   body_ready: (view) ->\r
107     @listenTo(view, 'http_get', @body_http_get)\r
108     @listenTo(view, 'http_post', @body_http_post)\r
109     @body.refresh(view)\r
110   \r
111   body_done: (params) ->\r
112     url = Pettanr.params_to_url(params)\r
113     @global_router.navigate(url, {trigger: false})\r
114   \r
115   push_history: (params, str = null) ->\r
116     @history.push(params, str)\r
117   \r
118   body_title: (params, str = null) ->\r
119     t = str || I18n.t(params['controller'] + '.' + params['action'] + '.title')\r
120     site_caption = _.escape(Manifest.manifest().magic_numbers.profile.users.caption)\r
121     $(document).attr('title', t + ' - ' + site_caption)\r
122   \r
123   poster_proxy: () ->\r
124     proxy = new Pettanr.Proxy({operators: @operators})\r
125     @listenTo(proxy, 'success', @body_success)\r
126     @listenTo(proxy, 'fail', @body_fail)\r
127     @listenTo(proxy, 'redirect', @body_redirect)\r
128     @listenTo(proxy, 'sign_in', @sign_in)\r
129     @listenTo(proxy, 'sign_out', @sign_out)\r
130     @listenTo(proxy, 'unlock', @body_unlock)\r
131     proxy\r
132   \r
133   body_http_post: (url, form) ->\r
134     @poster_proxy().http_post(url, form)\r
135   \r
136   body_post: (params, form) ->\r
137     @poster_proxy().post(params, form)\r
138   \r
139   body_success: (url) ->\r
140     \r
141   \r
142   body_fail: (url) ->\r
143     \r
144   \r
145   body_redirect: (url) ->\r
146     @global_router.navigate(url)\r
147     @getter_proxy().http_get(url)\r
148   \r
149   body_lock: (params, form) ->\r
150     @gate.lock(params, form)\r
151   \r
152   body_unlock: (params, form) ->\r
153     @gate.unlock()\r
154   \r
155 class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base\r
156   className: 'layout-blog'\r
157   \r
158   start: () ->\r
159     # initial page\r
160     @router.navigate('users/sign_in')\r
161     @header.navigate('users/guest')\r
162     @body.navigate('top/demo')\r
163   \r
164   sign_in_fail: (user, response) ->\r
165     view = new Pettanr.Views.UserSeeeion.New({\r
166       operators: @operators\r
167     })\r
168     view.render()\r
169     @body.navigate('top/demo')\r
170   \r
171   header_class: () ->\r
172     Pettanr.Views.Layout.Blog.Header\r
173   \r
174   body_class: () ->\r
175     Pettanr.Views.Layout.Blog.Body\r
176   \r
177   footer_class: () ->\r
178     Pettanr.Views.Layout.Blog.Footer\r
179   \r