bsw@1045: local issue = Issue:by_id ( param.get_id () ) bsw@1045: bsw@1045: if not issue then bsw/jbe@1309: return execute.view { module = "index", view = "404" } bsw@1045: end bsw@1045: bsw/jbe@1309: app.current_issue = issue bsw/jbe@1309: bsw/jbe@1309: issue.area:load_delegation_info_once_for_member_id(app.session.member_id) bsw/jbe@1309: bsw/jbe@1309: execute.view{ module = "issue", view = "_head", params = { issue = issue } } bsw/jbe@1309: bsw@1045: local initiatives = issue.initiatives bsw@1045: bsw@548: if app.session.member_id then bsw@1045: issue:load_everything_for_member_id ( app.session.member_id ) bsw@1045: initiatives:load_everything_for_member_id ( app.session.member_id ) bsw@548: end bsw/jbe@0: jorges@106: if not app.html_title.title then bsw@1045: app.html_title.title = _("Issue ##{id}", { id = issue.id }) jorges@106: end jorges@103: bsw/jbe@1309: ui.grid{ content = function() bsw/jbe@1309: bsw/jbe@1309: ui.cell_main{ content = function() bsw/jbe@0: bsw/jbe@1309: ui.container { attr = { class = "mdl-card mdl-shadow--2dp mdl-card__fullwidth" }, content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"Competing initiatives" } bsw/jbe@1309: end } bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "initiative", view = "_list", bsw/jbe@1309: params = { bsw/jbe@1309: issue = issue, bsw/jbe@1309: initiatives = initiatives bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: end } bsw@719: bsw/jbe@1309: ui.container { attr = { class = "mdl-card mdl-shadow--2dp mdl-card__fullwidth" }, content = function() bsw/jbe@1309: bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"Details" } bsw/jbe@1309: end } bsw@1045: bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__content" }, content = function() bsw/jbe@1309: local policy = issue.policy bsw/jbe@1309: ui.form{ bsw/jbe@1309: record = issue, bsw/jbe@1309: readonly = true, bsw/jbe@1309: attr = { class = "sectionRow form" }, bsw/jbe@1309: content = function() bsw/jbe@1309: if issue.snapshot then bsw/jbe@1309: ui.field.timestamp{ label = _"Last counting:", value = issue.snapshot } bsw/jbe@1309: end bsw/jbe@1309: ui.field.text{ label = _"Population", name = "population" } bsw/jbe@1309: ui.field.timestamp{ label = _"Created at", name = "created" } bsw/jbe@1309: if policy.polling then bsw/jbe@1309: ui.field.text{ label = _"Admission time", value = _"Implicitly admitted" } bsw/jbe@1309: else bsw/jbe@1309: ui.field.text{ label = _"Minimum admission time", value = format.interval_text(issue.min_admission_time_text) } bsw/jbe@1309: ui.field.text{ label = _"Maximum admission time", value = format.interval_text(issue.max_admission_time_text) } bsw/jbe@1309: ui.field.text{ label = _"Issue quorum", value = issue.issue_quorum } bsw/jbe@1309: end bsw/jbe@1309: if issue.accepted then bsw/jbe@1309: ui.field.timestamp{ label = _"Accepted at", name = "accepted" } bsw/jbe@1309: end bsw/jbe@1309: ui.field.text{ label = _"Discussion time", value = format.interval_text(issue.discussion_time_text) } bsw/jbe@1309: if issue.half_frozen then bsw/jbe@1309: ui.field.timestamp{ label = _"Half frozen at", name = "half_frozen" } bsw/jbe@1309: end bsw/jbe@1309: ui.field.text{ label = _"Verification time", value = format.interval_text(issue.verification_time_text) } bsw@1436: local quorums = {} bsw@1436: if policy.initiative_quorum_num / policy.initiative_quorum_den then bsw@1436: table.insert(quorums, format.percentage(policy.initiative_quorum_num / policy.initiative_quorum_den)) bsw@1436: end bsw@1436: if policy.initiative_quorum then bsw@1436: table.insert(quorums, policy.initiative_quorum) bsw@1436: end bsw/jbe@1309: ui.field.text{ bsw/jbe@1309: label = _"Initiative quorum", bsw@1436: value = table.concat(quorums, " / ") bsw/jbe@1309: } bsw/jbe@1309: if issue.fully_frozen then bsw/jbe@1309: ui.field.timestamp{ label = _"Fully frozen at", name = "fully_frozen" } bsw/jbe@1309: end bsw/jbe@1309: ui.field.text{ label = _"Voting time", value = format.interval_text(issue.voting_time_text) } bsw/jbe@1309: if issue.closed then bsw/jbe@1309: ui.field.timestamp{ label = _"Closed", name = "closed" } bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: } bsw@719: bsw/jbe@1309: if issue.initiatives[1].rank == 1 then bsw/jbe@1309: execute.view{ module = "initiative", view = "_sidebar_state", params = { bsw/jbe@1309: initiative = issue.initiatives[1] bsw/jbe@1309: } } bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: ui.cell_sidebar{ content = function() bsw/jbe@1309: if config.logo then bsw/jbe@1309: config.logo() bsw/jbe@1309: end bsw@1045: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar", bsw/jbe@1309: params = { bsw@1045: issue = issue, bsw/jbe@1309: member = app.session.member bsw@1045: } bsw@1045: } bsw/jbe@19: bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar_whatcanido", bsw/jbe@1309: params = { bsw/jbe@1309: issue = issue, bsw/jbe@1309: member = app.session.member bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: bsw/jbe@1309: if not config.voting_only or issue.state ~= "voting" then bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "issue", view = "_sidebar_members", params = { bsw/jbe@1309: issue = issue bsw@1045: } bsw@1045: } bsw@1045: end bsw/jbe@1309: end } bsw/jbe@19: bsw/jbe@1309: end }