vendor/assets/javascripts/iugu-ux/components/base_resource.js.coffee in iugu-ux-0.9.5 vs vendor/assets/javascripts/iugu-ux/components/base_resource.js.coffee in iugu-ux-0.9.8

- old
+ new

@@ -1,17 +1,82 @@ -class window.app.BaseResource extends Backbone.Model +class window.app.BaseResource extends Backbone.AssociatedModel virtual_attributes: [] + initialize: -> + _.each @relations, (relation) -> + if relation.type == "Many" + @generateDefaults relation + @generateTriggers relation + @generateAddFunction relation + @generateRemoveFunction relation + , @ + + super + + @ + + generateDefaults: (relation) -> + @set("#{relation.key}", []) unless @get("#{relation.key}") + + generateEvent: (on_event, key, context) -> + @get(key).on on_event, -> + @trigger "change:#{key}" + , context + + generateTriggers: (relation) -> + @generateEvent 'add', relation.key, @ + @generateEvent 'remove', relation.key, @ + + @on 'sync', -> + @generateEvent 'add', relation.key, @ + @generateEvent 'remove', relation.key, @ + , @ + + properCasedRelationName: (key) -> + key.substr(0,1).toUpperCase() + key.substr(1).toLowerCase() + + generateAddFunction: (relation) -> + @["addTo#{@properCasedRelationName relation.key}"] = -> + @get(relation.key).push new relation.relatedModel + + generateRemoveFunction: (relation) -> + @["removeFrom#{@properCasedRelationName relation.key}"] = (object) -> + @get(relation.key).destroy(object) + sync: (method, model, options) -> @configureAjax() Backbone.sync method, model, options toJSON: (options) -> - _.omit( _.clone( @attributes ), @virtual_attributes ) - + _.omit( _.clone( super(options) ), @virtual_attributes ) + url: -> base = super base = @appendLocaleInfo(base) + + save: (attributes, options) -> + if @isValid(true) + super null, @handleViewContext options + + handleViewContext: (options) -> + return options unless options.context + options.context.enableLoader() + options.wait = true + options.complete = (jqXHR, textStatus) -> + return options.context.disableLoader() unless textStatus == "success" + + if options.elastic_delay is on + setTimeout( -> + options.context.disableLoader() + options.context.redirectBack() + , 1000) + else + options.context.disableLoader() + options.context.redirectBack() + options + + destroy: (options) -> + super @handleViewContext options configureAjax: -> app.ajaxSetup headers: Authorization: $.base64.encode api_token