_.extend(this, Backbone.Events)\r
\r
@new2: (params, form, operators, gate) ->\r
- c = Pettanr[Pettanr.camelize(params['controller']) + 'Controller']\r
+ c = @controller_by_name(params['controller'])\r
new c(params, form, operators, gate)\r
\r
+ @controller_by_name: (name) ->\r
+ Pettanr[Pettanr.camelize(name) + 'Controller']\r
+ \r
set_model: () ->\r
@my_controller = Manifest.manifest().controllers[@params['controller']]\r
@my_action = @my_controller.actions[@params['action']]\r
@trigger('redirect', '/home/configure')\r
@trigger('success', model, response)\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@trigger('redirect', '/home/configure')\r
@trigger('success', model, response)\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
\r
show_html: () -> \r
if @item.is_remote()\r
- proxy = new Pettanr.Proxy({operators: @operators})\r
- @listenTo(proxy, 'ready', @refresh)\r
- @listenTo(proxy, 'title', @title)\r
- @listenTo(proxy, 'done', @done)\r
- proxy.http_get(@item.remote_url())\r
+ @trigger('other', @item.remote_url())\r
else\r
@children_html()\r
\r
done: (params) ->\r
@trigger('done', params)\r
\r
+ deny: (params, form, safe_url) ->\r
+ @trigger('deny', params, form, safe_url)\r
+ \r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@form_edit()\r
@trigger('done', @params)\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
@listenTo(@item, 'destroy:fail', @destroy_fail)\r
@item.destroy()\r
\r
+ @is_deny_action_on_picker: (params) ->\r
+ switch params['action']\r
+ when 'new'\r
+ true\r
+ when 'edit'\r
+ true\r
+ else\r
+ false\r
+ \r
this.$el.append(view.el)\r
\r
getter_proxy: () ->\r
- proxy = new Pettanr.Proxy({operators: @operators})\r
+ proxy = new Pettanr.PickerProxy({operators: @operators})\r
@listenTo(proxy, 'ready', @ready)\r
@listenTo(proxy, 'title', @title)\r
@listenTo(proxy, 'title', @push_history)\r
@listenTo(proxy, 'done', @done)\r
- @listenTo(proxy, 'lock', @lock)\r
+ @listenTo(proxy, 'deny', @deny)\r
proxy\r
\r
http_get: (url, form) ->\r
done: (params) ->\r
this.$el.dialog('open')\r
\r
- lock: (params) ->\r
- console.log('_lock')\r
+ deny: (params, form, safe_url) ->\r
+ @getter_proxy().http_get(safe_url, params, form)\r
\r
push_history: (params, str = null) ->\r
@history.push(params, str)\r
proxy = new Pettanr.Proxy({operators: @filer().operators})\r
@listenTo(proxy, 'success', @remove_success)\r
@listenTo(proxy, 'fail', @remove_fail)\r
+ @listenTo(proxy, 'deny', @remove_deny)\r
proxy.http_post(@item.destroy_url())\r
\r
remove_success: () ->\r
remove_fail: () ->\r
@trigger('remove:fail')\r
\r
+ remove_deny: () ->\r
+ \r
@is_sns: () ->\r
Manifest.manifest().magic_numbers.run_mode != 0\r
\r
- @before_filter: (action_name, filter_action_names) ->\r
- _.contains(filter_action_names, action_name)\r
- \r
class Pettanr.AppHelper\r
@manifest: () ->\r
Manifest.manifest\r
class Pettanr.ActionFilter\r
\r
- @suply_default: (reader, resource_reader, user, author) ->\r
+ # access block\r
+ # return sign in form if invalid url\r
+ # return null if url is valid\r
+ @test: (params, operators) ->\r
+ return @guest_url() if @is_deny('reader', params, operators) or @is_deny('resource_reader', params, operators) or @is_deny('user', params, operators)\r
+ return @new_author_url() if @is_deny('author', params, operators)\r
+ return @new_artist_url() if @is_deny('artist', params, operators)\r
+ null\r
+ \r
+ @filters: () ->\r
+ if Pettanr.is_sns()\r
+ @sns_filters()\r
+ else\r
+ @blog_filters()\r
+ \r
+ @my_filters: (role, params) ->\r
+ f = @filters()\r
+ c = f[params['controller']] || {}\r
+ r = c[role]\r
+ r\r
+ \r
+ @before_filter: (action_name, filter_action_names) ->\r
+ _.contains(filter_action_names, action_name)\r
+ \r
+ # return false if allow\r
+ # return true if deny\r
+ @is_deny: (role, params, operators) ->\r
+ n = 'is_' + role\r
+ if not operators[n]() # ex: operators.is_user()\r
+ filter = @my_filters(role, params)\r
+ if @before_filter(params['action'], filter)\r
+ return true\r
+ false\r
+ \r
+ @guest_url: () ->\r
+ 'user_seeeions/new'\r
+ \r
+ @new_author_url: () ->\r
+ 'authors/new'\r
+ \r
+ @new_artist_url: () ->\r
+ 'artists/new'\r
+ \r
+ @suply_default: (reader, resource_reader, user, author, artist) ->\r
+ author_filter = if _.isFunction(author)\r
+ author()\r
+ else\r
+ _.union(@default_author_filters, author)\r
+ artist_filter = if _.isFunction(artist)\r
+ artist()\r
+ else\r
+ _.union(@default_artist_filters, artist)\r
{\r
reader: _.union(@default_reader_filters, reader),\r
resource_reader: _.union(@default_resource_reader_filters, resource_reader),\r
user: _.union(@default_user_filters, user),\r
- author: _.union(@default_author_filters, author)\r
+ author: author_filter,\r
+ artist: artist_filter\r
}\r
\r
@default_reader_filters = ['index', 'show']\r
@default_resource_reader_filters = []\r
@default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
@default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
+ @default_artist_filters = []\r
\r
@sns_filters: () ->\r
- default_reader_filters = ['index', 'show']\r
- default_resource_reader_filters = []\r
- default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
- default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
{\r
folders: @suply_default(\r
['root', 'watch'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
scrolls: @suply_default(\r
['play', 'by_panel', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
scroll_panels: @suply_default(\r
['by_panel', 'by_scroll', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
comics: @suply_default(\r
['play', 'by_story', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
comic_stories: @suply_default(\r
['by_story', 'by_comic', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
stories: @suply_default(\r
['play', 'by_comic', 'by_sheet', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
story_sheets: @suply_default(\r
['by_story', 'by_sheet', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
sheets: @suply_default(\r
['play', 'by_story', 'by_panel', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
sheet_panels: @suply_default(\r
['by_panel', 'by_sheet', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
panels: @suply_default(\r
['by_scroll', 'by_sheet', 'by_author', 'by_speech_balloon_template'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
panel_pictures: @suply_default(\r
['by_panel', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
speech_balloons: @suply_default(\r
['by_panel', 'by_author', 'by_speech_balloon_template'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
speeches: @suply_default(\r
['by_author', 'by_speech_balloon', 'by_speech_balloon_template', 'by_writing_format'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
balloons: @suply_default(\r
[], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
ground_pictures: @suply_default(\r
['by_panel', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
ground_colors: @suply_default(\r
['by_panel', 'by_author'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
original_pictures: @suply_default(\r
['history'], \r
[], \r
[], \r
- []\r
+ [], \r
+ ['index', 'new', 'create', 'edit', 'update', 'destroy']\r
),\r
pictures: @suply_default(\r
['credit', 'search'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
resource_pictures: @suply_default(\r
['credit', 'by_original_picture', 'by_license_group', 'by_license', 'by_artist'], \r
[], \r
[], \r
- []\r
+ [], \r
+ ['new', 'create', 'edit', 'update', 'destroy']\r
),\r
speech_balloon_templates: @suply_default(\r
['by_panel', 'by_system_picture'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
writing_formats: @suply_default(\r
['by_system_picture'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
license_groups: @suply_default(\r
['by_resource_picture'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
licenses: @suply_default(\r
['by_license_group', 'by_system_picture'], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
authors: @suply_default(\r
[], \r
[], \r
[], \r
+ () ->\r
+ ['edit', 'update', 'destroy']\r
+ , \r
[]\r
),\r
artists: @suply_default(\r
[], \r
[], \r
[], \r
- []\r
+ [], \r
+ () ->\r
+ ['edit', 'update', 'destroy']\r
),\r
system_pictures: @suply_default(\r
[], \r
[], \r
[], \r
+ [], \r
[]\r
),\r
home: @suply_default(\r
'panels', 'panel_pictures', 'speech_balloons', 'balloons', 'speeches', 'ground_pictures', 'ground_colors'\r
], \r
[], \r
+ [], \r
[]\r
),\r
}\r
local_router: (parsed_callback) ->\r
local_router = new Pettanr.LocalRouter({operators: @operators})\r
@listenTo(local_router, 'go', parsed_callback)\r
- @listenTo(local_router, 'deny', @deny)\r
- @listenTo(local_router, 'cancel', @cancel)\r
local_router\r
\r
http_get: (url, form) ->\r
\r
get: (params, form) ->\r
return if !@test(params, form)\r
+ return if !@filter(params, form)\r
controller = Pettanr.AppController.new2(params, form, @operators, @gate)\r
@listenTo(controller, 'ready', @ready)\r
@listenTo(controller, 'title', @title)\r
@listenTo(controller, 'done', @done)\r
+ @listenTo(controller, 'other', @other)\r
+ @listenTo(controller, 'deny', @remote_folder_deny)\r
@listenTo(controller, 'lock', @lock)\r
@listenTo(controller, 'unlock', @unlock)\r
action_name = params['action']\r
# blocking\r
# back button event\r
Backbone.history.navigate('/' + @gate.url(), {trigger: false})\r
+ @trigger('cancel', params, form)\r
false\r
\r
+ filter: (params, form) ->\r
+ if safe_url = Pettanr.ActionFilter.test(params, @operators)\r
+ @trigger('deny', params, form, safe_url)\r
+ false\r
+ else\r
+ true\r
+ \r
ready: (view) ->\r
@trigger('ready', view)\r
\r
done: (params) ->\r
@trigger('done', params)\r
\r
+ other: (url) ->\r
+ @local_router(@get).navigate(url)\r
+ \r
lock: (params, form) ->\r
@trigger('lock', params, form)\r
\r
deny: (params, form, safe_url) ->\r
@trigger('deny', params, form, safe_url)\r
\r
- cancel: () ->\r
- @trigger('cancel')\r
+ remote_folder_deny: (params, form, safe_url) ->\r
+ @trigger('deny', params, form, safe_url)\r
\r
http_post: (url, form) ->\r
@local_router(@post).navigate(url, form)\r
sign_out: () ->\r
@trigger('sign_out')\r
\r
+class Pettanr.PickerProxy extends Pettanr.Proxy\r
+ \r
+ get: (params, form) ->\r
+ if @is_deny(params)\r
+ alert("editor can't open on pick window")\r
+ else\r
+ super(params, form)\r
+ \r
+ is_deny: (params) ->\r
+ c = Pettanr.AppController.controller_by_name(params['controller'])\r
+ return false if !c['is_deny_action_on_picker']\r
+ c.is_deny_action_on_picker(params)\r
+ \r
else\r
{}\r
\r
- filters: () ->\r
- if Pettanr.is_sns()\r
- Pettanr.ActionFilter.sns_filters()\r
- else\r
- Pettanr.ActionFilter.blog_filters()\r
- \r
- my_filters: (role, params) ->\r
- f = @filters()\r
- c = f[params['controller']] || {}\r
- r = c[role]\r
- r\r
- \r
- # return false if allow\r
- # return true if deny\r
- authenticate: (role, params) ->\r
- n = 'is_' + role\r
- if not @operators[n]() # ex: operators.is_user()\r
- filter = @my_filters(role, params)\r
- if Pettanr.before_filter(params['action'], filter)\r
- return true\r
- false\r
- \r
- # access block\r
- # return sign in form if invalid url\r
- # return null if url is valid\r
- block: (params) ->\r
- return @guest_url() if @authenticate('reader', params) or @authenticate('resource_reader', params) or @authenticate('user', params)\r
- return @new_author_url() if @authenticate('author', params)\r
- return @new_artist_url() if @authenticate('artist', params)\r
- null\r
- \r
- guest_url: () ->\r
- 'user_seeeions/new'\r
- \r
- new_author_url: () ->\r
- 'authors/new'\r
- \r
- new_artist_url: () ->\r
- 'artists/new'\r
- \r
# render App(render:all)\r
home: () ->\r
params = @home_params()\r
# ex) scrolls/3/edit\r
c_i_a: (controller, id, action, query_string, form) ->\r
params = @c_i_a_params(controller, id, action, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, form, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
c_i_a_params: (controller, id, action, query_string) ->\r
params = @parse_query_string(query_string)\r
# ex) scrolls/3\r
c_i: (controller, id, query_string, form) ->\r
params = @c_i_params(controller, id, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, form, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
c_i_params: (controller, id, query_string) ->\r
params = @parse_query_string(query_string)\r
# ex) scrolls\r
c: (controller, query_string, form) ->\r
params = @c_params(controller, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, form, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
c_params: (controller, query_string) ->\r
params = @parse_query_string(query_string)\r
\r
top_a: (action, query_string, form) ->\r
params = @users_a_params(action, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
top_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
\r
user_sessions_a: (action, query_string, form) ->\r
params = @user_sessions_a_params(action, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
user_sessions_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
\r
users_a: (action, query_string, form) ->\r
params = @users_a_params(action, query_string)\r
- if safe_url = @block(params)\r
- @trigger('deny', params, safe_url)\r
- else\r
- @trigger('go', params, form)\r
+ @trigger('go', params, form)\r
\r
users_a_params: (action, query_string) ->\r
params = @parse_query_string(query_string)\r
@listenTo(proxy, 'title', @body_title)\r
@listenTo(proxy, 'title', @push_history)\r
@listenTo(proxy, 'done', @body_done)\r
+ @listenTo(proxy, 'deny', @body_deny)\r
@listenTo(proxy, 'lock', @body_lock)\r
@listenTo(proxy, 'unlock', @body_unlock)\r
+ @listenTo(proxy, 'cancel', @cancel)\r
proxy\r
\r
body_http_get: (url, form) ->\r
@listenTo(proxy, 'redirect', @body_redirect)\r
@listenTo(proxy, 'sign_in', @sign_in)\r
@listenTo(proxy, 'sign_out', @sign_out)\r
+ @listenTo(proxy, 'deny', @body_deny)\r
@listenTo(proxy, 'unlock', @body_unlock)\r
proxy\r
\r
@global_router.navigate(url)\r
@getter_proxy().http_get(url)\r
\r
+ body_deny: (params, form, safe_url) ->\r
+ @getter_proxy().http_get(safe_url, params, form)\r
+ \r
body_lock: (params, form) ->\r
@gate.lock(params, form)\r
\r
body_unlock: (params, form) ->\r
@gate.unlock()\r
\r
+ cancel: (params, form) ->\r
+ \r
class Pettanr.Views.Layout.Blog extends Pettanr.Views.Layout.Base\r
className: 'layout-blog'\r
\r