'use strict'; pandora.ui.eventsDialog = function(options) { // options can be {id: '...'} or {name: '...'} var height = Math.round((window.innerHeight - 48) * 0.9), width = Math.round(window.innerWidth * 0.9), that = Ox.Dialog({ buttons: [ Ox.Button({ id: 'managePlaces', title: Ox._('Manage Places...') }).bindEvent({ click: function() { that.close(); (pandora.$ui.placesDialog || ( pandora.$ui.placesDialog = pandora.ui.placesDialog() )).open(); } }), {}, Ox.Button({ id: 'exportEvents', title: Ox._('Export Events...') }).bindEvent({ click: function() { var $button = this, keys = ['name', 'alternativeNames', 'start', 'end']; $button.options({disabled: true}); pandora.api.findEvents({ query: {conditions: [], operator: '&'}, keys: keys, range: [0, 1000000], sort: [{key: 'name', operator: '+'}] }, function(result) { pandora.ui.exportDialog({ data: JSON.stringify(result.data.items.map(function(item) { Object.keys(item).filter(function(key) { return !Ox.contains(keys, key); }).forEach(function(key) { delete item[key]; }); return item; }), null, ' '), title: Ox._('Events') }).open(); $button.options({disabled: false}); }); } }), Ox.Button({ id: 'done', title: Ox._('Done'), width: 48 }).bindEvent({ click: function() { that.close(); } }) ], closeButton: true, content: Ox.LoadingScreen().start(), height: height, maximizeButton: true, minHeight: 256, minWidth: 512, padding: 0, title: Ox._('Manage Events'), width: width }) .bindEvent({ resize: function(data) { // setting width would cause an expensive calendar redraw $content && $content.options({ height: data.height }); }, resizeend: function(data) { $content && $content.options({ height: data.height, width: data.width }); } }), $content; pandora.api.findEvents({ query: {conditions: [], operator: '&'} }, function(result) { pandora.api.findEvents({ query: {conditions: [], operator: '&'}, keys: [], range: [0, result.data.items], sort: [{key: 'name', operator: '+'}] }, function(result) { that.options({ content: $content = Ox.CalendarEditor({ addEvent: function(event, callback) { pandora.api.addEvent(event, function(result) { Ox.Request.clearCache(); // fixme: remove callback(result); }); }, editEvent: function(event, callback) { pandora.api.editEvent(event, function(result) { Ox.Request.clearCache(); // fixme: remove callback(result); }); }, events: result.data.items, hasMatches: true, height: height, mode: pandora.site.calendar == 'auto' ? 'add' : 'define', removeEvent: function(event, callback) { pandora.api.removeEvent(event, function(result) { Ox.Request.clearCache(); // fixme: remove callback(result); }); }, selected: options ? options.id : '', showControls: pandora.user.ui.showCalendarControls, width: width }) }); }) }) return that; };