OSDN Git Service

add: success inspire
[pettanr/pettanr.git] / app / assets / javascripts / views / panels / body.js.coffee
1 # panel: panel item\r
2 # spot: no opacity element\r
3 class Pettanr.Views.Panel.Body extends Backbone.View\r
4   tagName: 'div'\r
5   \r
6   initialize: (options) ->\r
7     @panel = options.panel\r
8     @spot = options.spot\r
9     @class_name = 'pettanr-comic-panel'\r
10     @views = []\r
11     if @is_visible()\r
12       _.each @panel.zorderd_elements(), (element) =>\r
13         @add_element(element)\r
14   \r
15   render: () ->\r
16     this.$el.addClass(@class_name)\r
17     @restyle()\r
18     #this.$el.html('')\r
19     if not @is_visible()\r
20       tag = new Tag.Div({\r
21         content: I18n.t('panels.hidden'), \r
22         class_name: 'hidden'\r
23       })\r
24       this.$el.html(tag.render().el)\r
25     this\r
26   \r
27   restyle: () ->\r
28     attr = {style: Pettanr.to_style(@style())}\r
29     this.$el.attr(attr)\r
30   \r
31   is_visible: () ->\r
32     @panel.is_visible()\r
33   \r
34   render_element: (index) ->\r
35   \r
36   add_element: (element) ->\r
37     index = element.get('z') - 1\r
38     c = @element_class(element)\r
39     view = new c({element: element, root: @panel, spot: @spot})\r
40     @views.splice(index, 0, view)\r
41     if @is_visible()\r
42       this.$el.append(view.clear().el)\r
43       view.render()\r
44     view\r
45   \r
46   element_class: (element) ->\r
47     Pettanr.Views[element.singular()].Element\r
48   \r
49   disp: (value) ->\r
50     Pettanr.to_s(value) + 'px'\r
51   \r
52   style: () ->\r
53     {\r
54       'width': @disp(@panel.get('width')), \r
55       'height': @disp(@panel.get('height')), \r
56       'border-style': 'solid', \r
57       'border-width': @disp(@panel.get('border')), \r
58       'border-color': 'black', \r
59       'background-color': 'white'\r
60     }\r
61   \r
62 class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body\r
63   \r
64   initialize: (options) ->\r
65     super(options)\r
66     @listenTo(@panel, 'input:width', @restyle)\r
67     @listenTo(@panel, 'input:height', @restyle)\r
68     @listenTo(@panel, 'input:border', @restyle)\r
69     @listenTo(@panel, 'active', @active)\r
70     @listenTo(@panel, 'inactive', @inactive)\r
71     @listenTo(this, 'active', @active)\r
72     @listenTo(this, 'inactive', @inactive)\r
73   \r
74   render: () ->\r
75     super()\r
76     this.$el.resizable {\r
77       stop: (event, ui) =>\r
78         w = parseInt(this.$el.width())\r
79         h = parseInt(this.$el.height())\r
80         @panel.set({width: w, height: h}, {silent: true})\r
81         @panel.trigger('resize')\r
82       , autoHide: false\r
83     }\r
84     @inactive()\r
85     _this = this\r
86     this.$el.mouseover -> \r
87       _this.trigger('active')\r
88     this.$el.mouseout -> \r
89       _this.trigger('inactive')\r
90     this\r
91   \r
92   is_visible: () ->\r
93     true  # show everytime as editor\r
94   \r
95   active: () ->\r
96     n = @class_name\r
97     $('.ui-resizable-handle', this.el).map ->\r
98       if $(@).parent().hasClass(n)\r
99         $(@).css('display', 'block')\r
100   \r
101   inactive: () ->\r
102     n = @class_name\r
103     $('.ui-resizable-handle', this.el).map ->\r
104       if $(@).parent().hasClass(n)\r
105         $(@).css('display', 'none')\r
106   \r
107   element_class: (element) ->\r
108     Pettanr.Views[element.singular()].Element.Edit\r
109   \r
110 class Pettanr.Views.Panel.Footer extends Backbone.View\r
111   tagName: 'table'\r
112   className: 'no-border'\r
113   \r
114   initialize: (options) ->\r
115     @panel = options.panel\r
116   \r
117   render: () ->\r
118     this.$el.html('')\r
119     retriever = @panel.author()\r
120     @listenTo(retriever, 'retrieve', @retrieve_author)\r
121     retriever.retrieve()\r
122     this\r
123   \r
124   retrieve_author: (@author) -> \r
125     @panel_icon = new Pettanr.Views.Panel.Icon({item: @panel, half: true})\r
126     @author_icon = new Pettanr.Views.Author.Icon({item: @author, half: true})\r
127     @inspire_icon = new Pettanr.Views.Show.LinkedInspireIcon({item: @panel, half: true})\r
128     @edit_button = new Pettanr.Views.Show.LinkedEditButton({item: @panel})\r
129     @listenTo(@panel_icon, 'click', @click_panel)\r
130     @listenTo(@author_icon, 'click', @click_author)\r
131     @listenTo(@edit_button, 'click', @click_edit)\r
132     @listenTo(@inspire_icon, 'click', @click_inspire)\r
133     this.$el.append(@panel_icon.render().el)\r
134     this.$el.append(@author_icon.render().el)\r
135     this.$el.append(\r
136       Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at'))\r
137     )\r
138     if Pettanr.cache.operators.is_author()\r
139       this.$el.append(@inspire_icon.render().el)\r
140     if @panel.is_own()\r
141       this.$el.append(@edit_button.render().el)\r
142   \r
143   click_panel: () ->\r
144     @trigger('click:panel')\r
145   \r
146   click_author: () ->\r
147     @trigger('click:author')\r
148   \r
149   click_edit: () ->\r
150     @trigger('click:edit')\r
151   \r
152   click_inspire: () ->\r
153     @trigger('click:inspire')\r
154   \r