liquid_feedback_frontend

annotate app/main/initiative/show.lua @ 2:5c601807d397

Version alpha3

Dark green part of issue supporter bargraph represents all satisfied supporters, regardless of having seen the latest draft

Wiki formatting for drafts

Showing differences between two drafts of the same initiative

Display of outgoing delegation chains

Many other improvements
author bsw
date Mon Nov 23 12:00:00 2009 +0100 (2009-11-23)
parents 3bfb2fcf7ab9
children 768faea1096d
rev   line source
bsw/jbe@0 1 local initiative = Initiative:new_selector():add_where{ "id = ?", param.get_id()}:single_object_mode():exec()
bsw/jbe@0 2
bsw/jbe@0 3 slot.put_into("html_head", '<link rel="alternate" type="application/rss+xml" title="RSS" href="../show/' .. tostring(initiative.id) .. '.rss" />')
bsw/jbe@0 4
bsw/jbe@0 5 execute.view{
bsw/jbe@0 6 module = "supporter",
bsw/jbe@0 7 view = "_show_box",
bsw/jbe@0 8 params = { initiative = initiative }
bsw/jbe@0 9 }
bsw/jbe@0 10
bsw/jbe@0 11 execute.view{
bsw/jbe@0 12 module = "delegation",
bsw/jbe@0 13 view = "_show_box",
bsw/jbe@0 14 params = { issue_id = initiative.issue_id }
bsw/jbe@0 15 }
bsw/jbe@0 16
bsw@2 17 execute.view{
bsw@2 18 module = "issue",
bsw@2 19 view = "_show_box",
bsw@2 20 params = { issue = initiative.issue }
bsw@2 21 }
bsw/jbe@0 22
bsw/jbe@0 23 slot.select("path", function()
bsw/jbe@0 24 ui.link{
bsw/jbe@0 25 content = _"Area '#{name}'":gsub("#{name}", initiative.issue.area.name),
bsw/jbe@0 26 module = "area",
bsw/jbe@0 27 view = "show",
bsw/jbe@0 28 id = initiative.issue.area.id
bsw/jbe@0 29 }
bsw/jbe@0 30 ui.container{ content = "::" }
bsw/jbe@0 31 ui.link{
bsw@2 32 content = _"Issue ##{id}":gsub("#{id}", initiative.issue.id),
bsw/jbe@0 33 module = "issue",
bsw/jbe@0 34 view = "show",
bsw/jbe@0 35 id = initiative.issue.id
bsw/jbe@0 36 }
bsw/jbe@0 37 end)
bsw/jbe@0 38
bsw/jbe@0 39 slot.put_into("title", encode.html(_"Initiative: '#{name}'":gsub("#{name}", initiative.shortened_name) ))
bsw/jbe@0 40
bsw/jbe@0 41 slot.select("actions", function()
bsw/jbe@0 42
bsw@2 43 if Initiator:by_pk(initiative.id, app.session.member.id) then
bsw@2 44 ui.link{
bsw@2 45 content = function()
bsw@2 46 ui.image{ static = "icons/16/script_add.png" }
bsw@2 47 slot.put(_"Edit draft")
bsw@2 48 end,
bsw@2 49 module = "draft",
bsw@2 50 view = "new",
bsw@2 51 params = { initiative_id = initiative.id }
bsw@2 52 }
bsw@2 53 end
bsw@2 54
bsw/jbe@0 55 ui.twitter("http://example.com/i" .. tostring(initiative.id) .. " " .. initiative.name)
bsw/jbe@0 56
bsw/jbe@0 57 end)
bsw/jbe@0 58
bsw/jbe@0 59
bsw/jbe@0 60 ui.container{
bsw/jbe@0 61 attr = { id = "add_suggestion_form", class = "hidden_inline_form" },
bsw/jbe@0 62 content = function()
bsw/jbe@0 63
bsw/jbe@0 64 ui.link{
bsw/jbe@0 65 content = _"Close",
bsw/jbe@0 66 attr = {
bsw/jbe@0 67 onclick = "document.getElementById('add_suggestion_form').style.display='none';return(false)",
bsw/jbe@0 68 style = "float: right;"
bsw/jbe@0 69 }
bsw/jbe@0 70 }
bsw/jbe@0 71
bsw/jbe@0 72 ui.field.text{ attr = { class = "head" }, value = _"Add new suggestion" }
bsw/jbe@0 73
bsw/jbe@0 74
bsw/jbe@0 75 ui.form{
bsw/jbe@0 76 module = "suggestion",
bsw/jbe@0 77 action = "add",
bsw/jbe@0 78 params = { initiative_id = initiative.id },
bsw/jbe@0 79 routing = {
bsw/jbe@0 80 default = {
bsw/jbe@0 81 mode = "redirect",
bsw/jbe@0 82 module = "initiative",
bsw/jbe@0 83 view = "show",
bsw/jbe@0 84 id = initiative.id,
bsw/jbe@0 85 params = { tab = "suggestion" }
bsw/jbe@0 86 }
bsw/jbe@0 87 },
bsw/jbe@0 88 attr = { class = "vertical" },
bsw/jbe@0 89 content = function()
bsw/jbe@0 90 ui.field.text{ label = _"Name", name = "name" }
bsw/jbe@0 91 ui.field.text{ label = _"Description", name = "description", multiline = true }
bsw/jbe@0 92 ui.field.select{
bsw/jbe@0 93 label = _"Degree",
bsw/jbe@0 94 name = "degree",
bsw/jbe@0 95 foreign_records = {
bsw/jbe@0 96 { id = 1, name = _"should"},
bsw/jbe@0 97 { id = 2, name = _"must"},
bsw/jbe@0 98 },
bsw/jbe@0 99 foreign_id = "id",
bsw/jbe@0 100 foreign_name = "name"
bsw/jbe@0 101 }
bsw/jbe@0 102 ui.submit{ text = _"Commit suggestion" }
bsw/jbe@0 103 end
bsw/jbe@0 104 }
bsw/jbe@0 105 end
bsw/jbe@0 106 }
bsw/jbe@0 107
bsw@2 108 local supporter = app.session.member:get_reference_selector("supporters")
bsw@2 109 :add_where{ "initiative_id = ?", initiative.id }
bsw@2 110 :optional_object_mode()
bsw@2 111 :exec()
bsw@2 112
bsw@2 113 if supporter then
bsw@2 114 local old_draft_id = supporter.draft_id
bsw@2 115 local new_draft_id = initiative.current_draft.id
bsw@2 116 if old_draft_id ~= new_draft_id then
bsw@2 117 ui.container{
bsw@2 118 attr = { class = "draft_updated_info" },
bsw@2 119 content = function()
bsw@2 120 slot.put("The draft of this initiative has been updated!")
bsw@2 121 slot.put(" ")
bsw@2 122 ui.link{
bsw@2 123 content = _"Show diff",
bsw@2 124 module = "draft",
bsw@2 125 view = "diff",
bsw@2 126 params = {
bsw@2 127 old_draft_id = old_draft_id,
bsw@2 128 new_draft_id = new_draft_id
bsw@2 129 }
bsw@2 130 }
bsw@2 131 slot.put(" ")
bsw@2 132 ui.link{
bsw@2 133 content = _"Refresh support to current draft",
bsw@2 134 module = "initiative",
bsw@2 135 action = "add_support",
bsw@2 136 id = initiative.id,
bsw@2 137 routing = {
bsw@2 138 default = {
bsw@2 139 mode = "redirect",
bsw@2 140 module = "initiative",
bsw@2 141 view = "show",
bsw@2 142 id = initiative.id
bsw@2 143 }
bsw@2 144 }
bsw@2 145 }
bsw@2 146 end
bsw@2 147 }
bsw@2 148 end
bsw@2 149 end
bsw/jbe@0 150
bsw/jbe@0 151 ui.tabs{
bsw/jbe@0 152 {
bsw/jbe@0 153 name = "current_draft",
bsw/jbe@0 154 label = _"Current draft",
bsw/jbe@0 155 content = function()
bsw/jbe@0 156 execute.view{ module = "draft", view = "_show", params = { draft = initiative.current_draft } }
bsw/jbe@0 157 end
bsw/jbe@0 158 },
bsw/jbe@0 159 {
bsw/jbe@0 160 name = "suggestion",
bsw/jbe@0 161 label = _"Suggestions",
bsw/jbe@0 162 content = function()
bsw/jbe@0 163 execute.view{ module = "suggestion", view = "_list", params = { suggestions_selector = initiative:get_reference_selector("suggestions") } }
bsw/jbe@0 164 slot.put("<br />")
bsw/jbe@0 165 if not initiative.issue.frozen and not initiative.issue.closed then
bsw/jbe@0 166 ui.link{
bsw/jbe@0 167 content = function()
bsw/jbe@0 168 ui.image{ static = "icons/16/comment_add.png" }
bsw/jbe@0 169 slot.put(_"Add new suggestion")
bsw/jbe@0 170 end,
bsw/jbe@0 171 attr = { onclick = "document.getElementById('add_suggestion_form').style.display='block';return(false)" },
bsw/jbe@0 172 static = "#"
bsw/jbe@0 173 }
bsw/jbe@0 174 end
bsw/jbe@0 175 end
bsw/jbe@0 176 },
bsw/jbe@0 177 {
bsw/jbe@0 178 name = "supporter",
bsw/jbe@0 179 label = _"Supporter",
bsw/jbe@0 180 content = function()
bsw/jbe@0 181 execute.view{ module = "member", view = "_list", params = { members_selector = initiative:get_reference_selector("supporting_members") } }
bsw/jbe@0 182 end
bsw/jbe@0 183 },
bsw/jbe@0 184 {
bsw/jbe@0 185 name = "initiators",
bsw/jbe@0 186 label = _"Initiators",
bsw/jbe@0 187 content = function()
bsw/jbe@0 188 execute.view{ module = "member", view = "_list", params = { members_selector = initiative:get_reference_selector("initiating_members") } }
bsw/jbe@0 189 end
bsw/jbe@0 190 },
bsw/jbe@0 191 {
bsw/jbe@0 192 name = "drafts",
bsw/jbe@0 193 label = _"Old drafts",
bsw/jbe@0 194 content = function()
bsw/jbe@0 195 execute.view{ module = "draft", view = "_list", params = { drafts = initiative.drafts } }
bsw/jbe@0 196 end
bsw/jbe@0 197 },
bsw@2 198 {
bsw@2 199 name = "details",
bsw@2 200 label = _"Details",
bsw@2 201 content = function()
bsw@2 202 ui.form{
bsw@2 203 attr = { class = "vertical" },
bsw@2 204 record = initiative,
bsw@2 205 readonly = true,
bsw@2 206 content = function()
bsw@2 207 ui.field.text{ label = _"Issue policy", value = initiative.issue.policy.name }
bsw@2 208 ui.field.text{
bsw@2 209 label = _"Created at",
bsw@2 210 value = tostring(initiative.created)
bsw@2 211 }
bsw@2 212 ui.field.text{
bsw@2 213 label = _"Created at",
bsw@2 214 value = format.timestamp(initiative.created)
bsw@2 215 }
bsw@2 216 ui.field.date{ label = _"Revoked at", name = "revoked" }
bsw@2 217 ui.field.boolean{ label = _"Admitted", name = "admitted" }
bsw@2 218 end
bsw@2 219 }
bsw@2 220 end
bsw@2 221 },
bsw/jbe@0 222 }
bsw/jbe@0 223
bsw/jbe@0 224

Impressum / About Us