OSDN Git Service

d7aaf5662d6c021e96522a6b89c36408b0c2615f
[pettanr/pettanr.git] / app / assets / javascripts / views / panel_pictures / element.js.coffee
1 class Pettanr.Views.PanelPicture.Element extends Pettanr.View\r
2   tagName: 'div'\r
3   className: 'pettanr-panel-picture-wrapper'\r
4   \r
5   initialize: (options) ->\r
6     @element = options.element\r
7     @root = options.root\r
8     @spot = options.spot\r
9   \r
10   clear: () ->\r
11     this\r
12   \r
13   render: () ->\r
14     @element.get_parent('picture', this, {\r
15       success: (@picture) =>\r
16         @init_picture()\r
17         img_class = @img_class()\r
18         @img = new img_class({\r
19           wrapper: this,\r
20           element: @element,\r
21           picture: @picture,\r
22           spot: @spot\r
23         })\r
24         @restyle()\r
25         this.$el.html(@img.render().el)\r
26     })\r
27     this\r
28   \r
29   init_picture: () ->\r
30   \r
31   restyle: () ->\r
32     attr = {style: Pettanr.to_style(@style())}\r
33     this.$el.attr(attr)\r
34   \r
35   add_element: () ->\r
36     null\r
37   \r
38   style: () ->\r
39     {\r
40       'top': Pettanr.to_s(@element.get('y')) + 'px',\r
41       'left': Pettanr.to_s(@element.get('x')) + 'px',\r
42       'z-index': @element.get('z'),\r
43       'position': 'absolute'\r
44     }\r
45   \r
46   element_class: (element) ->\r
47     Pettanr.Views[element.singular()].Element\r
48   \r
49   img_class: () ->\r
50     Pettanr.Views.PanelPicture.Element.Img\r
51   \r
52 class Pettanr.Views.PanelPicture.Element.Img extends Pettanr.View\r
53   tagName: 'img'\r
54   \r
55   initialize: (options) ->\r
56     @wrapper = options.wrapper\r
57     @element = options.element\r
58     @picture = options.picture\r
59     @spot = options.spot\r
60   \r
61   clear: () ->\r
62     this\r
63   \r
64   render: () ->\r
65     this.$el.html('')\r
66     @restyle()\r
67     this\r
68   \r
69   restyle: () ->\r
70     this.$el.attr(@attr(@spot))\r
71   \r
72   attr: (spot = null, opacity = 20) ->\r
73     style = {}\r
74     if spot and spot.constructor == @element.constructor and spot.get('id') != @element.get('id')\r
75       @element.merge_opacity(style, opacity)\r
76     {\r
77       vPicture: @element.get('id'), \r
78       src: @element.r_url(@picture), \r
79       width: Pettanr.to_s(Math.abs(@element.get('width'))) + 'px', \r
80       height: Pettanr.to_s(Math.abs(@element.get('height'))) + 'px', \r
81       alt: @element.get('caption'), \r
82       style: Pettanr.to_style(style)\r
83     }\r
84   \r
85 class Pettanr.Views.PanelPicture.Element.Edit extends Pettanr.Views.PanelPicture.Element\r
86   \r
87   initialize: (options) ->\r
88     super(options)\r
89     @listenTo(@element, 'input:x', @restyle)\r
90     @listenTo(@element, 'input:y', @restyle)\r
91     @listenTo(@element, 'sort', @restyle)\r
92     @listenTo(@element, 'active', @active)\r
93     @listenTo(@element, 'inactive', @inactive)\r
94   \r
95   init_picture: () ->\r
96     img = @img\r
97     wrapper = this\r
98     this.$el.draggable {\r
99       stop: (event, ui) ->\r
100         left = img.$el.parent().position().left + wrapper.$el.position().left\r
101         top = img.$el.parent().position().top + wrapper.$el.position().top\r
102         elm.set({x: parseInt(left), y: parseInt(top)}, {silent: true})\r
103         elm.trigger('move')\r
104     }\r
105     elm = @element\r
106     @img.$el.resizable {\r
107       stop: (event, ui) ->\r
108         resize_div = ui.element\r
109         panel_picture_div = wrapper.$el\r
110         \r
111         resize_div.css('top', '0px')\r
112         resize_div.css('left', '0px')\r
113         top = panel_picture_div.position().top\r
114         if ui.originalPosition.top != ui.position.top\r
115           top += ui.position.top\r
116           #@element.set({y: Math.floor(top)}, {silent: true})\r
117           panel_picture_div.css('top', top.toString() + 'px')\r
118         left = panel_picture_div.position().left\r
119         if ui.originalPosition.left != ui.position.left\r
120           left += ui.position.left\r
121           #@element.set({y: leftp)}, {silent: true})\r
122           panel_picture_div.css('left', left.toString() + 'px')\r
123         width = if elm.get('width') < 0\r
124           -ui.size.width\r
125         else\r
126           ui.size.width\r
127         height = if elm.get('height') < 0\r
128           -ui.size.height\r
129         else\r
130           ui.size.height\r
131         elm.set({\r
132           x: Math.floor(left), \r
133           y: Math.floor(top), \r
134           width: width, \r
135           height: height\r
136         }, {silent: true})\r
137         elm.trigger('resize')\r
138       handles: 'all',\r
139       autoHide: true\r
140     }\r
141     this\r
142   \r
143   active: () ->\r
144     $('.ui-resizable-handle', this.el).map ->\r
145       $(@).css('display', 'block')\r
146   \r
147   inactive: () ->\r
148     $('.ui-resizable-handle', this.el).map ->\r
149       $(@).css('display', 'none')\r
150   \r
151   element_class: (element) ->\r
152     Pettanr.Views[element.singular()].Element.Edit\r
153   \r
154   img_class: () ->\r
155     Pettanr.Views.PanelPicture.Element.Img.Edit\r
156   \r
157 class Pettanr.Views.PanelPicture.Element.Img.Edit extends Pettanr.Views.PanelPicture.Element.Img\r
158   \r
159   initialize: (options) ->\r
160     super(options)\r
161     @listenTo(@element, 'input:width', @restyle)\r
162     @listenTo(@element, 'input:height', @restyle)\r
163   \r
164   render: () ->\r
165     super()\r
166   \r
167   restyle: () ->\r
168     super()\r
169     resize_div = this.$el.parent()\r
170     width = this.$el.css('width')\r
171     height = this.$el.css('height')\r
172     resize_div.width(width)\r
173     resize_div.height(height)\r
174   \r