#@dock.add_new_tab()\r
@body.on('panel:resize', @panel_resize)\r
@listenTo(@dock, 'put', @put)\r
+ Pettanr.History.lock_url = @panel.edit_url()\r
\r
add_element: (element) ->\r
console.log(element)\r
rb = new Tag.RowBreak()\r
this.$el.append(rb.render().el)\r
@dock.$el.tabs()\r
- window.editor = this # enable leave cancel flag on unsave\r
this\r
\r
panel_resize: () ->\r
\r
quit: () ->\r
@dialog.$el.dialog('destroy')\r
- window.editor = null # release editor\r
+ Pettanr.History.lock_url = null # release editor\r
\r
put: () ->\r
success = (data, textStatus) =>\r
- window.editor = null # release editor\r
+ Pettanr.History.lock_url = null # release editor\r
@dock.valid()\r
error = (data, textStatus) =>\r
@dock.invalid()\r
ready_caption: (caption) ->\r
el = if @has_link()\r
linked_caption = new Tag.A({\r
- attr: {href: @link.url()}, \r
+ attr: {href: '/' + @link.url()}, \r
content: caption\r
})\r
@listenTo(linked_caption, 'click', @click)\r
id: @item.get('id'),\r
format: 'html'\r
}\r
- '/' + mani.url(params)\r
+ mani.url(params)\r
\r
default_user_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
default_author_filters = ['new', 'create', 'edit', 'update', 'destroy']\r
{\r
+ 'folders': {\r
+ reader: _.union(default_reader_filters, ['root', 'watch']),\r
+ resource_reader: _.union(default_resource_reader_filters, []),\r
+ user: _.union(default_user_filters, []),\r
+ author: _.union(default_author_filters, [])\r
+ },\r
'scrolls': {\r
reader: _.union(default_reader_filters, ['play', 'by_panel', 'by_author']),\r
resource_reader: _.union(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': {\r
+ reader: _.union(default_reader_filters, []),\r
+ resource_reader: _.union(default_resource_reader_filters, []),\r
+ user: _.union(default_user_filters, []),\r
+ author: _.union(default_author_filters, [])\r
+ },\r
'scrolls': {\r
user: _.union(default_user_filters, []),\r
author: _.union(default_author_filters, [])\r
return true if @admin\r
false\r
\r
+ is_author: () ->\r
+ return true if @author\r
+ false\r
+ \r
+ is_artist: () ->\r
+ return true if @artist\r
+ false\r
+ \r
+class Pettanr.History extends Backbone.History\r
+ @lock_url = null\r
+ checkUrl: (e) ->\r
+ if Pettanr.History.lock_url\r
+ if confirm('leave? edit data unsaved')\r
+ Pettanr.History.lock_url = null\r
+ else\r
+ @history.pushState({}, document.title, '/' + Pettanr.History.lock_url)\r
+ return false\r
+ super(e)\r
+ \r
+Backbone.history = new Pettanr.History\r
class Pettanr.Router extends Backbone.Router\r
\r
+ initialize: (options) ->\r
+ super()\r
+ @operators = options.operators\r
+ \r
parse_query_string: (query_string) ->\r
params = {}\r
if query_string\r
\r
url_to_params: (url) ->\r
if route = @find_route(url)\r
+ args = @_extractParameters(route.regex, url)\r
n = route.callback # callback function name by string\r
this[n + '_params'].apply(this, args) # call to c_i_a_params, c_i_params, c_params\r
+ else\r
+ {}\r
\r
# render App(render:all)\r
home: () ->\r
@route(r.route, r.callback)\r
\r
navigate: (fragment, options) ->\r
- if window.editor\r
+ if Pettanr.History.lock_url\r
if confirm('leave? edit data unsaved')\r
- window.editor.quit()\r
- super(fragment, options)\r
+ Pettanr.History.lock_url = null\r
else\r
- false\r
- else\r
- super(fragment, options)\r
+ return false\r
+ super(fragment, options)\r
\r
class Pettanr.LocalRouter extends Pettanr.Router\r
\r
r = c[role]\r
r\r
\r
+ # return false if allow\r
+ # return true if deny\r
authenticate: (role, params, operators) ->\r
- if not operators[('is_' + role)]() # ex: operators.is_user()\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
\r
initialize: () ->\r
super()\r
- _.extend(this, Pettanr.RouterFilter)\r
+ _.extend(this, Pettanr.RouterFilter.prototype)\r
\r
- navigate: (url, operators) ->\r
+ navigate: (url, options, operators) ->\r
safe_url = @block(url, operators) || url\r
- super(safe_url)\r
+ super(safe_url, options)\r
\r
# access block\r
# return sign in form if invalid url\r
add_listener: (controller, self) ->\r
self.listenTo(controller, 'ready', self.refresh)\r
self.listenTo(controller, 'retitle', self.retitle)\r
- self.listenTo(controller, 'sign_in:success', self.sign_in_success)\r
- self.listenTo(controller, 'sign_in:fail', self.sign_in_fail)\r
- self.listenTo(controller, 'sign_out:success', self.sign_out_success)\r
- self.listenTo(controller, 'sign_out:fail', self.sign_out_fail)\r
self.listenTo(controller, 'block', self.block)\r
self.listenTo(controller, 'redirect', self.redirect_to)\r
\r
_.extend(this, Pettanr.Views.Layout.ControllerManager.prototype)\r
@operators = new Pettanr.Operator({})\r
# router for refresh body\r
- @global_router = new Pettanr.GlobalRouter()\r
+ @global_router = new Pettanr.BodyRouter()\r
# router for refresh body. but not replace url\r
@local_router = new Pettanr.LocalRouter()\r
# router for refresh header\r
start: () ->\r
# check current user signed in?\r
# callback sign_in_success from users controller if signed in\r
- @local_router.navigate('users/test')\r
+ @test()\r
+ \r
+ test: () ->\r
+ @user = new Pettanr.User.Session()\r
+ @listenTo(@user, 'sign_in:success', @sign_in_success)\r
+ @listenTo(@user, 'sign_in:fail', @sign_in_fail)\r
+ @user.save({})\r
\r
fire_for_header: (params) ->\r
@fire(params, @refresh_header)\r
@listenTo(@header, 'navigate', @header_navigate)\r
@listenTo(@header, 'sign_in', @sign_in)\r
@listenTo(@header, 'sign_out', @sign_out)\r
- @listenTo(@header, 'sign_in:success', @sign_in_success)\r
- @listenTo(@header, 'sign_in:fail', @sign_in_fail)\r
- @listenTo(@header, 'sign_out:success', @sign_out_success)\r
- @listenTo(@header, 'sign_out:fail', @sign_out_fail)\r
@listenTo(@body, 'navigate', @body_navigate)\r
@listenTo(@body, 'retitle', @retitle)\r
@listenTo(@body, 'sign_in', @sign_in)\r
@body.fire({controller: 'user_sessions', action: 'new'})\r
\r
sign_out: () ->\r
- @header.fire({controller: 'users', action: 'sign_out'})\r
+ @user = new Pettanr.User.Session()\r
+ @listenTo(@user, 'sign_out:success', @sign_out_success)\r
+ @listenTo(@user, 'sign_out:fail', @sign_out_fail)\r
+ @user.destroy()\r
\r
sign_out_success: (user, response) ->\r
super(user, response)\r
- @global_router.navigate('')\r
+ @global_router.navigate('', {trigger: false}, @operators)\r
## navigate users/guest\r
## callback from fire to refresh_header\r
@header.fire({controller: 'users', action: 'guest'})\r
block: () ->\r
super()\r
@header_router.navigate('users/guest')\r
- @local_router.navigate('user_seeeions/new')\r
+ @body.fire({controller: 'user_sessions', action: 'new'})\r
\r
header_navigate: (url) ->\r
- @global_router.navigate(url, true)\r
+ @global_router.navigate(url, {trigger: true}, @operators)\r
\r
body_navigate: (url) ->\r
- @global_router.navigate(url, {trigger: false})\r
+ @global_router.navigate(url, {trigger: false}, @operators)\r
\r
header_class: () ->\r
Pettanr.Views.Layout.Sns.Header\r
sign_in: (attr) ->\r
@trigger('sign_in', attr)\r
\r
- sign_in_success: (user, response) ->\r
- @trigger('sign_in:success', user, response)\r
- \r
- sign_in_fail: (user, response) ->\r
- @trigger('sign_in:fail', user, response)\r
- \r
sign_out: () ->\r
@trigger('sign_out')\r
\r
- sign_out_success: (user, response) ->\r
- @trigger('sign_out:success', user, response)\r
- \r
- sign_out_fail: (user, response) ->\r
- @trigger('sign_out:fail', user, response)\r
- \r
retitle: (params, str = null) ->\r
@trigger('retitle', params, str = null)\r
\r
sign_in: (attr) ->\r
@trigger('sign_in', attr)\r
\r
- sign_in_success: (user, response) ->\r
- @trigger('sign_in:success', user, response)\r
- \r
- sign_in_fail: (user, response) ->\r
- @trigger('sign_in:fail', user, response)\r
- \r
sign_out: () ->\r
@trigger('sign_out')\r
\r
- sign_out_success: (user, response) ->\r
- @trigger('sign_out:success', user, response)\r
- \r
- sign_out_fail: (user, response) ->\r
- @trigger('sign_out:fail', user, response)\r
- \r
retitle: (params, str = null) ->\r
@trigger('retitle', params, str = null)\r
\r