class Pettanr.Views.History extends Pettanr.View tagName: 'div' className: 'history' initialize: (options) -> @power = true @root = new Pettanr.Views.History.Root({}) @list = new Pettanr.Views.History.List({}) @listenTo(@root, 'click', @click_root) @listenTo(@list, 'click:log', @click_log) render: () -> this.$el.html('') return if !@power this.$el.append(@root.render().el) this.$el.append(@list.render().el) this enable: () -> @power = true @render() disable: () -> @power = false @render() # push history # options: str:page title push: (params, options) -> return if !@power @list.push(params, options) click_root: () -> @trigger('http_get', 'folders/root') click_log: (log) -> @trigger('get', log.params, null) class Pettanr.Views.History.List extends Pettanr.View tagName: 'div' className: 'history-list' initialize: (options) -> @max_logs = options.max_logs || 10 @buttons = [] render: () -> this.$el.html('') _.each @buttons, (button) => this.$el.append(button.render().el) this # options: str:page title push: (params, options) -> _.last(@buttons).release() if !_.isEmpty(@buttons) if @buttons.length > @max_logs b = @buttons.shift() b.remove() button = new Pettanr.Views.History.List.Log({ params: params, selected: true, options: options }) @listenTo(button, 'click', @click_log) @buttons.push(button) this.$el.append(button.render().el) click_log: (log) -> @trigger('click:log', log) class Pettanr.Views.History.List.Log extends Pettanr.View tagName: 'div' className: 'history-list-log' initialize: (options) -> @params = options.params @selected = options.selected @options = options.options # get caption and icon @item_name = Manifest.manifest().singularize(@params['controller']) @controller = Manifest.manifest().controllers[@params['controller']] @action = @controller.actions[@params['action']] @model = Manifest.manifest().models[@action.item_name].classify() icon = new Pettanr.Image.Icon({item: @model, title: @options, half: true}) @button = new Tag.A({ attr: {href: '/' + @action.url(@params)}, content: icon.render().el }) @listenTo(@button, 'click', @click) render: () -> this.$el.html('') this.$el.append(@button.render().el) @refresh() this refresh: () -> border = if @selected '3px' else '0px' this.$el.css('border-width', border) catch: () -> @selected = true @refresh() release: () -> @selected = false @refresh() click: () -> @trigger('click', this) class Pettanr.Views.History.Root extends Pettanr.View tagName: 'div' initialize: (options) -> icon = new Pettanr.View.Minicon(Pettanr.View.Image.icon_root_file()) @button = new Pettanr.View.Button('/', icon.render().el, { context: this, click: () => @trigger('click') }) render: () -> this.$el.html('') this.$el.append(@button.render().el) this