| rev | 
   line source | 
| 
bsw@31
 | 
     1 function show_issue(issue, initiatives_selector)
 | 
| 
bsw@31
 | 
     2   ui.list{
 | 
| 
bsw@31
 | 
     3     records = initiatives_selector:exec(),
 | 
| 
bsw@31
 | 
     4     columns = {
 | 
| 
bsw@31
 | 
     5       {
 | 
| 
bsw@31
 | 
     6         label = _"Date",
 | 
| 
bsw@31
 | 
     7         label_attr = { style = "width: 7.5em;" },
 | 
| 
bsw@31
 | 
     8         content = function(initiative)
 | 
| 
bsw@31
 | 
     9           slot.put(format.date(issue.closed))
 | 
| 
bsw@31
 | 
    10         end
 | 
| 
bsw@31
 | 
    11       },
 | 
| 
bsw@31
 | 
    12       {
 | 
| 
bsw@31
 | 
    13         label_attr = { style = "width: 8em;" },
 | 
| 
bsw@31
 | 
    14         label = _"Id",
 | 
| 
bsw@31
 | 
    15         content = function(initiative)
 | 
| 
bsw@31
 | 
    16           ui.link{
 | 
| 
bsw@31
 | 
    17             external = "",
 | 
| 
bsw@31
 | 
    18             text = "#" .. tostring(issue.id) .. "." .. tostring(initiative.id),
 | 
| 
bsw@31
 | 
    19             attr = {
 | 
| 
bsw@31
 | 
    20               onclick =
 | 
| 
bsw@31
 | 
    21                 "openEl('initiative_" .. tostring(initiative.id) .. "');" ..
 | 
| 
bsw@31
 | 
    22                 "return(false);"
 | 
| 
bsw@31
 | 
    23             }
 | 
| 
bsw@31
 | 
    24           }
 | 
| 
bsw@31
 | 
    25         end
 | 
| 
bsw@31
 | 
    26       },
 | 
| 
bsw@31
 | 
    27       {
 | 
| 
bsw@31
 | 
    28         label = _"Rank",
 | 
| 
bsw@31
 | 
    29         label_attr = { style = "width: 3em;" },
 | 
| 
bsw@31
 | 
    30         field_attr = { style = "text-align: right;" },
 | 
| 
bsw@31
 | 
    31         content = function(initiative)
 | 
| 
bsw@31
 | 
    32           ui.field.rank{ value = initiative.rank }
 | 
| 
bsw@31
 | 
    33         end
 | 
| 
bsw@31
 | 
    34       },
 | 
| 
bsw@31
 | 
    35       {
 | 
| 
bsw@31
 | 
    36         label = _"Name",
 | 
| 
bsw@31
 | 
    37         content = function(initiative)
 | 
| 
bsw@31
 | 
    38           if initiative.rank and initiative.rank == 1 then
 | 
| 
bsw@31
 | 
    39             slot.put("<b>")
 | 
| 
bsw@31
 | 
    40           end
 | 
| 
bsw@31
 | 
    41           ui.field.text{ value = initiative.name }
 | 
| 
bsw@31
 | 
    42           if initiative.rank and initiative.rank == 1 then
 | 
| 
bsw@31
 | 
    43             slot.put("</b>")
 | 
| 
bsw@31
 | 
    44           end
 | 
| 
bsw@31
 | 
    45         end
 | 
| 
bsw@31
 | 
    46       }
 | 
| 
bsw@31
 | 
    47     }
 | 
| 
bsw@31
 | 
    48   }
 | 
| 
bsw@31
 | 
    49 end
 | 
| 
bsw@31
 | 
    50 
 | 
| 
bsw@31
 | 
    51 function link_issue(issue)
 | 
| 
bsw@31
 | 
    52   ui.link{
 | 
| 
bsw@31
 | 
    53     external = "",
 | 
| 
bsw@31
 | 
    54     attr = {
 | 
| 
bsw@31
 | 
    55       style = "text-decoration: none;",
 | 
| 
bsw@31
 | 
    56       name    = "issue_" .. tostring(issue.id),
 | 
| 
bsw@31
 | 
    57       onclick =
 | 
| 
bsw@31
 | 
    58         "openEl('issue_" .. tostring(issue.id) .. "');" ..
 | 
| 
bsw@31
 | 
    59         "return(false);"
 | 
| 
bsw@31
 | 
    60     },
 | 
| 
bsw@31
 | 
    61     content = function()
 | 
| 
bsw@31
 | 
    62       ui.heading{
 | 
| 
bsw@31
 | 
    63         attr = { style = "background-color: #ddd; color: #000;" },
 | 
| 
bsw@31
 | 
    64         content = _("##{id}", { id = issue.id })
 | 
| 
bsw@31
 | 
    65       }
 | 
| 
bsw@31
 | 
    66     end
 | 
| 
bsw@31
 | 
    67   }
 | 
