You've already forked oncall
mirror of
https://github.com/linkedin/oncall.git
synced 2025-12-01 23:51:36 +02:00
make "+ ical key" buttons work
This commit is contained in:
@@ -2845,50 +2845,60 @@ var oncall = {
|
||||
pageSource: $('#ical-key-template').html(),
|
||||
settingsSubheaderTemplate: $('#settings-subheader-template').html(),
|
||||
moduleIcalKeyTemplate: $('#module-ical-key-template').html(),
|
||||
moduleIcalKeyCreateTemplate: $('#module-ical-key-create-template').html(),
|
||||
icalKeyCreateForm: '.module-ical-key-create',
|
||||
icalKeyCreateCancel: '.ical-key-create-cancel',
|
||||
icalKeyUserCreateContainer: '.ical-key-user-create-container',
|
||||
icalKeyTeamCreateContainer: '.ical-key-team-create-container',
|
||||
subheaderWrapper: '.subheader-wrapper',
|
||||
icalKeyRow: '.ical-key-row',
|
||||
createIcalKey: '#create-ical-key'
|
||||
createIcalKeyUser: '#create-ical-key-user',
|
||||
createIcalKeyTeam: '#create-ical-key-team'
|
||||
},
|
||||
init: function(){
|
||||
Handlebars.registerHelper('capitalize', function(str){
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
});
|
||||
Handlebars.registerPartial('settings-subheader', this.data.settingsSubheaderTemplate);
|
||||
Handlebars.registerPartial('ical-key', this.data.moduleIcalKeyTemplate);
|
||||
this.getData();
|
||||
},
|
||||
events: function(){
|
||||
router.updatePageLinks();
|
||||
this.data.$page.on('click', this.data.createIcalKey, this.createIcalKey.bind(this));
|
||||
this.data.$page.on('submit', this.data.icalKeyCreateForm, this.createIcalKey.bind(this));
|
||||
this.data.$page.on('click', this.data.icalKeyCreateCancel, this.createIcalKeyCancel.bind(this));
|
||||
this.data.$page.on('click', this.data.createIcalKeyUser, this.createIcalKeyUser.bind(this));
|
||||
this.data.$page.on('click', this.data.createIcalKeyTeam, this.createIcalKeyTeam.bind(this));
|
||||
},
|
||||
getData: function(){
|
||||
var self = this;
|
||||
|
||||
var icalKeyData = {
|
||||
userKeys: [],
|
||||
teamKeys: [],
|
||||
name: oncall.data.user,
|
||||
teams: []
|
||||
};
|
||||
this.data.icalKeyData = icalKeyData;
|
||||
|
||||
if (oncall.data.user) {
|
||||
$.when(
|
||||
$.get(this.data.icalKeyUrl + 'requester/' + oncall.data.user),
|
||||
$.get(this.data.url + oncall.data.user + '/teams')
|
||||
).done(function(icalKeys, teamsData){
|
||||
icalKeys = icalKeys[0];
|
||||
|
||||
var userKeys = [],
|
||||
teamKeys = [];
|
||||
for (var i = 0; i < icalKeys.length; i++) {
|
||||
icalKeys[i].time_created = moment(icalKeys[i].time_created * 1000).format('YYYY/MM/DD HH:mm');
|
||||
if (icalKeys[i].type === 'user')
|
||||
userKeys.push(icalKeys[i]);
|
||||
icalKeyData.userKeys.push(icalKeys[i]);
|
||||
else if (icalKeys[i].type === 'team') {
|
||||
teamKeys.push(icalKeys[i]);
|
||||
icalKeyData.teamKeys.push(icalKeys[i]);
|
||||
}
|
||||
}
|
||||
icalKeys.userKeys = userKeys;
|
||||
icalKeys.teamKeys = teamKeys;
|
||||
icalKeys.name = oncall.data.user;
|
||||
icalKeys.teams = teamsData[0];
|
||||
|
||||
self.renderPage.call(self, icalKeys);
|
||||
icalKeyData.teams = teamsData[0];
|
||||
|
||||
self.renderPage.call(self, icalKeyData);
|
||||
}).fail(function(){
|
||||
self.renderPage.call(self, {});
|
||||
// we need to handle failure because icalKeys promise return 404 when no key exists
|
||||
self.renderPage.call(self, icalKeyData);
|
||||
});
|
||||
} else {
|
||||
router.navigate('/');
|
||||
@@ -2900,8 +2910,58 @@ var oncall = {
|
||||
this.data.$page.html(template(data));
|
||||
this.events();
|
||||
},
|
||||
createIcalKey: function(e, data){
|
||||
console.log(e, data);
|
||||
createIcalKeyUser: function(e, data){
|
||||
var template = Handlebars.compile(this.data.moduleIcalKeyCreateTemplate),
|
||||
$container = $(e.target).parents().find(this.data.icalKeyUserCreateContainer);
|
||||
|
||||
var userCreateData = {
|
||||
createType: 'user',
|
||||
icalKeyOptions: [this.data.icalKeyData.name]
|
||||
};
|
||||
$container.html(template(userCreateData));
|
||||
},
|
||||
createIcalKeyTeam: function(e, data){
|
||||
var template = Handlebars.compile(this.data.moduleIcalKeyCreateTemplate),
|
||||
$container = $(e.target).parents().find(this.data.icalKeyTeamCreateContainer);
|
||||
|
||||
var teamCreateData = {
|
||||
createType: 'team',
|
||||
icalKeyOptions: this.data.icalKeyData.teams
|
||||
};
|
||||
$container.html(template(teamCreateData));
|
||||
},
|
||||
createIcalKey: function(e){
|
||||
e.preventDefault();
|
||||
|
||||
var self = this,
|
||||
$form = $(e.target),
|
||||
$cta = $form.find('.ical-key-create-save'),
|
||||
createType = $form.data('type'),
|
||||
// we cannot trim the name here because there are team names ending in space
|
||||
createName = $form.find('.ical-key-create-name').val(),
|
||||
url = this.data.icalKeyUrl + createType + '/' + createName;
|
||||
|
||||
if ((createType === 'user' || createType === 'team') && createName) {
|
||||
$cta.addClass('loading disabled').prop('disabled', true);
|
||||
|
||||
$.ajax({
|
||||
type: 'POST',
|
||||
url: url,
|
||||
dataType: 'html'
|
||||
}).done(function(data){
|
||||
$form.remove();
|
||||
self.getData();
|
||||
}).fail(function(data){
|
||||
var error = oncall.isJson(data.responseText) ? JSON.parse(data.responseText).description : data.responseText || 'Delete failed.';
|
||||
oncall.alerts.createAlert(error, 'danger');
|
||||
}).always(function(){
|
||||
$cta.removeClass('loading disabled').prop('disabled', false);
|
||||
});
|
||||
}
|
||||
},
|
||||
createIcalKeyCancel: function(e, $caller){
|
||||
var $form = $(e.target).parents(this.data.icalKeyCreateForm);
|
||||
$form.remove();
|
||||
},
|
||||
updateIcalKey: function($modal, $caller){
|
||||
var self = this,
|
||||
@@ -3162,6 +3222,10 @@ var oncall = {
|
||||
return str.replace('#', '');
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('capitalize', function(str){
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
});
|
||||
|
||||
Handlebars.registerHelper('friendlyScheduler', function(str){
|
||||
if (str ==='no-skip-matching') {
|
||||
return 'Default (allow duplicate)';
|
||||
|
||||
@@ -1724,7 +1724,10 @@
|
||||
|
||||
<!-- // ical key view partial -->
|
||||
<script id="module-ical-key-template" type="text/x-handlebars-template">
|
||||
<h3 class="module-heading"> {{capitalize key_type}} Calendar Keys <button id="create-ical-key" class="btn btn-primary pull-right">+ {{capitalize key_type}} Ical Key</button></h3>
|
||||
<h3 class="module-heading"> {{capitalize key_type}} Calendar Keys <button id="create-ical-key-{{key_type}}" class="btn btn-primary pull-right">+ {{capitalize key_type}} Ical Key</button></h3>
|
||||
<div class="ical-key-{{key_type}}-create-container">
|
||||
<!--// create form renders here -->
|
||||
</div>
|
||||
<div class="module">
|
||||
<table width="100%" class="table table-striped">
|
||||
<thead><th>{{capitalize key_type}} Name</th><th>Key</th><th>Time Created</th></thead>
|
||||
@@ -1734,8 +1737,8 @@
|
||||
<td><span>{{this.name}}</span></td>
|
||||
<td><span><a href="{% endraw %}{{public_calendar_base_url}}{% raw %}/{{this.key}}">{{this.key}}</a></span></td>
|
||||
<td><span>{{this.time_created}}</span></td>
|
||||
<td><button id="update-ical-key" class="btn btn-warning btn-sm pull-right" type="button" data-toggle="modal" data-target="#confirm-action-modal" data-modal-action="oncall.settings.ical_key.updateIcalKey" data-modal-title="Regenerate Ical Key for {{this.type}} {{this.name}}" data-modal-content="Regenerate an ical key will invalidate the existing key." data-ical-type="{{this.type}}" data-ical-name="{{this.name}}">Regenerate</button></td>
|
||||
<td><button id="delete-ical-key" class="btn btn-danger btn-sm pull-right" type="button" data-toggle="modal" data-target="#confirm-action-modal" data-modal-action="oncall.settings.ical_key.deleteIcalKey" data-modal-content="Invalidate key {{this.key}}?" data-modal-title="Delete Ical Key for {{this.type}} {{this.name}}" data-ical-key="{{this.key}}">Delete</button></td>
|
||||
<td><button id="update-ical-key" class="btn btn-warning btn-sm pull-right" type="button" data-toggle="modal" data-target="#confirm-action-modal" data-modal-action="oncall.settings.ical_key.updateIcalKey" data-modal-title="Regenerate Ical Key for {{this.type}} {{this.name}}" data-modal-content="Regenerating an ical key will invalidate the existing key." data-ical-type="{{this.type}}" data-ical-name="{{this.name}}">Regenerate</button></td>
|
||||
<td><button id="delete-ical-key" class="btn btn-danger btn-sm pull-right" type="button" data-toggle="modal" data-target="#confirm-action-modal" data-modal-action="oncall.settings.ical_key.deleteIcalKey" data-modal-title="Delete Ical Key for {{this.type}} {{this.name}}" data-modal-content="Invalidate key {{this.key}}?" data-ical-key="{{this.key}}">Delete</button></td>
|
||||
</tr>
|
||||
{{/each}}
|
||||
</tbody>
|
||||
@@ -1743,8 +1746,27 @@
|
||||
</div>
|
||||
</script>
|
||||
|
||||
<!-- // ical key view partial -->
|
||||
<!-- // ical key create partial -->
|
||||
<script id="module-ical-key-create-template" type="text/x-handlebars-template">
|
||||
<form class="module module-card module-ical-key-create" data-type="{{createType}}">
|
||||
<div class="module-heading module-card-heading border-bottom">
|
||||
<h4>Create a new {{createType}} calendar key</h4>
|
||||
</div>
|
||||
<div class="ical-key-create-body">
|
||||
<input class="form-control ical-key-create-name" type="text" list="ical-key-options" />
|
||||
<datalist id="ical-key-options">
|
||||
{{#each icalKeyOptions}}
|
||||
<option value="{{this}}">{{this}}</option>
|
||||
{{/each}}
|
||||
</datalist>
|
||||
</div>
|
||||
<div class="border-top notification-actions clearfix">
|
||||
<div class="pull-right">
|
||||
<button class="btn btn-primary ical-key-create-save" type="submit"><span class="btn-text">Save</span> <i class="loader loader-small"></i> </button>
|
||||
<button class="btn btn-blue ical-key-create-cancel" type="button"> Cancel </button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</script>
|
||||
|
||||
<!--// **********************
|
||||
|
||||
Reference in New Issue
Block a user