liquid_feedback_frontend

changeset 1763:0f04f8c2a469

Removed unused views
author bsw
date Mon Oct 18 15:31:37 2021 +0200 (2021-10-18)
parents 048d6bae2855
children a959fcd8e048
files app/main/area/_list_entry.lua app/main/contact/list.lua app/main/index/_not_voted_issues.lua app/main/initiative/_sidebar_wikisyntax.lua app/main/slideshow/_index.lua app/main/slideshow/_slideshow.lua app/main/slideshow/index.lua app/main/suggestion/_list.lua
line diff
     1.1 --- a/app/main/area/_list_entry.lua	Mon Oct 18 11:10:31 2021 +0200
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,42 +0,0 @@
     1.4 -local area = param.get("area", "table")
     1.5 -local member = param.get("member", "table")
     1.6 -
     1.7 -ui.container{ attr = { class = "area" }, content = function()
     1.8 -
     1.9 -  execute.view{ module = "area", view = "_head", params = { area = area, hide_unit = true, show_content = true, member = member } }
    1.10 -  
    1.11 -  ui.container{ attr = { class = "content" }, content = function()
    1.12 -    ui.tag{ content = _"Issues:" }
    1.13 -    slot.put(" ")
    1.14 -    ui.link{ 
    1.15 -      module = "area", view = "show", id = area.id, params = { tab = "open", filter = "new" },
    1.16 -      text = _("#{count} new", { count = area.issues_new_count }) 
    1.17 -    }
    1.18 -    slot.put(" · ")
    1.19 -    ui.link{ 
    1.20 -      module = "area", view = "show", id = area.id, params = { tab = "open", filter = "accepted" },
    1.21 -      text = _("#{count} in discussion", { count = area.issues_discussion_count }) 
    1.22 -    }
    1.23 -    slot.put(" · ")
    1.24 -    ui.link{ 
    1.25 -      module = "area", view = "show", id = area.id, params = { tab = "open", filter = "half_frozen" },
    1.26 -      text = _("#{count} in verification", { count = area.issues_frozen_count }) 
    1.27 -    }
    1.28 -    slot.put(" · ")
    1.29 -    ui.link{ 
    1.30 -      module = "area", view = "show", id = area.id, params = { tab = "open", filter = "frozen" },
    1.31 -      text = _("#{count} in voting", { count = area.issues_voting_count }) 
    1.32 -    }
    1.33 -    slot.put(" · ")
    1.34 -    ui.link{ 
    1.35 -      module = "area", view = "show", id = area.id, params = { tab = "closed", filter = "finished" },
    1.36 -      text = _("#{count} finished", { count = area.issues_finished_count }) 
    1.37 -    }
    1.38 -    slot.put(" · ")
    1.39 -    ui.link{ 
    1.40 -      module = "area", view = "show", id = area.id, params = { tab = "closed", filter = "canceled" },
    1.41 -      text = _("#{count} canceled", { count = area.issues_canceled_count }) 
    1.42 -    }
    1.43 -  end }
    1.44 -
    1.45 -end }
     2.1 --- a/app/main/contact/list.lua	Mon Oct 18 11:10:31 2021 +0200
     2.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.3 @@ -1,116 +0,0 @@
     2.4 -local contacts_selector = Contact:build_selector{
     2.5 -  member_id = app.session.member_id,
     2.6 -  order = "name"
     2.7 -}
     2.8 -
     2.9 -ui.title(_"Contacts")
    2.10 -
    2.11 -ui.grid{ content = function()
    2.12 -  ui.cell_main{ content = function()
    2.13 -
    2.14 -    ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function()
    2.15 -      ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function()
    2.16 -        ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"Contacts" }
    2.17 -      end }
    2.18 -      ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
    2.19 -
    2.20 -
    2.21 -        ui.paginate{
    2.22 -          selector = contacts_selector,
    2.23 -          content = function()
    2.24 -            local contacts = contacts_selector:exec()
    2.25 -            if #contacts == 0 then
    2.26 -              ui.field.text{ value = _"You didn't save any member as contact yet." }
    2.27 -            else
    2.28 -              ui.list{
    2.29 -                attr = { class = "mdl-data-table mdl-js-data-table mdl-shadow--2dp" },
    2.30 -                records = contacts,
    2.31 -                columns = {
    2.32 -                  {
    2.33 -                    label = _"Name",
    2.34 -                    content = function(record)
    2.35 -                      ui.link{
    2.36 -                        text = record.other_member.name,
    2.37 -                        module = "member",
    2.38 -                        view = "show",
    2.39 -                        id = record.other_member_id
    2.40 -                      }
    2.41 -                    end
    2.42 -                  },
    2.43 -                  {
    2.44 -                    label = _"Published",
    2.45 -                    content = function(record)
    2.46 -                      ui.field.boolean{ value = record.public }
    2.47 -                    end
    2.48 -                  },
    2.49 -                  {
    2.50 -                    content = function(record)
    2.51 -                      if record.public then
    2.52 -                        ui.link{
    2.53 -                          attr = { class = "action" },
    2.54 -                          text = _"Hide",
    2.55 -                          module = "contact",
    2.56 -                          action = "add_member",
    2.57 -                          id = record.other_member_id,
    2.58 -                          params = { public = false },
    2.59 -                          routing = {
    2.60 -                            default = {
    2.61 -                              mode = "redirect",
    2.62 -                              module = request.get_module(),
    2.63 -                              view = request.get_view(),
    2.64 -                              id = request.get_id_string(),
    2.65 -                              params = request.get_param_strings()
    2.66 -                            }
    2.67 -                          }
    2.68 -                        }
    2.69 -                      else
    2.70 -                        ui.link{
    2.71 -                          attr = { class = "action" },
    2.72 -                          text = _"Publish",
    2.73 -                          module = "contact",
    2.74 -                          action = "add_member",
    2.75 -                          id = record.other_member_id,
    2.76 -                          params = { public = true },
    2.77 -                          routing = {
    2.78 -                            default = {
    2.79 -                              mode = "redirect",
    2.80 -                              module = request.get_module(),
    2.81 -                              view = request.get_view(),
    2.82 -                              id = request.get_id_string(),
    2.83 -                              params = request.get_param_strings()
    2.84 -                            }
    2.85 -                          }
    2.86 -                        }
    2.87 -                      end
    2.88 -                    end
    2.89 -                  },
    2.90 -                  {
    2.91 -                    content = function(record)
    2.92 -                      ui.link{
    2.93 -                        attr = { class = "action" },
    2.94 -                        text = _"Remove",
    2.95 -                        module = "contact",
    2.96 -                        action = "remove_member",
    2.97 -                        id = record.other_member_id,
    2.98 -                        routing = {
    2.99 -                          default = {
   2.100 -                            mode = "redirect",
   2.101 -                            module = request.get_module(),
   2.102 -                            view = request.get_view(),
   2.103 -                            id = request.get_id_string(),
   2.104 -                            params = request.get_param_strings()
   2.105 -                          }
   2.106 -                        }
   2.107 -                      }
   2.108 -                    end
   2.109 -                  },
   2.110 -                }
   2.111 -              }
   2.112 -            end
   2.113 -          end
   2.114 -        }
   2.115 -
   2.116 -      end }
   2.117 -    end }
   2.118 -  end }
   2.119 -end }
     3.1 --- a/app/main/index/_not_voted_issues.lua	Mon Oct 18 11:10:31 2021 +0200
     3.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.3 @@ -1,67 +0,0 @@
     3.4 -local areas = param.get("areas", "table")
     3.5 -
     3.6 -if #areas > 0 then
     3.7 -  ui.container{
     3.8 -    attr = { style = "font-weight: bold;" },
     3.9 -    content = _"Current votings in areas you are member of and issues you are interested in:"
    3.10 -  }
    3.11 -  
    3.12 -  ui.list{
    3.13 -    records = areas,
    3.14 -    columns = {
    3.15 -      {
    3.16 -        name = "name"
    3.17 -      },
    3.18 -      {
    3.19 -        content = function(record)
    3.20 -          if record.is_member and record.issues_to_vote_count > 0 then
    3.21 -            ui.link{
    3.22 -              content = function()
    3.23 -                if record.issues_to_vote_count > 1 then
    3.24 -                  slot.put(_("#{issues_to_vote_count} issue(s)", { issues_to_vote_count = record.issues_to_vote_count }))
    3.25 -                else
    3.26 -                  slot.put(_("One issue"))
    3.27 -                end
    3.28 -              end,
    3.29 -              module = "area",
    3.30 -              view = "show",
    3.31 -              id = record.id,
    3.32 -              params = { 
    3.33 -                tab = "open",
    3.34 -                filter = "frozen",
    3.35 -                filter_interest = "any",
    3.36 -                filter_voting = "not_voted"
    3.37 -              }
    3.38 -            }
    3.39 -          else
    3.40 -            slot.put(_"Not a member")
    3.41 -          end
    3.42 -        end
    3.43 -      },
    3.44 -      {
    3.45 -        content = function(record)
    3.46 -          if record.interested_issues_to_vote_count > 0 then
    3.47 -            ui.link{
    3.48 -              content = function()
    3.49 -                if record.interested_issues_to_vote_count > 1 then
    3.50 -                  slot.put(_("#{interested_issues_to_vote_count} issue(s) you are interested in", { interested_issues_to_vote_count = record.interested_issues_to_vote_count }))
    3.51 -                else
    3.52 -                  slot.put(_"One issue you are interested in")
    3.53 -                end
    3.54 -              end,
    3.55 -              module = "area",
    3.56 -              view = "show",
    3.57 -              id = record.id,
    3.58 -              params = { 
    3.59 -                tab = "open",
    3.60 -                filter = "frozen",
    3.61 -                filter_interest = "issue",
    3.62 -                filter_voting = "not_voted"
    3.63 -              }
    3.64 -            }
    3.65 -          end
    3.66 -        end
    3.67 -      },
    3.68 -    }
    3.69 -  }
    3.70 -end
     4.1 --- a/app/main/initiative/_sidebar_wikisyntax.lua	Mon Oct 18 11:10:31 2021 +0200
     4.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.3 @@ -1,61 +0,0 @@
     4.4 -if config.enforce_formatting_engine ~= 'markdown2' then
     4.5 -  return
     4.6 -end
     4.7 -
     4.8 -ui.sidebar( "tab-whatcanido", function()
     4.9 -  ui.sidebarHead( function()
    4.10 -    ui.heading { level = 2, content = _"Formatting help" }
    4.11 -  end )
    4.12 -  ui.sidebarSection( function ()
    4.13 -    ui.heading { level = 3, content = _"Paragraphs" }
    4.14 -    ui.tag { tag = "ul", attr = { class = "ul" }, content = function ()
    4.15 -      ui.tag { tag = "li", content = function ()
    4.16 -        ui.tag { content = _"Separate each paragraph with at least one blank line" }
    4.17 -      end }
    4.18 -    end }
    4.19 -
    4.20 -    ui.heading { level = 3, content = _"Headlines" }
    4.21 -    ui.tag { tag = "ul", attr = { class = "ul" }, content = function ()
    4.22 -      ui.tag { tag = "li", content = function ()
    4.23 -        ui.tag { content = _"Underline main headlines with ===" }
    4.24 -      end }
    4.25 -      ui.tag { tag = "li", content = function ()
    4.26 -        ui.tag { content = _"Underline sub headlines with ---" }
    4.27 -      end }
    4.28 -    end }
    4.29 -
    4.30 -    ui.heading { level = 3, content = _"Emphasis" }
    4.31 -    ui.tag { tag = "ul", attr = { class = "ul" }, content = function ()
    4.32 -      ui.tag { tag = "li", content = function ()
    4.33 -        ui.tag { content = _"Put *asterisks* or around a phrase to make it italic" }
    4.34 -      end }
    4.35 -      ui.tag { tag = "li", content = function ()
    4.36 -        ui.tag { content = _"Put **double asterisks** around a phrase to make it bold" }
    4.37 -      end }
    4.38 -    end }
    4.39 -
    4.40 -    ui.heading { level = 3, content = _"Lists" }
    4.41 -    ui.tag { tag = "ul", attr = { class = "ul" }, content = function ()
    4.42 -      ui.tag { tag = "li", content = function ()
    4.43 -        ui.tag { content = _"Lists must be preceeded and followed by at least one blank line" }
    4.44 -      end }
    4.45 -      ui.tag { tag = "li", content = function ()
    4.46 -        ui.tag { content = _"Put a hypen (-) or asterisk (*) followed by a space in front of each item" }
    4.47 -      end }
    4.48 -      ui.tag { tag = "li", content = function ()
    4.49 -        ui.tag { content = _"For numbered items use a digit (e.g. 1) followed by a dot (.) and a space" }
    4.50 -      end }
    4.51 -      ui.tag { tag = "li", content = function ()
    4.52 -        ui.tag { content = _"Indent sub items with spaces" }
    4.53 -      end }
    4.54 -    end }
    4.55 -
    4.56 -    ui.heading { level = 3, content = _"Links" }
    4.57 -    ui.tag { tag = "ul", attr = { class = "ul" }, content = function ()
    4.58 -      ui.tag { tag = "li", content = function ()
    4.59 -        ui.tag { content = _"Use [Text](http://example.com/) for links" }
    4.60 -      end }
    4.61 -    end }
    4.62 -
    4.63 -  end )
    4.64 -end )
     5.1 --- a/app/main/slideshow/_index.lua	Mon Oct 18 11:10:31 2021 +0200
     5.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.3 @@ -1,64 +0,0 @@
     5.4 -local unit = param.get( "unit", "table" )
     5.5 -local area = param.get( "area", "table" )
     5.6 -
     5.7 -local args = {
     5.8 -  unit_id = unit and unit.id or nil,
     5.9 -  area_id = area and area.id or nil
    5.10 -}
    5.11 -
    5.12 -local lastWinner = Initiative:getLastWinner( args )
    5.13 -local lastLooser = Initiative:getLastLoser( args )
    5.14 -local nextEndingVoting = Initiative:getNextEndingVoting( args )
    5.15 -local nextEndingVerification = Initiative:getNextEndingVerification( args )
    5.16 -local nextEndingDiscussion = Initiative:getNextEndingDiscussion( args )
    5.17 -local bestInAdmission = Initiative:getBestInAdmission( args )
    5.18 -
    5.19 -local slides = { }
    5.20 -
    5.21 -if lastWinner then
    5.22 -  slides[#slides+1] = {
    5.23 -    title = _"Latest approved issue",
    5.24 -    initiative = lastWinner
    5.25 -  }
    5.26 -end
    5.27 -
    5.28 -if lastLooser then
    5.29 -  slides[#slides+1] = {
    5.30 -    title = _"Latest disapproved issue",
    5.31 -    initiative = lastLooser
    5.32 -  }
    5.33 -end
    5.34 -
    5.35 -if nextEndingVoting then
    5.36 -  slides[#slides+1] = {
    5.37 -    title = _("Voting #{time_info}", { time_info = nextEndingVoting.issue.state_time_text }),
    5.38 -    initiative = nextEndingVoting
    5.39 -  }
    5.40 -end
    5.41 -
    5.42 -if nextEndingVerification then
    5.43 -  slides[#slides+1] = {
    5.44 -    title = _("Verification #{time_info}", { time_info = nextEndingVerification.issue.state_time_text }),
    5.45 -    initiative = nextEndingVerification
    5.46 -  }
    5.47 -end
    5.48 -
    5.49 -if nextEndingDiscussion then
    5.50 -  slides[#slides+1] = {
    5.51 -    title = _("Discussion #{time_info}", { time_info = nextEndingDiscussion.issue.state_time_text }),
    5.52 -    initiative = nextEndingDiscussion
    5.53 -  }
    5.54 -end
    5.55 -
    5.56 -if bestInAdmission then
    5.57 -  slides[#slides+1] = {
    5.58 -    title = _"Best not admitted initiative",
    5.59 -    initiative = bestInAdmission
    5.60 -  }
    5.61 -end
    5.62 -
    5.63 -execute.view { 
    5.64 -  module = "slideshow", view = "_slideshow", params = {
    5.65 -    slides = slides
    5.66 -  }
    5.67 -}
     6.1 --- a/app/main/slideshow/_slideshow.lua	Mon Oct 18 11:10:31 2021 +0200
     6.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.3 @@ -1,79 +0,0 @@
     6.4 -local slides = param.get( "slides", "table" )
     6.5 -
     6.6 -local show_slides = {}
     6.7 -
     6.8 -for i, slide in ipairs( slides ) do
     6.9 -  
    6.10 -  if slide.initiative then
    6.11 -    show_slides[ #show_slides + 1 ] = slide
    6.12 -  end
    6.13 -  
    6.14 -end
    6.15 -  
    6.16 -slot.select( "slideshow", function ()
    6.17 -  
    6.18 -  ui.container { attr = { class = "slideshow" }, content = function ()
    6.19 -    
    6.20 -    for i, slide in ipairs( show_slides ) do
    6.21 -      
    6.22 -      if slide.initiative.issue.closed then
    6.23 -        view = "finished"
    6.24 -      elseif slide.initiative.issue.fully_frozen then
    6.25 -        view = "voting"
    6.26 -      elseif slide.initiative.issue.half_frozen then
    6.27 -        view = "verification"
    6.28 -      elseif slide.initiative.issue.admitted then
    6.29 -        view = "discussion"
    6.30 -      else
    6.31 -        view = "admission"
    6.32 -      end
    6.33 -      
    6.34 -      ui.container { attr = { class = "slide slide-" .. i }, content = function ()
    6.35 -
    6.36 -        if slide.initiative.issue.closed then
    6.37 -          util.initiative_pie(slide.initiative, 150)
    6.38 -        end
    6.39 -
    6.40 -        ui.container {
    6.41 -          attr = { class = "slideshowTitle" },
    6.42 -          content = slide.title
    6.43 -        }
    6.44 -
    6.45 -        execute.view {
    6.46 -          module = "initiative", view = "_list_element", params = {
    6.47 -            initiative = slide.initiative
    6.48 -          }
    6.49 -        }
    6.50 -
    6.51 -      end }
    6.52 -      
    6.53 -    end
    6.54 -
    6.55 -    
    6.56 -  end }
    6.57 -    
    6.58 -end )
    6.59 -
    6.60 -ui.script{ script = [[
    6.61 -
    6.62 -var slideshowCurrent = 0;
    6.63 -var slideshowCount = ]] .. #show_slides .. [[ ;
    6.64 -function slideshowShowSlide(i) {
    6.65 -  $(".slideshow .slide").slideUp();
    6.66 -  $(".slideshow .slide-" + i).slideDown();
    6.67 -  slideshowCurrent = i;
    6.68 -}
    6.69 -
    6.70 -function slideshowShowNext() {
    6.71 -  var next = slideshowCurrent + 1;
    6.72 -  if (next > slideshowCount) {
    6.73 -    next = 1;
    6.74 -  }
    6.75 -  slideshowShowSlide(next);
    6.76 -  window.setTimeout(slideshowShowNext, 7500);
    6.77 -}
    6.78 -
    6.79 -slideshowShowNext();
    6.80 -
    6.81 -  
    6.82 -  ]]}
    6.83 \ No newline at end of file
     7.1 --- a/app/main/slideshow/index.lua	Mon Oct 18 11:10:31 2021 +0200
     7.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.3 @@ -1,26 +0,0 @@
     7.4 -local unit = param.get( "unit", "table" )
     7.5 -local area = param.get( "area", "table" )
     7.6 -
     7.7 -local args = {
     7.8 -  unit_id = unit and unit.id or nil,
     7.9 -  area_id = area and area.id or nil
    7.10 -}
    7.11 -
    7.12 -local issues = Issue:new_selector():exec()
    7.13 -
    7.14 -
    7.15 -local slides = {}
    7.16 -
    7.17 -for i, issue in ipairs( issues ) do
    7.18 -  slides[ #slides+1 ] = {
    7.19 -    title = issue.state_name,
    7.20 -    initiative = issue.initiatives[1]
    7.21 -  }
    7.22 -end
    7.23 -
    7.24 -
    7.25 -execute.view { 
    7.26 -  module = "slideshow", view = "_slideshow", params = {
    7.27 -    slides = slides
    7.28 -  }
    7.29 -}
    7.30 \ No newline at end of file
     8.1 --- a/app/main/suggestion/_list.lua	Mon Oct 18 11:10:31 2021 +0200
     8.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.3 @@ -1,103 +0,0 @@
     8.4 -
     8.5 -local initiative = param.get("initiative", "table")
     8.6 -local suggestions_selector = param.get("suggestions_selector", "table")
     8.7 -
     8.8 -suggestions_selector:add_order_by("proportional_order NULLS LAST, plus2_unfulfilled_count + plus1_unfulfilled_count DESC, id")
     8.9 -
    8.10 -local ui_filters = ui.filters
    8.11 -if true or not show_filter then
    8.12 -  ui_filters = function(args) args.content() end
    8.13 -end
    8.14 -
    8.15 -ui.container{ attr = { class = "initiative_head" },
    8.16 -  content = function()
    8.17 -    ui.tag{ tag = "a", attr = { class = "title", name = "suggestions" }, content = _"Suggestions" }
    8.18 -    ui.container{ attr = { class = "content" }, content = function()
    8.19 -      ui.paginate{
    8.20 -        selector = suggestions_selector,
    8.21 -        anchor = "suggestions",
    8.22 -        content = function()
    8.23 -          local suggestions = suggestions_selector:exec()
    8.24 -          if #suggestions < 1 then
    8.25 -            if not initiative.issue.fully_frozen and not initiative.issue.closed then
    8.26 -              ui.tag{ content = _"No suggestions yet" }
    8.27 -            else
    8.28 -              ui.tag{ content = _"No suggestions" }
    8.29 -            end
    8.30 -          else
    8.31 -            ui.list{
    8.32 -              attr = { style = "table-layout: fixed;" },
    8.33 -              records = suggestions,
    8.34 -              columns = {
    8.35 -                {
    8.36 -                  label_attr = { style = "width: 101px;" },
    8.37 -                  content = function(record)
    8.38 -                    if record.minus2_unfulfilled_count then
    8.39 -                      local max_value = record.initiative.supporter_count
    8.40 -                      ui.bargraph{
    8.41 -                        max_value = max_value,
    8.42 -                        width = 100,
    8.43 -                        bars = {
    8.44 -                          { color = "#0a0", value = record.plus2_unfulfilled_count + record.plus2_fulfilled_count },
    8.45 -                          { color = "#8f8", value = record.plus1_unfulfilled_count + record.plus1_fulfilled_count },
    8.46 -                          { color = "#eee", value = max_value - record.minus2_unfulfilled_count - record.minus1_unfulfilled_count - record.minus2_fulfilled_count - record.minus1_fulfilled_count - record.plus1_unfulfilled_count - record.plus2_unfulfilled_count - record.plus1_fulfilled_count - record.plus2_fulfilled_count},
    8.47 -                          { color = "#f88", value = record.minus1_unfulfilled_count + record.minus1_fulfilled_count },
    8.48 -                          { color = "#a00", value = record.minus2_unfulfilled_count + record.minus2_fulfilled_count },
    8.49 -                        }
    8.50 -                      }
    8.51 -                    end
    8.52 -                  end
    8.53 -                },
    8.54 -                {
    8.55 -                  content = function(record)
    8.56 -                    ui.link{
    8.57 -                      text = record.name,
    8.58 -                      module = "suggestion",
    8.59 -                      view = "show",
    8.60 -                      id = record.id
    8.61 -                    }
    8.62 -                    local degree
    8.63 -                    local opinion
    8.64 -                    if app.session.member_id then
    8.65 -                      opinion = Opinion:by_pk(app.session.member.id, record.id)
    8.66 -                    end
    8.67 -                    if opinion then
    8.68 -                      local degrees = {
    8.69 -                        ["-2"] = _"must not",
    8.70 -                        ["-1"] = _"should not",
    8.71 -                        ["0"] = _"neutral",
    8.72 -                        ["1"] = _"should",
    8.73 -                        ["2"] = _"must"
    8.74 -                      }
    8.75 -                      slot.put(" &middot; ")
    8.76 -                      ui.tag{ content = degrees[tostring(opinion.degree)] }
    8.77 -                      slot.put(" &middot; ")
    8.78 -                      if opinion.fulfilled then
    8.79 -                        ui.tag{ content = _"implemented" }
    8.80 -                      else
    8.81 -                        ui.tag{ content = _"not implemented" }
    8.82 -                      end
    8.83 -                    end
    8.84 -                  end
    8.85 -                },
    8.86 -              }
    8.87 -            }
    8.88 -          end
    8.89 -        end
    8.90 -      }
    8.91 -    end }
    8.92 -    if app.session.member_id
    8.93 -      and not initiative.issue.half_frozen
    8.94 -      and not initiative.issue.closed
    8.95 -      and not initiative.revoked
    8.96 -      and app.session.member:has_voting_right_for_unit_id(initiative.issue.area.unit_id)
    8.97 -    then
    8.98 -      ui.container{ attr = { class = "content" }, content = function()
    8.99 -        ui.link{
   8.100 -          module = "suggestion", view = "new", params = { initiative_id = initiative.id },
   8.101 -          text = _"New suggestion"
   8.102 -        }
   8.103 -      end }
   8.104 -    end
   8.105 -  end
   8.106 -}

Impressum / About Us