| 
bsw@31
 | 
    68 end
 | 
| 
bsw@31
 | 
    69 
 | 
| 
bsw@31
 | 
    70 
 | 
| 
bsw@31
 | 
    71 local area = param.get("area", "table")
 | 
| 
bsw@31
 | 
    72 
 | 
| 
bsw@31
 | 
    73 local issue_selector = Issue:new_selector()
 | 
| 
bsw@31
 | 
    74 issue_selector:add_where{ "area_id = ?", area.id }
 | 
| 
bsw@31
 | 
    75 issue_selector:add_where("closed NOTNULL")
 | 
| 
bsw@31
 | 
    76 issue_selector:add_order_by("id")
 | 
| 
bsw@31
 | 
    77 
 | 
| 
bsw@31
 | 
    78 
 | 
| 
bsw@31
 | 
    79 local issues = issue_selector:exec()
 | 
| 
bsw@31
 | 
    80 
 | 
| 
bsw@31
 | 
    81 ui.container{
 | 
| 
bsw@31
 | 
    82   attr = {
 | 
| 
bsw@31
 | 
    83     id = "area_" .. tostring(area.id)
 | 
| 
bsw@31
 | 
    84   },
 | 
| 
bsw@31
 | 
    85   content = function()
 | 
| 
bsw@31
 | 
    86 
 | 
| 
bsw@31
 | 
    87     link_area(area)
 | 
| 
bsw@31
 | 
    88 
 | 
| 
bsw@31
 | 
    89     for i, issue in ipairs(issues) do
 | 
| 
bsw@31
 | 
    90 
 | 
| 
bsw@31
 | 
    91       link_issue(issue)
 | 
| 
bsw@31
 | 
    92 
 | 
| 
bsw@31
 | 
    93       local initiatives_selector = issue:get_reference_selector("initiatives")
 | 
| 
bsw@31
 | 
    94 
 | 
| 
bsw@31
 | 
    95       local initiatives_count = initiatives_selector:count()
 | 
| 
bsw@31
 | 
    96 
 | 
| 
bsw@31
 | 
    97       initiatives_selector:add_order_by("rank")
 | 
| 
bsw@31
 | 
    98       initiatives_selector:limit(3)
 | 
| 
bsw@31
 | 
    99 
 | 
| 
bsw@31
 | 
   100       show_issue(issue, initiatives_selector)
 | 
| 
bsw@31
 | 
   101 
 | 
| 
bsw@31
 | 
   102       if initiatives_count > 3 then
 | 
| 
bsw@31
 | 
   103         ui.link{
 | 
| 
bsw@31
 | 
   104           attr = {
 | 
| 
bsw@31
 | 
   105             style = "margin-left: 8em; font-style: italic;",
 | 
| 
bsw@31
 | 
   106             onclick = "openEl('issue_" .. tostring(issue.id) .. "'); return(false);"
 | 
| 
bsw@31
 | 
   107           },
 | 
| 
bsw@31
 | 
   108           content = _("and #{count} more initiatives", { count = initiatives_count - 3 }),
 | 
| 
bsw@31
 | 
   109           external = ""
 | 
| 
bsw@31
 | 
   110         }
 | 
| 
bsw@31
 | 
   111       end
 | 
| 
bsw@31
 | 
   112 
 | 
| 
bsw@31
 | 
   113       slot.put("<br />")
 | 
| 
bsw@31
 | 
   114 
 | 
| 
bsw@31
 | 
   115     end
 | 
| 
bsw@31
 | 
   116 
 | 
| 
bsw@31
 | 
   117   end
 | 
| 
bsw@31
 | 
   118 }
 | 
| 
bsw@31
 | 
   119 
 | 
| 
bsw@34
 | 
   120 ui.script{ script = "parents['area_" .. tostring(area.id) .. "'] = 'areas';" }
 | 
| 
bsw@34
 | 
   121 
 | 
