liquid_feedback_frontend
view app/main/issue/_list.lua @ 501:9582f42fd4bc
Make colors more of bargraph more clear
| author | bsw | 
|---|---|
| date | Wed Mar 21 19:49:02 2012 +0100 (2012-03-21) | 
| parents | 52c4a6ce5ef4 | 
| children | 63d6549cc00b | 
 line source
     1 local issues_selector = param.get("issues_selector", "table")
     2 local member = param.get("for_member", "table") or app.session.member
     3 local for_member = param.get("for_member", "table")
     4 local for_state = param.get("for_state")
     5 local for_unit = param.get("for_unit", atom.boolean)
     6 local for_area = param.get("for_area", atom.boolean)
     9 if for_state == "open" then
    10   issues_selector:add_where("issue.closed ISNULL")
    11 elseif for_state == "closed" then
    12   issues_selector:add_where("issue.closed NOTNULL")
    13 end
    15 if app.session.member_id then
    16   issues_selector
    17     :left_join("interest", "_interest", { "_interest.issue_id = issue.id AND _interest.member_id = ?", member.id } )
    18     :add_field("(_interest.member_id NOTNULL)", "is_interested")
    19   issues_selector
    20     :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", member.id } )
    21     :add_field("_delegating_interest.delegate_member_ids[1]", "is_interested_by_delegation_to_member_id")
    22     :add_field("_delegating_interest.delegate_member_ids[array_upper(_delegating_interest.delegate_member_ids, 1)]", "is_interested_via_member_id")
    23     :add_field("array_length(_delegating_interest.delegate_member_ids, 1)", "delegation_chain_length")
    24 end
    26 ui.add_partial_param_names{
    27   "filter",
    28   "filter_open",
    29   "filter_voting",
    30   "filter_interest",
    31   "issue_list" 
    32 }
    34 local filters = execute.load_chunk{module="issue", chunk="_filters.lua", params = {
    35   member = member, for_member = for_member, state = for_state, for_unit = for_unit, for_area = for_area
    36 }}
    38 filters.content = function()
    39   ui.paginate{
    40     per_page = tonumber(param.get("per_page") or 25),
    41     selector = issues_selector,
    42     content = function()
    43       local highlight_string = param.get("highlight_string", "string")
    44       local issues = issues or issues_selector:exec()
    45       -- issues:load(initiatives)
    46       ui.container{ attr = { class = "issues" }, content = function()
    48         for i, issue in ipairs(issues) do
    50           local class = "issue"
    51           if issue.is_interested then
    52             class = class .. " interested"
    53           elseif issue.is_interested_by_delegation_to_member_id then
    54             class = class .. " interested_by_delegation"
    55           end
    56           ui.container{ attr = { class = class }, content = function()
    58             ui.container{ attr = { class = "issue_info" }, content = function()
    60               if issue.is_interested then
    61                 ui.tag{
    62                   tag = "div", attr = { class = "interest_by_delegation"},
    63                   content = function()
    64                     local text = "You are interested in this issue"
    65                     ui.image{ attr = { alt = text, title = text }, static = "icons/16/eye.png" }
    66                   end
    67                 }
    69               elseif issue.is_interested_by_delegation_to_member_id then
    70                 ui.tag{
    71                   tag = "div", attr = { class = "interest_by_delegation"},
    72                   content = function()
    73                     local member = Member:by_id(issue.is_interested_by_delegation_to_member_id)
    74                     local text = _"delegated to"
    75                     ui.image{
    76                       attr = { class = "delegation_arrow", alt = text, title = text },
    77                       static = "delegation_arrow_24_horizontal.png"
    78                     }
    79                     execute.view{
    80                       module = "member_image",
    81                       view = "_show",
    82                       params = {
    83                         member = member,
    84                         image_type = "avatar",
    85                         show_dummy = true,
    86                         class = "micro_avatar",
    87                         popup_text = member.name
    88                       }
    89                     }
    90                     if issue.is_interested_by_delegation_to_member_id ~= issue.is_interested_via_member_id then
    91                       if issue.delegation_chain_length > 2 then
    92                         local text = _"delegated to"
    93                         ui.image{
    94                           attr = { class = "delegation_arrow", alt = text, title = text },
    95                           static = "delegation_arrow_24_horizontal.png"
    96                         }
    97                         ui.tag{ content = "..." }
    98                       end
    99                     local text = _"delegated to"
   100                       ui.image{
   101                         attr = { class = "delegation_arrow", alt = text, title = text },
   102                         static = "delegation_arrow_24_horizontal.png"
   103                       }
   104                       local member = Member:by_id(issue.is_interested_via_member_id)
   105                       execute.view{
   106                         module = "member_image",
   107                         view = "_show",
   108                         params = {
   109                           member = member,
   110                           image_type = "avatar",
   111                           show_dummy = true,
   112                           class = "micro_avatar",
   113                           popup_text = member.name
   114                         }
   115                       }
   116                     end
   117                   end
   118                 }
   119               end
   121               ui.tag{
   122                 tag = "div",
   123                 content = function()
   124                   ui.link{
   125                     attr = { class = "issue_id" },
   126                     text = _("Issue ##{id}", { id = tostring(issue.id) }),
   127                     module = "issue",
   128                     view = "show",
   129                     id = issue.id
   130                   }
   132                   slot.put(" · ")
   133                   ui.tag{ content = issue.policy.name }
   134                   slot.put(" · ")
   135                   ui.tag{ content = issue.area.name }
   136                   slot.put(" · ")
   137                   ui.tag{ content = issue.area.unit.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                       if issue.state == "new" then
   152                         ui.tag{ content = _("Discussion starts soon") }
   153                       elseif issue.state == "discussion" then
   154                         ui.tag{ content = _("Verification starts soon") }
   155                       elseif issue.state == "frozen" then
   156                         ui.tag{ content = _("Voting starts soon") }
   157                       elseif issue.state == "voting" then
   158                         ui.tag{ content = _("Counting starts soon") }
   159                       end
   160                     else
   161                       ui.tag{ content = _("#{time_left} left", { time_left = issue.state_time_left:gsub("days", _"days"):gsub("day", _"day") }) }
   162                     end
   163                   end
   165                 end
   166               }
   169               if issue.old_state then
   170                 ui.field.text{ value = format.time(issue.sort) }
   171                 ui.field.text{ value = Issue:get_state_name_for_state(issue.old_state) .. " > " .. Issue:get_state_name_for_state(issue.new_state) }
   172               else
   173               end
   174             end }
   176             ui.container{ attr = { class = "initiative_list" }, content = function()
   178               local initiatives_selector = issue:get_reference_selector("initiatives")
   179               local highlight_string = param.get("highlight_string")
   180               if highlight_string then
   181                 initiatives_selector:add_field( {'"highlight"("initiative"."name", ?)', highlight_string }, "name_highlighted")
   182               end
   183               execute.view{
   184                 module = "initiative",
   185                 view = "_list",
   186                 params = {
   187                   issue = issue,
   188                   initiatives_selector = initiatives_selector,
   189                   highlight_string = highlight_string,
   190                   per_page = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   191                   no_sort = true,
   192                   limit = app.session.member_id and tonumber(app.session.member:get_setting_value("initiatives_preview_limit") or 3) or 3,
   193                   for_member = for_member
   194                 }
   195               }
   196             end }
   197           end }
   198         end
   199       end }
   200     end
   201   }
   202 end
   204 filters.opened = true
   205 filters.selector = issues_selector
   207 if param.get("no_filter", atom.boolean) then
   208   filters.content()
   209 else
   210   ui.filters(filters)
   211 end
