@Backbone.app.module “Views”, (Views, App, Backbone, Marionette, $, _) ->

_remove = Marionette.View::remove

_.extend Marionette.View::,

  addOpacityWrapper: (init = true) ->
    @$el.toggleWrapper
      className: "opacity"
    , init

  setInstancePropertiesFor: (args...) ->
    for key, val of _.pick(@options, args...)
      @[key] = val

  remove: (args...) ->
    console.log "removing", @ if App.environment == 'development'
    if @model?.isDestroyed?()

      wrapper = @$el.toggleWrapper
        className: "opacity"
      # backgroundColor: "#FFECEC"

      wrapper.fadeOut 100, ->
        $(@).remove()

      @$el.fadeOut 100, =>
        _remove.apply @, args
    else
      _remove.apply @, args

  templateHelpers: ->

    linkTo: (name, url, options = {}) ->
      _.defaults options,
        external: false

      url = "#" + url unless options.external

      "<a href='#{url}'>#{@escape(name)}</a>"

    render_partial: ( path, options = {} ) ->
      # add the leading underscore (like rails-partials)
      path = path.split('/')
      path[ path.length - 1 ] = '_' + path[ path.length - 1 ]
      path = path.join('/')
      # render and return the partial if existing
      try
        JST["backbone/app/templates/#{ path }"]( options )
      catch error
        if App.environment != 'production'
          "<p class='error'>Sorry, there is no partial named '#{ path }'.</p>"
        else
          console.log('error in _view')
          ''