| 
bsw@31
 | 
   122 local next_issue = issues[1]
 | 
| 
bsw@31
 | 
   123 if next_issue then
 | 
| 
bsw@31
 | 
   124   ui.script{ script = "next_issues['area_" .. tostring(area.id) .. "'] = 'issue_" .. tostring(next_issue.id) .. "';" }
 | 
| 
bsw@31
 | 
   125 end
 | 
| 
bsw@31
 | 
   126 
 | 
| 
bsw@31
 | 
   127 if next_issue then
 | 
| 
bsw@31
 | 
   128   local next_initiative = next_issue.initiatives[1]
 | 
| 
bsw@31
 | 
   129   if next_initiative then
 | 
| 
bsw@31
 | 
   130     ui.script{ script = "next_initiatives['area_" .. tostring(area.id) .. "'] = 'initiative_" .. tostring(next_initiative.id) .. "';" }
 | 
| 
bsw@31
 | 
   131   end
 | 
| 
bsw@31
 | 
   132 end
 | 
| 
bsw@31
 | 
   133 
 | 
| 
bsw@31
 | 
   134 
 | 
| 
bsw@31
 | 
   135 for i, issue in ipairs(issues) do
 | 
| 
bsw@31
 | 
   136   local initiatives_selector = issue:get_reference_selector("initiatives")
 | 
| 
bsw@31
 | 
   137     :add_order_by("rank")
 | 
| 
bsw@31
 | 
   138 
 | 
| 
bsw@31
 | 
   139   local initiatives = initiatives_selector:exec()
 | 
| 
bsw@31
 | 
   140 
 | 
| 
bsw@31
 | 
   141   ui.container{
 | 
| 
bsw@31
 | 
   142     attr = {
 | 
| 
bsw@31
 | 
   143       id = "issue_" .. tostring(issue.id)
 | 
| 
bsw@31
 | 
   144     },
 | 
| 
bsw@31
 | 
   145     content = function()
 | 
| 
bsw@31
 | 
   146       link_area(area)
 | 
| 
bsw@31
 | 
   147       link_issue(issue)
 | 
| 
bsw@31
 | 
   148       show_issue(issue, initiatives_selector)
 | 
| 
bsw@31
 | 
   149     end
 | 
| 
bsw@31
 | 
   150   }
 | 
| 
bsw@31
 | 
   151 
 | 
| 
bsw@31
 | 
   152   local previous_issue = issues[i-1]
 | 
| 
bsw@31
 | 
   153   if previous_issue then
 | 
| 
bsw@31
 | 
   154     ui.script{ script = "prev_issues['issue_" .. tostring(issue.id) .. "'] = 'issue_" .. tostring(previous_issue.id) .. "';" }
 | 
| 
bsw@31
 | 
   155   end
 | 
| 
bsw@31
 | 
   156 
 | 
| 
bsw@31
 | 
   157   local next_initiative = initiatives[1]
 | 
| 
bsw@31
 | 
   158   if next_initiative then
 | 
| 
bsw@31
 | 
   159     ui.script{ script = "next_initiatives['issue_" .. tostring(issue.id) .. "'] = 'initiative_" .. tostring(next_initiative.id) .. "';" }
 | 
| 
bsw@31
 | 
   160   end
 | 
| 
bsw@31
 | 
   161 
 | 
| 
bsw@34
 | 
   162   ui.script{ script = "parents['issue_" .. tostring(issue.id) .. "'] = 'area_" .. tostring(area.id) .. "';" }
 | 
| 
bsw@34
 | 
   163 
 | 
| 
bsw@31
 | 
   164   local next_issue = issues[i+1]
 | 
| 
bsw@31
 | 
   165   if next_issue then
 | 
| 
bsw@31
 | 
   166     ui.script{ script = "next_issues['issue_" .. tostring(issue.id) .. "'] = 'issue_" .. tostring(next_issue.id) .. "';" }
 | 
| 
bsw@31
 | 
   167   end
 | 
| 
bsw@31
 | 
   168 
 | 
| 
bsw@31
 | 
   169   ui.script{
 | 
| 
bsw@31
 | 
   170     script = "document.getElementById('issue_" .. tostring(issue.id) .. "').style.display = 'none';"
 | 
| 
bsw@31
 | 
   171   }
 | 
| 
bsw@31
 | 
   172 
 | 
| 
bsw@31
 | 
   173 
 | 
