moveEntityCall = (url, direction) -> $.ajax type: "PATCH" url: url dataType: 'json' contentType: 'application/json' data: JSON.stringify({direction: direction}) success: (data, status) -> window.location.reload() deleteEntityCall = (url) -> $.ajax type: "DELETE" url: url dataType: 'json' contentType: 'application/json' data: {} success: (data, status) -> window.location.reload() createEntityCall = (url, data) -> $.ajax type: "POST" url: url dataType: 'json' contentType: 'application/json' data: JSON.stringify(data) success: (data, status) -> window.location.reload() buildFields = (editor) -> fields = editor.data.fields inputs = '' defaultValues = {} for field in fields if field.default defaultValues[field.name] = field.default modelValues = if editor.data.action == 'edit' then editor.data.values else defaultValues for field in fields if field.label label = "" input = switch field.type when "text" then "" when "textarea" then "" when "select" select = "" select when "multiple_select" select = "" select inputs += "
#{label}
#{input}
" else inputs += "" inputs handleDeleteEntity = (editor) -> vex.dialog.confirm message: 'Are you sure you want to delete this?' callback: (value) -> if value deleteEntityCall(editor.data.url) handleMoveEntity = (editor) -> moveEntityCall(editor.data.url, editor.data.options.direction) handleCreateEditEntity = (editor) -> self = editor vex.dialog.buttons.YES.text = if self.data.action == 'edit' then 'Save' else 'Create' vex_message_type = if self.data.type == 'TypeStation::Page' then 'Page' else self.data.type vex_message = "#{if self.data.action == 'edit' then 'Edit' else 'Create'} #{vex_message_type || 'Page'}" vex.dialog.open message: vex_message input: buildFields(self) afterOpen: ($vexContent) -> $("select.multiple_select", $vexContent).chosen() callback: (data) -> if data if self.data.action == 'edit' model = self.ts.getModel self.data.url vex.dialog.confirm message: 'Are you sure you want to save changes?' callback: (value) -> if value self.ts.save() for k,v of data model.set(k, { field: k, value: v, type: self.fields[k].type }) model.save -> window.location.reload() else json = {} contents = [] valid = true for k,v of data field = self.fields[k] if valid valid = if field.required then (v.length > 0) else true else break contents.push({ field: k, value: v, type: field.type }) json['contents'] = contents json['parent_id'] = self.data.parent_id if self.data.parent_id json['_type'] = self.data.type if self.data.type if valid if self.ts.isChanged() vex.dialog.buttons.YES.text = 'Save' vex.dialog.confirm message: 'You have unsaved changes, Do you want to save them before creating this?' callback: (value) -> if value self.ts.save() createEntityCall(self.data.create_url, json) else createEntityCall(self.data.create_url, json) else vex.dialog.buttons.YES.text = 'Ok' vex.dialog.alert message: 'Please fill in all required fields' callback: -> self.$el.click() class @TypeStation.EntityEditor constructor: (@ts, @$el, @data) -> vex.defaultOptions.className = 'vex-theme-os' @fields = {} for field in @data.fields @fields[field.name] = field enable: -> @disable() self = @ @$el.on 'click', -> switch self.data.action when 'edit', 'create' then handleCreateEditEntity(self) when 'move' then handleMoveEntity(self) when 'delete' then handleDeleteEntity(self) disable: -> @$el.off 'click'