OSDN Git Service

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