my_account_notifications.html
88 lines
| 3.3 KiB
| text/html
|
HtmlLexer
r692 | <template is="dom-bind" id="notificationsPage"> | |||
<iron-ajax id="toggleNotifications" | ||||
method="post" | ||||
url="${url('my_account_notifications_toggle_visibility')}" | ||||
content-type="application/json" | ||||
loading="{{changeNotificationsLoading}}" | ||||
on-response="handleNotifications" | ||||
handle-as="json"></iron-ajax> | ||||
r526 | <div class="panel panel-default"> | |||
<div class="panel-heading"> | ||||
r706 | <h3 class="panel-title">${_('Your Live Notification Settings')}</h3> | |||
r526 | </div> | |||
<div class="panel-body"> | ||||
<p><strong>IMPORTANT:</strong> This feature requires enabled channelstream websocket server to function correctly.</p> | ||||
<p class="hidden">Status of browser notifications permission: <strong id="browser-notification-status"></strong></p> | ||||
r692 | <div class="form"> | |||
<div class="fields"> | ||||
<div class="field"> | ||||
<div class="label"> | ||||
r706 | <label for="new_email">${_('Notifications Status')}:</label> | |||
r692 | </div> | |||
<div class="checkboxes"> | ||||
r727 | <rhodecode-toggle id="live-notifications" active="[[changeNotificationsLoading]]" on-change="toggleNotifications" ${'checked' if c.rhodecode_user.get_instance().user_data.get('notification_status') else ''}></rhodecode-toggle> | |||
r692 | </div> | |||
</div> | ||||
<div class="buttons"> | ||||
r704 | <a class="btn btn-default" id="test-notification">Test notification</a> | |||
r692 | </div> | |||
</div> | ||||
</div> | ||||
r526 | ||||
</div> | ||||
</div> | ||||
<script type="application/javascript"> | ||||
r692 | /** because im not creating a custom element for this page | |||
* we need to push the function onto the dom-template | ||||
* ideally we turn this into notification-settings elements | ||||
* then it will be cleaner | ||||
*/ | ||||
var ctrlr = $('#notificationsPage')[0]; | ||||
ctrlr.toggleNotifications = function(event){ | ||||
var ajax = $('#toggleNotifications')[0]; | ||||
ajax.headers = {"X-CSRF-Token": CSRF_TOKEN} | ||||
ajax.body = {notification_status:event.target.active}; | ||||
ajax.generateRequest(); | ||||
}; | ||||
ctrlr.handleNotifications = function(event){ | ||||
r729 | $('#live-notifications')[0].checked = event.detail.response; | |||
r692 | }; | |||
r526 | ||||
function checkBrowserStatus(){ | ||||
var browserStatus = 'Unknown'; | ||||
if (!("Notification" in window)) { | ||||
browserStatus = 'Not supported' | ||||
} | ||||
else if(Notification.permission === 'denied'){ | ||||
browserStatus = 'Denied'; | ||||
$('.flash_msg').append('<div class="alert alert-error">Notifications are blocked on browser level - you need to enable them in your browser settings.</div>') | ||||
} | ||||
else if(Notification.permission === 'granted'){ | ||||
browserStatus = 'Allowed'; | ||||
} | ||||
$('#browser-notification-status').text(browserStatus); | ||||
}; | ||||
checkBrowserStatus(); | ||||
$('#test-notification').on('click', function(e){ | ||||
var levels = ['info', 'error', 'warning', 'success']; | ||||
var level = levels[Math.floor(Math.random()*levels.length)]; | ||||
var payload = { | ||||
message: { | ||||
message: 'This is a test notification.', | ||||
level: level, | ||||
r732 | force: true | |||
r526 | } | |||
}; | ||||
$.Topic('/notifications').publish(payload); | ||||
}) | ||||
</script> | ||||
r692 | </template> | |||