| rev | 
   line source | 
| 
bsw@11
 | 
     1 local timeline_selector = param.get("timeline_selector", "table")
 | 
| 
bsw@11
 | 
     2 local event_names = param.get("event_names", "table")
 | 
| 
bsw@11
 | 
     3 local initiatives_per_page = param.get("initiatives_per_page", atom.number) or 3
 | 
| 
bsw@11
 | 
     4 
 | 
| 
bsw@11
 | 
     5 ui.paginate{
 | 
| 
bsw@11
 | 
     6   per_page = param.get("per_page", atom.number) or 25,
 | 
| 
bsw@11
 | 
     7   selector = timeline_selector,
 | 
| 
bsw@11
 | 
     8   content = function()
 | 
| 
bsw@11
 | 
     9     local timelines = timeline_selector:exec()
 | 
| 
bsw@11
 | 
    10     timelines:load("issue")
 | 
| 
bsw@11
 | 
    11     timelines:load("initiative")
 | 
| 
bsw@11
 | 
    12     timelines:load("member")
 | 
| 
bsw@11
 | 
    13     ui.list{
 | 
| 
bsw@11
 | 
    14       attr = { class = "nohover" },
 | 
| 
bsw@11
 | 
    15       records = timelines,
 | 
| 
bsw@11
 | 
    16       columns = {
 | 
| 
bsw@11
 | 
    17         {
 | 
| 
bsw@11
 | 
    18           field_attr = { style = "width: 10em;" },
 | 
| 
bsw@11
 | 
    19           content = function(timeline)
 | 
| 
bsw@11
 | 
    20             ui.field.text{
 | 
| 
bsw@11
 | 
    21               attr = { style = "font-size: 75%; font-weight: bold; background-color: #ccc; display: block; margin-bottom: 1ex;"},
 | 
| 
bsw@11
 | 
    22               value = format.time(timeline.occurrence)
 | 
| 
bsw@11
 | 
    23             }
 | 
| 
bsw/jbe@19
 | 
    24 
 | 
| 
bsw@11
 | 
    25             ui.field.text{
 | 
| 
bsw@11
 | 
    26               attr = { style = "font-size: 75%; font-weight: bold;"},
 | 
| 
bsw@11
 | 
    27               value = event_names[timeline.event] or timeline.event
 | 
| 
bsw@11
 | 
    28             }
 | 
| 
bsw/jbe@19
 | 
    29             if timeline.event == "draft_created" and timeline.count > 1 then
 | 
| 
bsw/jbe@19
 | 
    30               ui.field.text{
 | 
| 
bsw/jbe@19
 | 
    31                 attr = { style = "font-size: 75%;"},
 | 
| 
bsw/jbe@19
 | 
    32                 value = _("(#{more_count} duplicates removed)", { more_count = timeline.count - 1 })
 | 
| 
bsw/jbe@19
 | 
    33               }
 | 
| 
bsw/jbe@19
 | 
    34             end
 | 
| 
bsw@11
 | 
    35           end
 | 
| 
bsw@11
 | 
    36         },
 | 
| 
bsw@11
 | 
    37         {
 | 
| 
bsw@11
 | 
    38           content = function(timeline)
 | 
| 
bsw@11
 | 
    39             local issue
 | 
| 
bsw@11
 | 
    40             local initiative
 | 
| 
bsw@11
 | 
    41             if timeline.issue then
 | 
| 
bsw@11
 | 
    42               issue = timeline.issue
 | 
| 
bsw@11
 | 
    43             elseif timeline.initiative then
 | 
| 
bsw@11
 | 
    44               initiative = timeline.initiative
 | 
| 
bsw@11
 | 
    45               issue = initiative.issue
 | 
| 
bsw@11
 | 
    46             elseif timeline.draft then
 | 
| 
bsw@11
 | 
    47               initiative = timeline.draft.initiative
 | 
| 
bsw@11
 | 
    48               issue = initiative.issue
 | 
| 
bsw@11
 | 
    49             elseif timeline.suggestion then
 | 
| 
bsw@11
 | 
    50               initiative = timeline.suggestion.initiative
 | 
| 
bsw@11
 | 
    51               issue = initiative.issue
 | 
| 
bsw@11
 | 
    52             end
 | 
| 
bsw@11
 | 
    53             if issue then
 | 
| 
bsw@11
 | 
    54               if timeline.is_interested then
 | 
| 
bsw@11
 | 
    55                 local label = _"You are interested in this issue",
 | 
| 
bsw@11
 | 
    56                 ui.image{
 | 
| 
bsw@11
 | 
    57                   attr = { alt = label, title = label, style = "float: left; margin-right: 0.5em;" },
 | 
| 
bsw@11
 | 
    58                   static = "icons/16/eye.png"
 | 
| 
bsw@11
 | 
    59                 }
 | 
| 
bsw@11
 | 
    60               end
 | 
| 
bsw@11
 | 
    61               slot.put(" ")
 | 
| 
bsw@11
 | 
    62               ui.tag{
 | 
| 
bsw@11
 | 
    63                 tag = "span",
 | 
| 
bsw@11
 | 
    64                 attr = { style = "font-size: 75%; font-weight: bold; background-color: #ccc; display: block; margin-bottom: 1ex;"},
 | 
| 
bsw@11
 | 
    65                 content = issue.area.name .. ", " .. _("Issue ##{id}", { id = issue.id })
 | 
| 
bsw@11
 | 
    66               }
 | 
| 
bsw@11
 | 
    67             else
 | 
| 
bsw@11
 | 
    68               ui.tag{
 | 
| 
bsw@11
 | 
    69                 tag = "span",
 | 
| 
bsw@11
 | 
    70                 attr = { style = "font-size: 75%; background-color: #ccc; display: block; margin-bottom: 1ex;"},
 | 
| 
bsw@11
 | 
    71                 content = function() slot.put(" ") end
 | 
| 
bsw@11
 | 
    72               }
 | 
| 
bsw@11
 | 
    73             end
 | 
| 
bsw@11
 | 
    74 
 | 
| 
bsw@11
 | 
    75             if timeline.member then
 | 
| 
bsw@11
 | 
    76               execute.view{
 | 
| 
bsw@11
 | 
    77                 module = "member_image",
 | 
| 
bsw@11
 | 
    78                 view = "_show",
 | 
| 
bsw@11
 | 
    79                 params = {
 | 
| 
bsw@11
 | 
    80                   member = timeline.member,
 | 
| 
bsw@11
 | 
    81                   image_type = "avatar",
 | 
| 
bsw@11
 | 
    82                   show_dummy = true
 | 
| 
bsw@11
 | 
    83                 }
 | 
| 
bsw@11
 | 
    84               }
 | 
| 
bsw@11
 | 
    85               ui.link{
 | 
| 
bsw@11
 | 
    86                 content = timeline.member.name,
 | 
| 
bsw@11
 | 
    87                 module = "member",
 | 
| 
bsw@11
 | 
    88                 view = "show",
 | 
| 
bsw@11
 | 
    89                 id = timeline.member.id
 | 
| 
bsw@11
 | 
    90               }
 | 
| 
bsw@11
 | 
    91             end
 | 
| 
bsw@11
 | 
    92             if timeline.issue then
 | 
| 
bsw@11
 | 
    93               local initiatives_selector = timeline.issue
 | 
| 
bsw@11
 | 
    94                 :get_reference_selector("initiatives")
 | 
| 
bsw@11
 | 
    95               execute.view{
 | 
| 
bsw@11
 | 
    96                 module = "initiative",
 | 
| 
bsw@11
 | 
    97                 view = "_list",
 | 
| 
bsw@11
 | 
    98                 params = {
 | 
| 
bsw@11
 | 
    99                   issue = timeline.issue,
 | 
| 
bsw@11
 | 
   100                   initiatives_selector = initiatives_selector,
 | 
| 
bsw@11
 | 
   101                   per_page = initiatives_per_page,
 | 
| 
bsw@11
 | 
   102                   no_sort = true,
 | 
| 
bsw@11
 | 
   103                   limit = initiatives_per_page
 | 
| 
bsw@11
 | 
   104                 }
 | 
| 
bsw@11
 | 
   105               }
 | 
| 
bsw@11
 | 
   106             elseif initiative then
 | 
| 
bsw@11
 | 
   107               execute.view{
 | 
| 
bsw@11
 | 
   108                 module = "initiative",
 | 
| 
bsw@11
 | 
   109                 view = "_list",
 | 
| 
bsw@11
 | 
   110                 params = {
 | 
| 
bsw@11
 | 
   111                   issue = initiative.issue,
 | 
| 
bsw@11
 | 
   112                   initiatives_selector = Initiative:new_selector():add_where{ "initiative.id = ?", initiative.id },
 | 
| 
bsw@11
 | 
   113                   per_page = initiatives_per_page,
 | 
| 
bsw@11
 | 
   114                   no_sort = true
 | 
| 
bsw@11
 | 
   115                 }
 | 
| 
bsw@11
 | 
   116               }
 | 
| 
bsw@11
 | 
   117             end
 | 
| 
bsw@11
 | 
   118             if timeline.suggestion then
 | 
| 
bsw@11
 | 
   119               ui.link{
 | 
| 
bsw@11
 | 
   120                 module = "suggestion",
 | 
| 
bsw@11
 | 
   121                 view = "show",
 | 
| 
bsw@11
 | 
   122                 id = timeline.suggestion.id,
 | 
| 
bsw@11
 | 
   123                 content = timeline.suggestion.name
 | 
| 
bsw@11
 | 
   124               }
 | 
| 
bsw@11
 | 
   125             end
 | 
| 
bsw@11
 | 
   126           end
 | 
| 
bsw@11
 | 
   127         },
 | 
| 
bsw@11
 | 
   128       }
 | 
| 
bsw@11
 | 
   129     }
 | 
| 
bsw@11
 | 
   130   end
 | 
| 
bsw@11
 | 
   131 } |