| 
bsw@31
 | 
   174   for j, initiative in ipairs(initiatives) do
 | 
| 
bsw@31
 | 
   175 
 | 
| 
bsw@31
 | 
   176     ui.container{
 | 
| 
bsw@31
 | 
   177       attr = {
 | 
| 
bsw@31
 | 
   178         id = "initiative_" .. tostring(initiative.id)
 | 
| 
bsw@31
 | 
   179       },
 | 
| 
bsw@31
 | 
   180       content = function()
 | 
| 
bsw@31
 | 
   181         execute.view{
 | 
| 
bsw@31
 | 
   182           module = "report",
 | 
| 
bsw@31
 | 
   183           view = "initiative",
 | 
| 
bsw@31
 | 
   184           params = { initiative = initiative }
 | 
| 
bsw@31
 | 
   185         }
 | 
| 
bsw@31
 | 
   186         slot.put("<br />")
 | 
| 
bsw@31
 | 
   187         slot.put("<br />")
 | 
| 
bsw@31
 | 
   188         slot.put("<br />")
 | 
| 
bsw@31
 | 
   189         slot.put("<br />")
 | 
| 
bsw@31
 | 
   190         slot.put("<br />")
 | 
| 
bsw@31
 | 
   191       end
 | 
| 
bsw@31
 | 
   192     }
 | 
| 
bsw@31
 | 
   193 
 | 
| 
bsw@31
 | 
   194     local previous_issue = issues[i-1]
 | 
| 
bsw@31
 | 
   195     if previous_issue then
 | 
| 
bsw@31
 | 
   196       ui.script{ script = "prev_issues['initiative_" .. tostring(initiative.id) .. "'] = 'issue_" .. tostring(previous_issue.id) .. "';" }
 | 
| 
bsw@31
 | 
   197     end
 | 
| 
bsw@31
 | 
   198 
 | 
| 
bsw@31
 | 
   199     local previous_initiative = initiatives[j-1]
 | 
| 
bsw@31
 | 
   200     if previous_initiative then
 | 
| 
bsw@31
 | 
   201       ui.script{ script = "prev_initiatives['initiative_" .. tostring(initiative.id) .. "'] = 'initiative_" .. tostring(previous_initiative.id) .. "';" }
 | 
| 
bsw@31
 | 
   202     end
 | 
| 
bsw@31
 | 
   203 
 | 
| 
bsw@34
 | 
   204     ui.script{ script = "parents['initiative_" .. tostring(initiative.id) .. "'] = 'issue_" .. tostring(issue.id) .. "';" }
 | 
| 
bsw@34
 | 
   205 
 | 
| 
bsw@31
 | 
   206     local next_initiative = initiatives[j+1]
 | 
| 
bsw@31
 | 
   207     if next_initiative then
 | 
| 
bsw@31
 | 
   208       ui.script{ script = "next_initiatives['initiative_" .. tostring(initiative.id) .. "'] = 'initiative_" .. tostring(next_initiative.id) .. "';" }
 | 
| 
bsw@31
 | 
   209     end
 | 
| 
bsw@31
 | 
   210 
 | 
| 
bsw@31
 | 
   211     local next_issue = issues[i+1]
 | 
| 
bsw@31
 | 
   212     if next_issue then
 | 
| 
bsw@31
 | 
   213       ui.script{ script = "next_issues['initiative_" .. tostring(initiative.id) .. "'] = 'issue_" .. tostring(next_issue.id) .. "';" }
 | 
| 
bsw@31
 | 
   214     end
 | 
| 
bsw@31
 | 
   215 
 | 
| 
bsw@31
 | 
   216     ui.script{
 | 
| 
bsw@31
 | 
   217       script = "document.getElementById('initiative_" .. tostring(initiative.id) .. "').style.display = 'none';"
 | 
| 
bsw@31
 | 
   218     }
 | 
| 
bsw@31
 | 
   219 
 | 
| 
bsw@31
 | 
   220   end
 | 
| 
bsw@31
 | 
   221 end
 | 
| 
bsw@31
 | 
   222 
 | 
| 
bsw@31
 | 
   223 ui.script{
 | 
| 
bsw@31
 | 
   224   script = "document.getElementById('area_" .. tostring(area.id) .. "').style.display = 'none';"
 | 
| 
bsw@31
 | 
   225 }
 | 
| 
bsw@31
 | 
   226 
 |