jbe/bsw@0: local medium jbe/bsw@0: local id = param.get_id() jbe/bsw@0: if id then jbe/bsw@0: medium = Medium:by_id(id) jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: if medium then jbe/bsw@0: slot.put_into("title", encode.html(_"Medium")) jbe/bsw@0: else jbe/bsw@0: slot.put_into("title", encode.html(_"New medium")) jbe/bsw@0: end jbe/bsw@0: jbe/bsw@0: slot.select("actions", function() jbe/bsw@0: ui.link{ jbe/bsw@0: content = _"Back", jbe/bsw@0: module = "medium" jbe/bsw@0: } jbe/bsw@0: if medium and app.session.user.write_priv then jbe/bsw@0: ui.link{ jbe/bsw@0: content = _"Delete", jbe/bsw@0: form_attr = { jbe/bsw@0: onsubmit = "return confirm(" .. encode.json(_'Are you sure?') .. ");" jbe/bsw@0: }, jbe/bsw@0: module = "medium", jbe/bsw@0: action = "update", jbe/bsw@0: id = medium.id, jbe/bsw@0: params = { delete = true }, jbe/bsw@0: routing = { jbe/bsw@0: default = { jbe/bsw@0: mode = "redirect", jbe/bsw@0: module = "medium", jbe/bsw@0: view = "index" jbe/bsw@0: } jbe/bsw@0: } jbe/bsw@0: } jbe/bsw@0: end jbe/bsw@0: end) jbe/bsw@0: jbe/bsw@0: slot.select("main", function() jbe/bsw@0: ui.form{ jbe/bsw@0: attr = { class = "vertical" }, jbe/bsw@0: record = medium, jbe/bsw@0: readonly = not app.session.user.write_priv, jbe/bsw@0: module = "medium", jbe/bsw@0: action = "update", jbe/bsw@0: id = id, jbe/bsw@0: routing = { jbe/bsw@0: default = { jbe/bsw@0: mode = "redirect", jbe/bsw@0: module = "medium", jbe/bsw@0: view = "index" jbe/bsw@0: } jbe/bsw@0: }, jbe/bsw@0: content = function() jbe/bsw@0: if id then jbe/bsw@0: ui.field.integer{ label = _"Id", name = "id", readonly = true } jbe/bsw@0: end jbe/bsw@0: ui.field.select{ jbe/bsw@0: label = _"Media type", jbe/bsw@0: name = "media_type_id", jbe/bsw@0: foreign_records = MediaType:new_selector():exec(), jbe/bsw@0: foreign_id = "id", jbe/bsw@0: foreign_name = "name" jbe/bsw@0: } jbe/bsw@0: ui.field.text{ label = _"Name", name = "name" } jbe/bsw@0: ui.field.boolean{ label = _"Copy protected", name = "copyprotected" } jbe/bsw@0: jbe/bsw@0: ui.multiselect{ jbe/bsw@0: name = "genres[]", jbe/bsw@0: label = _"Genres", jbe/bsw@0: style = "select", jbe/bsw@0: attr = { size = 5 }, jbe/bsw@0: foreign_records = Genre:new_selector():exec(), jbe/bsw@0: connecting_records = medium and medium.classifications or {}, jbe/bsw@0: own_id = "id", jbe/bsw@0: own_reference = "medium_id", jbe/bsw@0: foreign_reference = "genre_id", jbe/bsw@0: foreign_id = "id", jbe/bsw@0: foreign_name = "name", jbe/bsw@0: } jbe/bsw@0: local tracks = medium and medium.tracks or {} jbe/bsw@0: for i = 1, 5 do jbe/bsw@0: tracks[#tracks+1] = Track:new() jbe/bsw@0: end jbe/bsw@0: ui.list{ jbe/bsw@0: label = _"Tracks", jbe/bsw@0: prefix = "tracks", jbe/bsw@0: records = tracks, jbe/bsw@0: columns = { jbe/bsw@0: { jbe/bsw@0: label = _"Pos", jbe/bsw@0: name = "position", jbe/bsw@0: }, jbe/bsw@0: { jbe/bsw@0: label = _"Name", jbe/bsw@0: name = "name", jbe/bsw@0: }, jbe/bsw@0: { jbe/bsw@0: label = _"Description", jbe/bsw@0: name = "description", jbe/bsw@0: }, jbe/bsw@0: { jbe/bsw@0: label = _"Duration", jbe/bsw@0: name = "duration", jbe/bsw@0: }, jbe/bsw@0: { jbe/bsw@0: content = function() jbe/bsw@0: ui.field.hidden{ name = "id" } jbe/bsw@0: end jbe/bsw@0: } jbe/bsw@0: } jbe/bsw@0: } jbe/bsw@0: jbe/bsw@0: ui.submit{ text = _"Save" } jbe/bsw@0: end jbe/bsw@0: } jbe/bsw@0: end)