bsw@1045: local return_to = param.get("return_to") bsw/jbe@1309: local return_to_area_id = param.get("return_to_area_id", atom.integer) bsw/jbe@1309: local return_to_area = Area:by_id(return_to_area_id) bsw@1045: bsw@1126: ui.titleMember(_"notification settings") bsw@286: bsw/jbe@1309: ui.grid{ content = function() bsw/jbe@1309: ui.cell_main{ content = function() bsw/jbe@1309: bsw/jbe@1309: ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function() bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function() bsw/jbe@1309: ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = _"notification settings" } bsw/jbe@1309: end } bsw/jbe@1309: ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function() bsw@286: bsw/jbe@1309: ui.form{ bsw/jbe@1309: attr = { class = "vertical" }, bsw/jbe@1309: module = "member", bsw/jbe@1309: action = "update_notify_level", bsw/jbe@1309: routing = { bsw/jbe@1309: ok = { bsw/jbe@1309: mode = "redirect", bsw/jbe@1309: module = return_to == "area" and "index" or return_to == "home" and "index" or "member", bsw/jbe@1309: view = return_to == "area" and "index" or return_to == "home" and "index" or "settings", bsw/jbe@1309: params = return_to_area and { unit = return_to_area.unit_id, area = return_to_area.id } or nil bsw@1045: } bsw/jbe@1309: }, bsw/jbe@1309: content = function() bsw@1485: bsw/jbe@1309: ui.container{ content = function() bsw/jbe@1309: ui.tag{ tag = "label", attr = { bsw@1485: class = "mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect", bsw/jbe@1309: ["for"] = "notify_level_all" bsw/jbe@1309: }, bsw/jbe@1309: content = function() bsw/jbe@1309: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: id = "notify_level_all", bsw@1485: class = "mdl-checkbox__input", bsw@1485: type = "checkbox", name = "enable_notifications", value = "true", bsw/jbe@1309: checked = not app.session.member.disable_notifications and "checked" or nil, bsw@1485: onchange = [[ display = document.getElementById("view_on_notify_level_all_false").style.display = this.checked ? "block" : "none"; ]] bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: ui.tag{ bsw@1485: attr = { class = "mdl-checkbox__label", ['for'] = "notify_level_all" }, bsw/jbe@1309: content = _"I like to receive notifications" bsw/jbe@1309: } bsw/jbe@1309: end bsw@1261: } bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: bsw@1485: ui.container{ attr = { id = "view_on_notify_level_all_false" }, content = function() bsw/jbe@1309: slot.put("
") bsw/jbe@1309: bsw/jbe@1309: ui.container{ content = _"You will receive status update notification on issue phase changes. Additionally you can subscribe for a regular digest including updates on initiative drafts and new suggestions." } bsw/jbe@1309: slot.put("
") bsw/jbe@1309: ui.container{ content = function() bsw/jbe@1309: ui.tag{ tag = "label", attr = { bsw@1485: class = "mdl-checkbox mdl-js-checkbox mdl-js-ripple-effect", bsw/jbe@1309: ["for"] = "digest_on" bsw/jbe@1309: }, bsw/jbe@1309: content = function() bsw/jbe@1309: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: id = "digest_on", bsw@1485: class = "mdl-checkbox__input", bsw@1485: type = "checkbox", name = "digest", value = "true", bsw@1485: checked = app.session.member.notification_hour ~= nil and "checked" or nil, bsw@1485: onchange = [[ display = document.getElementById("view_on_digest_true").style.display = this.checked ? "block" : "none"; ]] bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: ui.tag{ bsw@1485: attr = { class = "mdl-checkbox__label", ['for'] = "digest_on" }, bsw/jbe@1309: content = _"I want to receive a regular digest" bsw/jbe@1309: } bsw/jbe@1309: end bsw/jbe@1309: } bsw/jbe@1309: end } bsw/jbe@1309: bsw@1485: ui.container{ attr = { id = "view_on_digest_true", style = "margin-left: 4em;" }, content = function() bsw/jbe@1309: bsw/jbe@1309: ui.tag{ content = _"every" } bsw/jbe@1309: slot.put(" ") bsw/jbe@1309: ui.field.select{ bsw/jbe@1309: container_attr = { style = "display: inline-block; vertical-align: middle;" }, bsw/jbe@1309: attr = { style = "width: 10em;" }, bsw/jbe@1309: name = "notification_dow", bsw/jbe@1309: foreign_records = { bsw/jbe@1309: { id = "daily", name = _"day" }, bsw/jbe@1309: { id = 0, name = _"Sunday" }, bsw/jbe@1309: { id = 1, name = _"Monday" }, bsw/jbe@1309: { id = 2, name = _"Tuesday" }, bsw/jbe@1309: { id = 3, name = _"Wednesday" }, bsw/jbe@1309: { id = 4, name = _"Thursday" }, bsw/jbe@1309: { id = 5, name = _"Friday" }, bsw/jbe@1309: { id = 6, name = _"Saturday" } bsw/jbe@1309: }, bsw/jbe@1309: foreign_id = "id", bsw/jbe@1309: foreign_name = "name", bsw/jbe@1309: value = app.session.member.notification_dow bsw/jbe@1309: } bsw/jbe@1309: bsw/jbe@1309: slot.put(" ") bsw/jbe@1309: bsw/jbe@1309: ui.tag{ content = _"between" } bsw/jbe@1309: slot.put(" ") bsw/jbe@1309: local foreign_records = {} bsw/jbe@1309: for i = 0, 23 do bsw/jbe@1309: foreign_records[#foreign_records+1] = { bsw/jbe@1309: id = i, bsw/jbe@1309: name = string.format("%02d:00 - %02d:59", i, i), bsw/jbe@1309: } bsw/jbe@1309: end bsw/jbe@1309: local random_hour bsw/jbe@1309: if app.session.member.disable_notifications or app.session.member.notification_hour == nil then bsw/jbe@1309: random_hour = multirand.integer(0,23) bsw/jbe@1309: end bsw/jbe@1309: ui.field.select{ bsw/jbe@1309: container_attr = { style = "display: inline-block; vertical-align: middle;" }, bsw/jbe@1309: attr = { style = "width: 10em;" }, bsw/jbe@1309: name = "notification_hour", bsw/jbe@1309: foreign_records = foreign_records, bsw/jbe@1309: foreign_id = "id", bsw/jbe@1309: foreign_name = "name", bsw/jbe@1309: value = random_hour or app.session.member.notification_hour bsw/jbe@1309: } bsw/jbe@1309: end } bsw@1485: bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: slot.put("
") bsw/jbe@1309: bsw@1485: if app.session.member.disable_notifications then bsw@1485: ui.script{ script = [[ document.getElementById("view_on_notify_level_all_false").style.display = "none"; ]] } bsw@1485: end bsw/jbe@1309: bsw@1485: if app.session.member.notification_hour == nil then bsw@1485: ui.script{ script = [[ document.getElementById("view_on_digest_true").style.display = "none"; ]] } bsw@1485: end bsw@1485: bsw/jbe@1309: slot.put("
") bsw/jbe@1309: bsw@1261: ui.tag{ bsw/jbe@1309: tag = "input", bsw/jbe@1309: attr = { bsw/jbe@1309: type = "submit", bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored", bsw/jbe@1309: value = _"Save" bsw/jbe@1309: }, bsw/jbe@1309: content = "" bsw@1261: } bsw/jbe@1309: slot.put("   ") bsw@1261: bsw@1261: slot.put(" ") bsw/jbe@1309: if return_to == "home" then bsw/jbe@1309: ui.link { bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, bsw/jbe@1309: module = "index", view = "index", bsw/jbe@1309: content = _"cancel" bsw/jbe@1309: } bsw/jbe@1309: else bsw/jbe@1309: ui.link { bsw@1644: attr = { class = "mdl-button mdl-js-button" }, bsw@1644: module = "member", view = "show", id = app.session.member_id, bsw@1644: content = _"Cancel" bsw@1261: } bsw@1261: end bsw/jbe@1309: bsw/jbe@1309: end bsw/jbe@1309: } bsw@1255: bsw/jbe@1309: end } bsw/jbe@1309: end } bsw/jbe@1309: end } bsw@1282: bsw/jbe@1309: ui.cell_sidebar{ content = function() bsw/jbe@1309: execute.view { bsw/jbe@1309: module = "member", view = "_sidebar_whatcanido", params = { bsw/jbe@1309: member = app.session.member bsw/jbe@1309: } bsw/jbe@1309: } bsw/jbe@1309: end } bsw/jbe@1309: bsw/jbe@1309: end }