OSDN Git Service

fix:pp link
[pettanr/pettanr.git] / app / assets / javascripts / views / panels / body.js.coffee
index b47f12f..9ae783e 100644 (file)
 # panel: panel item\r
-# operators: operators\r
 # spot: no opacity element\r
-class Pettanr.Views.Panel.Body extends Backbone.View\r
+class Pettanr.Views.Panel.Body extends Pettanr.View\r
   tagName: 'div'\r
-  className: 'pettanr-comic-panel'\r
   \r
   initialize: (options) ->\r
     @panel = options.panel\r
-    @operators = options.operators\r
     @spot = options.spot\r
+    @class_name = 'pettanr-comic-panel'\r
+    @views = []\r
+    if @is_visible()\r
+      _.each @panel.zorderd_elements(), (element) =>\r
+        @add_element(element)\r
   \r
   render: () ->\r
-    attr = {style: Pettanr.to_style(@style())}\r
-    this.$el.attr(attr)\r
-    if @panel.is_visible(@operators)\r
-      this.$el.html('')\r
-      _this = this\r
-      _.each @panel.scenario_elements(), (element) ->\r
-        c = Pettanr[element.singular()].Element\r
-        tag = new c({element: element, root: _this.panel, spot: _this.spot})\r
-        _this.$el.append(tag.render().el)\r
-    else\r
-      tag = new Pettanr.Tag.Div({\r
+    this.$el.addClass(@class_name)\r
+    @restyle()\r
+    #this.$el.html('')\r
+    if not @is_visible()\r
+      tag = new Tag.Div({\r
         content: I18n.t('panels.hidden'), \r
         class_name: 'hidden'\r
       })\r
       this.$el.html(tag.render().el)\r
     this\r
   \r
+  restyle: () ->\r
+    attr = {style: Pettanr.to_style(@style())}\r
+    this.$el.attr(attr)\r
+  \r
+  is_visible: () ->\r
+    @panel.is_visible()\r
+  \r
+  render_element: (index) ->\r
+  \r
+  add_element: (element) ->\r
+    index = element.get('z') - 1\r
+    c = @element_class(element)\r
+    view = new c({element: element, root: @panel, spot: @spot})\r
+    @add_event(view)\r
+    @views.splice(index, 0, view)\r
+    if @is_visible()\r
+      this.$el.append(view.render().el)\r
+    view\r
+  \r
+  add_event: (view) ->\r
+    @listenTo(view, 'http_get', @http_get)\r
+  \r
+  remove_element: (element) ->\r
+    _.each @views, (view) =>\r
+      if view.element.cid == element.cid\r
+        view.remove()\r
+  \r
+  element_class: (element) ->\r
+    Pettanr.Views[element.singular()].Element\r
+  \r
+  disp: (value) ->\r
+    Pettanr.to_s(value) + 'px'\r
+  \r
   style: () ->\r
     {\r
-      'width': Pettanr.to_s(@panel.get('width')) + 'px'\r
-      'height': Pettanr.to_s(@panel.get('height')) + 'px'\r
+      'width': @disp(@panel.get('width'))\r
+      'height': @disp(@panel.get('height'))\r
       'border-style': 'solid', \r
-      'border-width': Pettanr.to_s(@panel.get('border')) + 'px'\r
+      'border-width': @disp(@panel.get('border'))\r
       'border-color': 'black', \r
       'background-color': 'white'\r
     }\r
+  \r
+  http_get: (url) ->\r
+    @trigger('http_get', url)\r
+  \r
+class Pettanr.Views.Panel.Body.Edit extends Pettanr.Views.Panel.Body\r
+  \r
+  initialize: (options) ->\r
+    super(options)\r
+    @listenTo(@panel, 'input:width', @restyle)\r
+    @listenTo(@panel, 'input:height', @restyle)\r
+    @listenTo(@panel, 'input:border', @restyle)\r
+    @listenTo(@panel, 'active', @active)\r
+    @listenTo(@panel, 'inactive', @inactive)\r
+    @listenTo(this, 'active', @active)\r
+    @listenTo(this, 'inactive', @inactive)\r
+  \r
+  render: () ->\r
+    super()\r
+    this.$el.resizable {\r
+      stop: (event, ui) =>\r
+        w = parseInt(this.$el.width())\r
+        h = parseInt(this.$el.height())\r
+        @panel.set({width: w, height: h}, {silent: true})\r
+        @panel.trigger('resize')\r
+      , autoHide: false\r
+    }\r
+    @inactive()\r
+    _this = this\r
+    this.$el.mouseover -> \r
+      _this.trigger('active')\r
+    this.$el.mouseout -> \r
+      _this.trigger('inactive')\r
+    this\r
+  \r
+  is_visible: () ->\r
+    true  # show everytime as editor\r
+  \r
+  active: () ->\r
+    n = @class_name\r
+    $('.ui-resizable-handle', this.el).map ->\r
+      if $(@).parent().hasClass(n)\r
+        $(@).css('display', 'block')\r
+  \r
+  inactive: () ->\r
+    n = @class_name\r
+    $('.ui-resizable-handle', this.el).map ->\r
+      if $(@).parent().hasClass(n)\r
+        $(@).css('display', 'none')\r
+  \r
+  element_class: (element) ->\r
+    Pettanr.Views[element.singular()].Element.Edit\r
+  \r
+  # stop listen link msg\r
+  add_event: (view) ->\r
+  \r