OSDN Git Service

fix: view
[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 Pettanr.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   remove_element: (element) ->\r
47     _.each @views, (view) =>\r
48       if view.element.cid == element.cid\r
49         view.remove()\r
50   \r
51   element_class: (element) ->\r
52     Pettanr.Views[element.singular()].Element\r
53   \r
54   disp: (value) ->\r
55     Pettanr.to_s(value) + 'px'\r
56   \r
57   style: () ->\r
58     {\r
59       'width': @disp(@panel.get('width')), \r
60       'height': @disp(@panel.get('height')), \r
61       'border-style': 'solid', \r
62       'border-width': @disp(@panel.get('border')), \r
63       'border-color': 'black', \r
64       'background-color': 'white'\r
65     }\r
66   \r
67 class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body\r
68   \r
69   initialize: (options) ->\r
70     super(options)\r
71     @listenTo(@panel, 'input:width', @restyle)\r
72     @listenTo(@panel, 'input:height', @restyle)\r
73     @listenTo(@panel, 'input:border', @restyle)\r
74     @listenTo(@panel, 'active', @active)\r
75     @listenTo(@panel, 'inactive', @inactive)\r
76     @listenTo(this, 'active', @active)\r
77     @listenTo(this, 'inactive', @inactive)\r
78   \r
79   render: () ->\r
80     super()\r
81     this.$el.resizable {\r
82       stop: (event, ui) =>\r
83         w = parseInt(this.$el.width())\r
84         h = parseInt(this.$el.height())\r
85         @panel.set({width: w, height: h}, {silent: true})\r
86         @panel.trigger('resize')\r
87       , autoHide: false\r
88     }\r
89     @inactive()\r
90     _this = this\r
91     this.$el.mouseover -> \r
92       _this.trigger('active')\r
93     this.$el.mouseout -> \r
94       _this.trigger('inactive')\r
95     this\r
96   \r
97   is_visible: () ->\r
98     true  # show everytime as editor\r
99   \r
100   active: () ->\r
101     n = @class_name\r
102     $('.ui-resizable-handle', this.el).map ->\r
103       if $(@).parent().hasClass(n)\r
104         $(@).css('display', 'block')\r
105   \r
106   inactive: () ->\r
107     n = @class_name\r
108     $('.ui-resizable-handle', this.el).map ->\r
109       if $(@).parent().hasClass(n)\r
110         $(@).css('display', 'none')\r
111   \r
112   element_class: (element) ->\r
113     Pettanr.Views[element.singular()].Element.Edit\r
114   \r
115 class Pettanr.Views.Panel.Footer extends Pettanr.View\r
116   tagName: 'table'\r
117   className: 'no-border'\r
118   \r
119   initialize: (options) ->\r
120     @panel = options.panel\r
121   \r
122   render: () ->\r
123     this.$el.html('')\r
124     @panel.get_parent('author', this, {\r
125       success: (@author) =>\r
126         panel_face_button = @panel.mini_face_button({\r
127           context: this, \r
128           click: () ->\r
129             @trigger('click:panel')\r
130         })\r
131         author_face_button = @author.mini_face_button({\r
132           context: this, \r
133           click: () ->\r
134             @trigger('click:author')\r
135         })\r
136         this.$el.append(panel_face_button.render().el)\r
137         this.$el.append(author_face_button.render().el)\r
138         this.$el.append(\r
139           Pettanr.AppHelper.distance_of_time_in_words_to_now(@panel.get('updated_at'))\r
140         )\r
141         if Pettanr.cache.operators.is_author()\r
142           inspire_button = Pettanr.View.mini_face_button(\r
143             @panel, \r
144             Pettanr.View.Image.icon_inspire_file(), \r
145             {\r
146               context: this, \r
147               click: () =>\r
148                 @trigger('click:inspire')\r
149             }\r
150           )\r
151           this.$el.append(inspire_icon.render().el)\r
152         if @panel.is_own()\r
153           edit_button = new Pettanr.View.Button.ItemAction(@panel, 'edit', {\r
154             context: this, \r
155             click: () =>\r
156               @trigger('click:edit')\r
157           })\r
158           this.$el.append(edit_button.render().el)\r
159         })\r
160     this\r
161   \r