//= require ./locmare/profiler/association/belongs_to
//= require ./locmare/profiler/association/has_many
//= require ./locmare/profiler/association/has_one
+//= require ./locmare/form
+//= require ./locmare/form/field
+//= require ./locmare/form/extend_field
+//= require ./locmare/form/field/label
+//= require ./locmare/form/field/label/label
+//= require ./locmare/form/field/tag
+//= require ./locmare/form/field/tag/base
+//= require ./locmare/form/field/tag/text
+//= require ./locmare/form/field/tag/number
+//= require ./locmare/form/field/tag/text_area
+//= require ./locmare/form/field/tag/select
+//= require ./locmare/form/field/tag/hidden
+//= require ./locmare/form/field/helper
+//= require ./locmare/form/field/helper/base
+//= require ./locmare/form/field/helper/size
+//= require ./locmare/form/field/helper/tail_angle
+//= require ./locmare/form/field/helper/color
+//= require ./locmare/form/field/helper/popup
//= require ./peta/peta
//= require ./peta/item
//= require ./peta/owner
--- /dev/null
+# form_name_with_sub_form\r
+# item: editing item\r
+# mounted: true/false\r
+# submit: string / 'submit'\r
+# operators: \r
+class Locmare.FormBase extends Backbone.View\r
+ tagName: 'div'\r
+ \r
+ initialize: (options) ->\r
+ @form_name_with_sub_form = options.form_name_with_sub_form\r
+ @item = options.item\r
+ @mounted = options.mounted\r
+ @submit = options.submit\r
+ @operators = options.operators\r
+ if /\./.test(form_name_with_sub_form)\r
+ @sub_form_names = form_name_with_sub_form.split('.')\r
+ @form_name = @sub_form_names.last\r
+ @root_form_name = @sub_form_names.shift\r
+ else\r
+ @sub_form_names = []\r
+ @form_name = @form_name_with_sub_form\r
+ @root_form_name = @form_name\r
+ @manifest = LocalManifest.manifest().forms[@form_name]\r
+ @fields = {}\r
+ \r
+ fold_extend_settings: (params) ->\r
+ @item.my_class().fold_extend_settings params[@item.item_name()]\r
+ \r
+ sub_form_name: () ->\r
+ r = _.map @sub_form_names, (name) ->\r
+ '[' + name + '_attributes' + ']'\r
+ r.join()\r
+ \r
+ form_field_name: (field_name) ->\r
+ @root_form_name + @sub_form_name() + '[' + field_name + ']'\r
+ \r
+ image_dir: () ->\r
+ '/images/'\r
+ \r
+class Locmare.Form extends Locmare.FormBase\r
+ initialize: (options) ->\r
+ super(options)\r
+ @submit = options.submit\r
+ @item.boosts 'post'\r
+ @init_fields()\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @error_explanation = null\r
+ @div_fields = new Locmare.FormModule.Fields({\r
+ fields: @fields\r
+ })\r
+ #this.$el.append(@error_explanation.render().el) if not @error_explanation\r
+ this.$el.append(@div_fields.render().el)\r
+ if @submit\r
+ c = @submit_class()\r
+ @div_submit = new c({form: this})\r
+ this.$el.append(@div_submit.render().el)\r
+ this\r
+ \r
+ init_fields: () ->\r
+ _this = this\r
+ _.each _this.manifest.field_names, (field_name) ->\r
+ field_manifest = _this.manifest.fields[field_name]\r
+ boost_name = _this.item.my_class().find_boost_name(field_name)\r
+ extend_model = if boost_name \r
+ _this.item.boosters[boost_name].extend_model()\r
+ else\r
+ null\r
+ if boost_name and extend_model # field is extend setting AND template has a extend model\r
+ extend_form_name = @item.boosters[boost_name].model_name\r
+ extend_item = @item.boosters[boost_name].extend_item\r
+ _this.fields[field_name] = new Locmare.ExtendForm({\r
+ parent: _this, \r
+ form_name: extend_form_name, \r
+ item: extend_item, \r
+ mounted: _this.mounted, \r
+ operators: _this.operators, \r
+ field_name: field_name\r
+ })\r
+ else\r
+ _this.fields[field_name] = new Locmare.FormModule.Field({\r
+ form: _this, \r
+ field_name: field_name, \r
+ field_manifest: field_manifest\r
+ })\r
+ \r
+ submit_name: () ->\r
+ if @item.isNew()\r
+ @item.table_name() + '.submit.new'\r
+ else\r
+ @item.table_name() + '.submit.edit'\r
+ \r
+ submits: () ->\r
+ {\r
+ default: Locmare.FormModule.SubmitModule.Default\r
+ }\r
+ \r
+ submit_class: () ->\r
+ @submits()[@submit]\r
+ \r
+class Locmare.ExtendForm extends Locmare.FormBase\r
+ \r
+ initialize: (options) ->\r
+ @parent = options.parent\r
+ @form_name = options.form_name\r
+ @item = options.item\r
+ @mounted = options.mounted\r
+ @operators = options.operators\r
+ @field_name = options.field_name\r
+ super(@form_name, @item, @mounted, @operators)\r
+ @field = new Locmare.FormModule.Field({\r
+ form: @parent, \r
+ field_name: @field_name, \r
+ field_manifest: @parent.manifest.fields[@field_name]\r
+ })\r
+ @label = @field.label\r
+ @init_fields()\r
+ \r
+ init_fields: () ->\r
+ _this = this\r
+ _.each _this.manifest.field_names, (field_name) ->\r
+ field_manifest = _this.manifest.fields[field_name]\r
+ _this.fields[field_name] = new Locmare.FormModule.ExtendField({\r
+ form: _this, \r
+ field_name: field_name, \r
+ field_manifest: field_manifest\r
+ })\r
+ \r
+ form_field_name: (field_name) ->\r
+ # parent is field\r
+ @parent.form_field_name(field_name) + '[' + field_name + ']'\r
+ \r
+class Locmare.FormModule\r
+class Locmare.FormModule.Fields extends Backbone.View\r
+ tagName: 'div'\r
+ className: 'fields'\r
+ \r
+ initialize: (options) ->\r
+ @fields = options.fields\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ _this = this\r
+ _.each @fields, (field) ->\r
+ _this.$el.append(field.render().el)\r
+ this\r
+ \r
+class Locmare.FormModule.SubmitModule\r
+class Locmare.FormModule.SubmitModule.Default extends Backbone.View\r
+ tagName: 'div'\r
+ className: 'actions'\r
+ \r
+ initialize: (options) ->\r
+ @form = options.form\r
+ \r
+ render: () ->\r
+ this.$el.html('<input type="submit" name="commit" class="submit" value="' + @form.submit_name() + '"></input>')\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.ExtendField extends Backbone.View\r
+ tagName: 'div'\r
+ className: 'extend-field'\r
+ \r
+ initialize: (options) ->\r
+ @form = options.form\r
+ @field_name = options.field_name\r
+ @field_manifest = options.field_manifest\r
+ @label = Locmare.FormModule.FieldModule.LabelFactory.factory this, @field_manifest.label\r
+ @tag = Locmare.FormModule.FieldModule.TagFactory.factory this, @field_manifest.tag\r
+ @helpers = {}\r
+ _this = this\r
+ _.each @field_manifest.helpers, (helper_manifest, helper_name) ->\r
+ _this.helpers[helper_name] = Locmare.FormModule.FieldModule.HelperFactory.factory(_this, helper_manifest)\r
+ @rb = @row_break()\r
+ @options = {'data-model': @field_manifest.model_name}\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this.$el.append(@label.render().el) if not @label.hidden()\r
+ this.$el.append(@tag.render().el)\r
+ _this = this\r
+ _.each @helpers, (helper) ->\r
+ _this.$el.append(helper.render().el)\r
+ this.$el.append(@rb.render().el) if @rb\r
+ this\r
+ \r
+ mounted: () ->\r
+ if @form.mounted\r
+ 0\r
+ else\r
+ 1\r
+ \r
+ mount_option: () ->\r
+ {'mount': @mounted()}\r
+ \r
+ item: () ->\r
+ @form.item\r
+ \r
+ value: () ->\r
+ @item().get(@field_manifest.column_name)\r
+ \r
+ options: (tag_options = {}) ->\r
+ tag_options\r
+ \r
+ form_field_name: () ->\r
+ @form.form_field_name @field_name\r
+ \r
+ form_name: () ->\r
+ @form.form_name\r
+ \r
+ row_break: () ->\r
+ if @field_manifest.row_break\r
+ new Pettanr.Tag.Div({\r
+ content: null,\r
+ class_name: 'row_break'\r
+ })\r
+ else\r
+ null\r
+ \r
--- /dev/null
+class Locmare.FormModule.Field extends Backbone.View\r
+ tagName: 'div'\r
+ className: 'field'\r
+ \r
+ initialize: (options) ->\r
+ @form = options.form\r
+ @field_name = options.field_name\r
+ @field_manifest = options.field_manifest\r
+ @label = Locmare.FormModule.FieldModule.LabelFactory.factory this, @field_manifest.label\r
+ @tag = Locmare.FormModule.FieldModule.TagFactory.factory this, @field_manifest.tag\r
+ @helpers = {}\r
+ _this = this\r
+ _.each @field_manifest.helpers, (helper_manifest, helper_name) ->\r
+ _this.helpers[helper_name] = Locmare.FormModule.FieldModule.HelperFactory.factory(_this, helper_manifest)\r
+ @rb = @row_break()\r
+ @options = {'data-model': @field_manifest.form_name}\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this.$el.append(@label.render().el) if not @label.hidden()\r
+ this.$el.append(@tag.render().el)\r
+ _this = this\r
+ _.each @helpers, (helper) ->\r
+ _this.$el.append(helper.render().el)\r
+ this.$el.append(@rb.render().el) if @rb\r
+ this\r
+ \r
+ mounted: () ->\r
+ if @form.mounted\r
+ 0\r
+ else\r
+ 1\r
+ \r
+ mount_option: () ->\r
+ {'mount': @mounted()}\r
+ \r
+ item: () ->\r
+ @form.item\r
+ \r
+ value: () ->\r
+ @item().get(@field_manifest.column_name)\r
+ \r
+ options: (tag_options = {}) ->\r
+ tag_options\r
+ \r
+ form_field_name: () ->\r
+ @form.form_field_name @field_name\r
+ \r
+ form_name: () ->\r
+ @form.form_name\r
+ \r
+ row_break: () ->\r
+ if @field_manifest.row_break\r
+ new Pettanr.Tag.Div({\r
+ content: null,\r
+ class_name: 'row_break'\r
+ })\r
+ else\r
+ null\r
+ \r
+class Locmare.FormModule.FieldModule\r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperFactory\r
+ @types: () ->\r
+ {\r
+ size: Locmare.FormModule.FieldModule.HelperModule.Size, \r
+ tail_angle: Locmare.FormModule.FieldModule.HelperModule.TailAngle, \r
+ color: Locmare.FormModule.FieldModule.HelperModule.Color, \r
+ popup: Locmare.FormModule.FieldModule.HelperModule.Popup\r
+ }\r
+ \r
+ @factory: (field, my_manifest) ->\r
+ type = my_manifest.type\r
+ my_class = @types()[type]\r
+ console.log "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > helper > #{type}\n" if not my_class\r
+ new my_class({field: field, my_manifest: my_manifest})\r
+ \r
+class Locmare.FormModule.FieldModule.HelperModule\r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperModule.Base extends Backbone.View\r
+ tagName: 'input'\r
+ \r
+ initialize: (options) ->\r
+ @field = options.field\r
+ @tag_manifest = options.tag_manifest\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperModule.Color extends Locmare.FormModule.FieldModule.HelperModule.Base\r
+ tagName: 'input'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperModule.Popup extends Locmare.FormModule.FieldModule.HelperModule.Base\r
+ tagName: 'textarea'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperModule.Size extends Locmare.FormModule.FieldModule.HelperModule.Base\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.HelperModule.TailAngle extends Locmare.FormModule.FieldModule.HelperModule.Base\r
+ tagName: 'select'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.LabelFactory\r
+ @types: () ->\r
+ {\r
+ default: Locmare.FormModule.FieldModule.LabelModule.Default, \r
+ none: Locmare.FormModule.FieldModule.LabelModule.None\r
+ }\r
+ \r
+ @factory: (field, my_manifest) ->\r
+ type = my_manifest.type\r
+ my_class = @types()[type]\r
+ console.log "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > label > #{type}\n" if not my_class\r
+ new my_class({field: field, my_manifest: my_manifest})\r
+ \r
+class Locmare.FormModule.FieldModule.LabelModule\r
--- /dev/null
+class Locmare.FormModule.FieldModule.LabelModule.Base extends Backbone.View\r
+ tagName: 'label'\r
+ \r
+ initialize: (options) ->\r
+ @field = options.field\r
+ @label_manifest = options.label_manifest\r
+ @rb = @row_break()\r
+ \r
+ form: () ->\r
+ @field.form\r
+ \r
+ manifest: () ->\r
+ @form().manifest\r
+ \r
+ form_name: () ->\r
+ @form().form_name\r
+ \r
+ item: () ->\r
+ @form().item\r
+ \r
+ item_name: () ->\r
+ @label_manifest.model_name()\r
+ \r
+ column_name: () ->\r
+ @label_manifest.column_name()\r
+ \r
+ hidden: () ->\r
+ false\r
+ \r
+ row_break: () ->\r
+ if @label_manifest.row_break\r
+ '<br>'\r
+ else\r
+ null\r
+ \r
+class Locmare.FormModule.FieldModule.LabelModule.Default extends Locmare.FormModule.FieldModule.LabelModule.Base\r
+ \r
+ label_name: () ->\r
+ 'activerecord.attributes.' + @item_name() + '.' + @column_name()\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ this.$el.append(label_name())\r
+ this.$el.append(@rb) if @rb\r
+ this\r
+ \r
+class Locmare.FormModule.FieldModule.LabelModule.None extends Locmare.FormModule.FieldModule.LabelModule.Base\r
+ \r
+ hidden: () ->\r
+ true\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagFactory\r
+ @types: () ->\r
+ {\r
+ text: Locmare.FormModule.FieldModule.TagModule.TextTag, \r
+ number: Locmare.FormModule.FieldModule.TagModule.NumberTag, \r
+ text_area: Locmare.FormModule.FieldModule.TagModule.TextAreaTag, \r
+ select: Locmare.FormModule.FieldModule.TagModule.SelectTag, \r
+ hidden: Locmare.FormModule.FieldModule.TagModule.HiddenTag\r
+ }\r
+ \r
+ @factory: (field, my_manifest) ->\r
+ type = my_manifest.type\r
+ my_class = @types()[type]\r
+ console.log "undefined class for local view forms > #{field.form_name} > fields > #{field.field_name} > tag > #{type}\n" if not my_class\r
+ new my_class({field: field, my_manifest: my_manifest})\r
+ \r
+class Locmare.FormModule.FieldModule.TagModule\r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.Base extends Backbone.View\r
+ tagName: 'input'\r
+ \r
+ initialize: (options) ->\r
+ @field = options.field\r
+ @tag_manifest = options.tag_manifest\r
+ \r
+ form_field_name: () ->\r
+ @field.form_field_name()\r
+ \r
+ value: () ->\r
+ @field.value()\r
+ \r
+ options: () ->\r
+ @tag_manifest.options\r
+ \r
+ form: () ->\r
+ @field.form\r
+ \r
+ manifest: () ->\r
+ @form().manifest\r
+ \r
+ form_name: () ->\r
+ @form().form_name\r
+ \r
+ item: () ->\r
+ @form().item\r
+ \r
+ model_name: () ->\r
+ @tag_manifest.model_name()\r
+ \r
+ column_name: () ->\r
+ @tag_manifest.column_name()\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.Hidden extends Locmare.FormModule.FieldModule.TagModule.Base\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @attr = {\r
+ type: 'hidden',\r
+ name: @form_field_name(),\r
+ value: @value()\r
+ }\r
+ _.extend(@attr, @options())\r
+ this.$el.attr(@attr)\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.Number extends Locmare.FormModule.FieldModule.TagModule.Base\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @attr = {\r
+ type: 'number',\r
+ name: @form_field_name(),\r
+ value: @value()\r
+ }\r
+ _.extend(@attr, @options())\r
+ this.$el.attr(@attr)\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.Select extends Locmare.FormModule.FieldModule.TagModule.Base\r
+ tagName: 'select'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @attr = {\r
+ name: @form_field_name(),\r
+ }\r
+ _.extend(@attr, @options())\r
+ this.$el.attr(@attr)\r
+ _.each @select_values(), (member) ->\r
+ selected = if @is_selected(member)\r
+ ' selected'\r
+ else\r
+ ''\r
+ _this.$el.append('<option value="' + @select_value() + '"' + selected + '></option>')\r
+ this\r
+ \r
+ model_manifest: () ->\r
+ Manifest.manifest().models[@field.field_manifest.model_name()]\r
+ \r
+ model_attribute_manifest: () ->\r
+ @model_manifest().get(@field.field_manifest.column_name())\r
+ \r
+ select_item_name: () ->\r
+ @model_attribute_manifest().source.select_item_name\r
+ \r
+ items: () ->\r
+ if @model_attribute_manifest().source.type == 'model'\r
+ Manifest.manifest().system_resources.select_items[@select_item_name()]\r
+ else\r
+ resource_model_name = @model_attribute_manifest().source.resource_model_name\r
+ resource_list_name = @model_attribute_manifest().source.resource_list_name\r
+ filter_column_name = @model_attribute_manifest().source.filter_column_name\r
+ filter_id = @form().item().get(filter_column_name)\r
+ list = Locmare.ListGroup.list resource_model_name, resource_list_name\r
+ _.map list.items(null, {id: filter_id}), (i) ->\r
+ [i.caption, i.id]\r
+ \r
+ source_by_model: () ->\r
+ switch @model_attribute_manifest().source.type\r
+ when 'model', 'filter'\r
+ true\r
+ when 'magic_number'\r
+ false\r
+ else\r
+ null\r
+ \r
+ is_selected: (member) ->\r
+ @value() == member[1]\r
+ \r
+ select_values: () ->\r
+ if @source_by_model()\r
+ @items()\r
+ else\r
+ Pettanr.t_select_items(@items())\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.Text extends Locmare.FormModule.FieldModule.TagModule.Base\r
+ tagName: 'input'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @attr = {\r
+ type: 'text',\r
+ name: @form_field_name(),\r
+ value: @value()\r
+ }\r
+ _.extend(@attr, @options())\r
+ this.$el.attr(@attr)\r
+ this\r
+ \r
--- /dev/null
+class Locmare.FormModule.FieldModule.TagModule.TextArea extends Locmare.FormModule.FieldModule.TagModule.Base\r
+ tagName: 'textarea'\r
+ \r
+ render: () ->\r
+ this.$el.html('')\r
+ @attr = {\r
+ name: @form_field_name(),\r
+ }\r
+ if sz = @tag_manifest.options['size']\r
+ r = sz.split('x')\r
+ @tag_manifest.options['cols'] = r[0]\r
+ @tag_manifest.options['rows'] = r[1]\r
+ delete @tag_manifest.options['size']\r
+ _.extend(@attr, @options())\r
+ this.$el.attr(@attr)\r
+ this.$el.html(@value())\r
+ this\r
+ \r
end
def model_name
- @label_manifest.model_name
+ @tag_manifest.model_name
end
def column_name
- @label_manifest.column_name
+ @tag_manifest.column_name
end
def template_dir