OSDN Git Service

fix: editor canceler for picker
[pettanr/pettanr.git] / app / assets / javascripts / pettanr / proxy.js.coffee
1 class Pettanr.Proxy\r
2   \r
3   constructor: (options) ->\r
4     @operators = options.operators\r
5     @gate = options.gate\r
6     _.extend(this, Backbone.Events)\r
7   \r
8   local_router: (parsed_callback) ->\r
9     local_router = new Pettanr.LocalRouter({operators: @operators})\r
10     @listenTo(local_router, 'go', parsed_callback)\r
11     local_router\r
12   \r
13   http_get: (url, form) ->\r
14     @local_router(@get).navigate(url, form)\r
15   \r
16   get: (params, form) ->\r
17     return if !@test(params, form)\r
18     return if !@filter(params, form)\r
19     controller = Pettanr.AppController.new2(params, form, @operators, @gate)\r
20     @listenTo(controller, 'ready', @ready)\r
21     @listenTo(controller, 'title', @title)\r
22     @listenTo(controller, 'done', @done)\r
23     @listenTo(controller, 'other', @other)\r
24     @listenTo(controller, 'deny', @remote_folder_deny)\r
25     @listenTo(controller, 'lock', @lock)\r
26     @listenTo(controller, 'unlock', @unlock)\r
27     action_name = params['action']\r
28     controller[action_name]()\r
29   \r
30   test: (params, form) ->\r
31     return true if !@gate\r
32     switch @gate.test()\r
33       when 0\r
34         # free\r
35         true\r
36       when 1\r
37         # agree move\r
38         @gate.unlock()\r
39         true\r
40       else\r
41         # blocking\r
42         # back button event\r
43         Backbone.history.navigate('/' + @gate.url(), {trigger: false})\r
44         @trigger('cancel', params, form)\r
45         false\r
46   \r
47   filter: (params, form) ->\r
48     if safe_url = Pettanr.ActionFilter.test(params, @operators)\r
49       @trigger('deny', params, form, safe_url)\r
50       false\r
51     else\r
52       true\r
53   \r
54   ready: (view) ->\r
55     @trigger('ready', view)\r
56   \r
57   title: (params, str) ->\r
58     @trigger('title', params, str)\r
59   \r
60   done: (params) ->\r
61     @trigger('done', params)\r
62   \r
63   other: (url) ->\r
64     @local_router(@get).navigate(url)\r
65   \r
66   lock: (params, form) ->\r
67     @trigger('lock', params, form)\r
68   \r
69   unlock: (params, form) ->\r
70     @trigger('unlock', params, form)\r
71   \r
72   deny: (params, form, safe_url) ->\r
73     @trigger('deny', params, form, safe_url)\r
74   \r
75   remote_folder_deny: (params, form, safe_url) ->\r
76     @trigger('deny', params, form, safe_url)\r
77   \r
78   http_post: (url, form) ->\r
79     @local_router(@post).navigate(url, form)\r
80   \r
81   post: (params, form) ->\r
82     controller = Pettanr.AppController.new2(params, form, @operators)\r
83     @listenTo(controller, 'success', @success)\r
84     @listenTo(controller, 'fail', @fail)\r
85     @listenTo(controller, 'redirect', @redirect)\r
86     @listenTo(controller, 'sign_in', @sign_in)\r
87     @listenTo(controller, 'sign_out', @sign_out)\r
88     @listenTo(controller, 'lock', @lock)\r
89     @listenTo(controller, 'unlock', @unlock)\r
90     action_name = params['action']\r
91     controller[action_name]()\r
92   \r
93   success: (model, response) ->\r
94     @trigger('success', model, response)\r
95   \r
96   fail: (response) ->\r
97     @trigger('fail', response)\r
98   \r
99   redirect: (new_url) ->\r
100     @trigger('redirect', new_url)\r
101   \r
102   sign_in: (user) ->\r
103     @trigger('sign_in', user)\r
104   \r
105   sign_out: () ->\r
106     @trigger('sign_out')\r
107   \r
108 class Pettanr.PickerProxy extends Pettanr.Proxy\r
109   \r
110   get: (params, form) ->\r
111     if @is_deny(params)\r
112       alert("editor can't open on pick window")\r
113     else\r
114       super(params, form)\r
115   \r
116   is_deny: (params) ->\r
117     c = Pettanr.AppController.controller_by_name(params['controller'])\r
118     return false if !c['is_deny_action_on_picker']\r
119     c.is_deny_action_on_picker(params)\r
120   \r