OSDN Git Service

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