liquid_feedback_frontend
view app/main/issue/_list.lua @ 442:7717fd8b0308
Add a newline after link
| author | bsw | 
|---|---|
| date | Sun Mar 11 12:35:18 2012 +0100 (2012-03-11) | 
| parents | 7ebf90c7d436 | 
| children | b04d1f79508e | 
 line source
     1 local issues_selector = param.get("issues_selector", "table")
     2 local for_member = param.get("for_member", "table") or app.session.member
     3 local for_state = param.get("for_state")
     4 local for_unit = param.get("for_unit", atom.boolean)
     5 local for_area = param.get("for_area", atom.boolean)
     8 if for_state == "open" then
     9   issues_selector:add_where("issue.closed ISNULL")
    10 elseif for_state == "closed" then
    11   issues_selector:add_where("issue.closed NOTNULL")
    12 end
    14 if app.session.member_id then
    15   issues_selector
    16     :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", for_member.id } )
    17     :add_field("(_interest.member_id NOTNULL)", "is_interested")
    18   issues_selector
    19     :left_join("delegating_interest_snapshot", "_delegating_interest", { "_delegating_interest.issue_id = issue.id AND _delegating_interest.member_id = ? AND _delegating_interest.event = issue.latest_snapshot_event", for_member.id } )
    20     :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
    21     :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
    22     :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
    23 end
    25 ui.add_partial_param_names{
    26   "filter",
    27   "filter_open",
    28   "filter_voting",
    29   "filter_interest",
    30   "issue_list" 
    31 }
    33 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = {
    34   member = for_member, state = for_state, for_unit = for_unit, for_area = for_area
    35 }}
    37 filters.content = function()
    38   ui.paginate{
    39     per_page = tonumber(param.get("per_page") or 25),
    40     selector = issues_selector,
    41     content = function()
    42       local highlight_string = param.get("highlight_string", "string")
    43       local issues = issues or issues_selector:exec()
    44       -- issues:load(initiatives)
    45       ui.container{ attr = { class = "issues" }, content = function()
    47         for i, issue in ipairs(issues) do
    49           local class = "issue"
    50           if issue.is_interested then
    51             class = class .. " interested"
    52           elseif issue.is_interested_by_delegation_to_member_id then
    53             class = class .. " interested_by_delegation"
    54           end
    55           ui.container{ attr = { class = class }, content = function()
    57             ui.container{ attr = { class = "issue_info" }, content = function()
    59               if issue.is_interested then
    60                 ui.tag{
    61                   tag = "div", attr = { class = "interest_by_delegation"},
    62                   content = function()
    63                     local text = "You are interested in this issue"
    64                     ui.image{ attr = { alt = text, title = text }, static = "icons/16/eye.png" }
    65                   end
    66                 }
    68               elseif issue.is_interested_by_delegation_to_member_id then
    69                 ui.tag{
    70                   tag = "div", attr = { class = "interest_by_delegation"},
    71                   content = function()
    72                     local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
    73                     local text = _"delegated to"
    74                     ui.image{
    75                       attr = { class = "delegation_arrow", alt = text, title = text },
    76                       static = "delegation_arrow_24_horizontal.png"
    77                     }
    78                     execute.view{
    79                       module = "member_image",
    80                       view = "_show",
    81                       params = {
    82                         member = member,
    83                         image_type = "avatar",
    84                         show_dummy = true,
    85                         class = "micro_avatar",
    86                         popup_text = member.name
    87                       }
    88                     }
    89                     if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
    90                       if issue.delegation_chain_length > 2 then
    91                         local text = _"delegated to"
    92                         ui.image{
    93                           attr = { class = "delegation_arrow", alt = text, title = text },
    94                           static = "delegation_arrow_24_horizontal.png"
    95                         }
    96                         ui.tag{ content = "..." }
    97                       end
    98                     local text = _"delegated to"
    99                       ui.image{
   100                         attr = { class = "delegation_arrow", alt = text, title = text },
   101                         static = "delegation_arrow_24_horizontal.png"
   102                       }
   103                       local member = Member:by_id(issue.is_interested_via_member_id)
   104                       execute.view{
   105                         module = "member_image",
   106                         view = "_show",
   107                         params = {
   108                           member = member,
   109                           image_type = "avatar",
   110                           show_dummy = true,
   111                           class = "micro_avatar",
   112                           popup_text = member.name
   113                         }
   114                       }
   115                     end
   116                   end
   117                 }
   118               end
   120               ui.tag{
   121                 tag = "div",
   122                 content = function()
   123                   ui.link{
   124                     attr = { class = "issue_id" },
   125                     text = _("Issue ##{id}", { id = tostring(issue.id) }),
   126                     module = "issue",
   127                     view = "show",
   128                     id = issue.id
   129                   }
   131                   slot.put(" · ")
   132                   ui.tag{ content = issue.area.name }
   133                   slot.put(" · ")
   134                   ui.tag{ content = issue.area.unit.name }
   135                   slot.put(" · ")
   136                   ui.tag{ content = issue.policy.name }
   139               end
   140               }
   141               ui.tag{
   142                 attr = { class = "issue_policy_info" },
   143                 tag = "div",
   144                 content = function()
   146                   ui.tag{ attr = { class = "event_name" }, content = issue.state_name }
   148                   if issue.state_time_left then
   149                     slot.put(" · ")
   150                     if issue.state_time_left:sub(1,1) == "-" then
   151                       ui.tag{ content = _("Counting starts soon") }
   152                     else
   153                       ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left:gsub("days", _"days"):gsub("day", _"day") }) }
   154                     end
   155                   end
   157                 end
   158               }
   161               if issue.old_state then
   162                 ui.field.text{ value = format.time(issue.sort) }
   163                 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
   164               else
   165               end
   166             end }
   168             ui.container{ attr = { class = "initiative_list" }, content = function()
   170               local initiatives_selector = issue:get_reference_selector("initiatives")
   171               local highlight_string = param.get("highlight_string")
   172               if highlight_string then
   173                 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
   174               end
   175               execute.view{
   176                 module = "initiative",
   177                 view = "_list",
   178                 params = {
   179                   issue = issue,
   180                   initiatives_selector = initiatives_selector,
   181                   highlight_string = highlight_string,
   182                   per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   183                   no_sort = true,
   184                   limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   185                   for_member = for_member
   186                 }
   187               }
   188             end }
   189           end }
   190         end
   191       end }
   192     end
   193   }
   194 end
   196 filters.opened = true
   197 filters.selector = issues_selector
   199 if param.get("no_filter", atom.boolean) then
   200   filters.content()
   201 else
   202   ui.filters(filters)
   203 end
