liquid_feedback_frontend

annotate app/main/member/_list.lua @ 19:00d1004545f1

Dynamic interface using XMLHttpRequests, and many other changes

Bugfixes:
- Only allow voting on admitted initiatives
- Repaired issue search
- Don't display delegations for closed issues on member page
- Don't show revoke link in initiative, when issue is already half_frozen
- Localization for voting JavaScript
- Display author of suggestions

Disclosure of voting data after voting is finished:
- Possibility to inspect every ballot including preferences
- Show number of voters preferring one initiative to another initiative

Interface behaviour changes:
- Reversed default order of drafts
- Default order of suggestions changed
- Show new drafts of initiatives only once per day in timeline

Accessibility:
- Barrier-free voting implemented
- POST links are now accessible without JavaScript
- Changed gray for unsatisfied supporters in bar graph to a lighter gray

Other interface improvements:
- Optical enhancements
- Dynamic interface using XMLHttpRequests
- Show usage terms in about section
- Show own membership in area listing
- Show uninformed supporters greyed out and marked with yellow question mark
- Warning box in non-admitted initiatives
- When voted, don't display voting notice and change label of voting link
- Show object counts in more tabulator heads
- Enlarged member statement input field

Miscellaneous:
- Code cleanup
- Added README file containing installation instructions
- Use new WebMCP function ui.filters{...} instead of own ui.filter and ui.order functions
author bsw/jbe
date Sat Feb 20 22:10:31 2010 +0100 (2010-02-20)
parents 72c5e0ee7c98
children b9c8503feff7
rev   line source
bsw/jbe@0 1 local members_selector = param.get("members_selector", "table")
bsw@3 2 local initiative = param.get("initiative", "table")
bsw@3 3 local issue = param.get("issue", "table")
bsw@3 4 local trustee = param.get("trustee", "table")
bsw@10 5 local initiator = param.get("initiator", "table")
bsw@3 6
bsw/jbe@19 7 ui.add_partial_param_names{ "member_list" }
bsw/jbe@19 8
bsw/jbe@19 9 local filter = {
bsw/jbe@19 10 label = _"Order by",
bsw/jbe@19 11 name = "member_list",
bsw/jbe@19 12 {
bsw/jbe@19 13 name = "name",
bsw/jbe@19 14 label = _"A-Z",
bsw/jbe@19 15 selector_modifier = function(selector) selector:add_order_by("name") end
bsw/jbe@19 16 },
bsw/jbe@19 17 {
bsw/jbe@19 18 name = "name_desc",
bsw/jbe@19 19 label = _"Z-A",
bsw/jbe@19 20 selector_modifier = function(selector) selector:add_order_by("name DESC") end
bsw/jbe@19 21 },
bsw@3 22 {
bsw@10 23 name = "newest",
bsw@10 24 label = _"Newest",
bsw/jbe@19 25 selector_modifier = function(selector) selector:add_order_by("created DESC, id DESC") end
bsw@10 26 },
bsw@10 27 {
bsw@10 28 name = "oldest",
bsw@10 29 label = _"Oldest",
bsw/jbe@19 30 selector_modifier = function(selector) selector:add_order_by("created, id") end
bsw@3 31 },
bsw@3 32 }
bsw@3 33
bsw@3 34 if initiative then
bsw/jbe@19 35 filter[#filter] = {
bsw@3 36 name = "delegations",
bsw@3 37 label = _"Delegations",
bsw/jbe@19 38 selector_modifier = function(selector) selector:add_order_by("weight DESC") end
bsw@3 39 }
bsw@3 40 end
bsw/jbe@0 41
bsw/jbe@19 42 ui.filters{
bsw/jbe@19 43 label = _"Change order",
bsw/jbe@0 44 selector = members_selector,
bsw/jbe@19 45 filter,
bsw@2 46 content = function()
bsw@2 47 ui.paginate{
bsw@2 48 selector = members_selector,
bsw@2 49 per_page = 100,
bsw@2 50 content = function()
bsw@2 51 ui.container{
bsw@2 52 attr = { class = "member_list" },
bsw@2 53 content = function()
bsw@3 54 local members = members_selector:exec()
bsw@3 55 local columns = {
bsw@3 56 {
bsw@3 57 label = _"Name",
bsw@3 58 content = function(member)
bsw@3 59 ui.link{
bsw@3 60 module = "member",
bsw@3 61 view = "show",
bsw@3 62 id = member.id,
bsw@3 63 content = function()
bsw@3 64 ui.image{
bsw@3 65 attr = { width = 48, height = 48 },
bsw@3 66 module = "member",
bsw@3 67 view = "avatar",
bsw@3 68 id = member.id,
bsw@3 69 extension = "jpg"
bsw@3 70 }
bsw@3 71 end
bsw@3 72 }
bsw@3 73 end
bsw@3 74 },
bsw@3 75 {
bsw@3 76 label = _"Name",
bsw@3 77 content = function(member)
bsw@3 78 ui.link{
bsw@3 79 module = "member",
bsw@3 80 view = "show",
bsw@3 81 id = member.id,
bsw@3 82 content = member.name
bsw@3 83 }
bsw@3 84 if member.admin then
bsw@3 85 ui.image{
bsw@3 86 attr = {
bsw@3 87 alt = _"Administrator",
bsw@3 88 title = _"Administrator"
bsw@3 89 },
bsw@3 90 static = "icons/16/cog.png"
bsw@3 91 }
bsw@3 92 end
bsw@3 93 -- TODO performance
bsw@3 94 local contact = Contact:by_pk(app.session.member.id, member.id)
bsw@3 95 if contact then
bsw@3 96 ui.image{
bsw@3 97 attr = {
bsw@3 98 alt = _"Saved as contact",
bsw@3 99 title = _"Saved as contact"
bsw@3 100 },
bsw@3 101 static = "icons/16/book_edit.png"
bsw@3 102 }
bsw@3 103 end
bsw@3 104 end
bsw@3 105 }
bsw@3 106 }
bsw@3 107
bsw@3 108 if initiative then
bsw@3 109 columns[#columns+1] = {
bsw@3 110 label = _"Delegations",
bsw@3 111 field_attr = { style = "text-align: right;" },
bsw@3 112 content = function(member)
bsw@3 113 if member.weight > 1 then
bsw@3 114 ui.link{
bsw@3 115 content = member.weight,
bsw@3 116 module = "support",
bsw@3 117 view = "show_incoming",
bsw@3 118 params = { member_id = member.id, initiative_id = initiative.id }
bsw@3 119 }
bsw@3 120 end
bsw@3 121 end
bsw@3 122 }
bsw@3 123 end
bsw@3 124
bsw@3 125 for i, member in ipairs(members) do
bsw@2 126 execute.view{
bsw@2 127 module = "member",
bsw@2 128 view = "_show_thumb",
bsw@10 129 params = {
bsw@10 130 member = member,
bsw@10 131 initiative = initiative,
bsw@10 132 issue = issue,
bsw@10 133 trustee = trustee,
bsw@10 134 initiator = initiator
bsw@10 135 }
bsw/jbe@0 136 }
bsw@2 137 end
bsw/jbe@19 138
bsw/jbe@0 139 end
bsw/jbe@0 140 }
bsw@3 141 slot.put('<br style="clear: left;" />')
bsw@2 142 end
bsw/jbe@0 143 }
bsw/jbe@0 144 end
bsw/jbe@19 145 }

Impressum / About Us