(I don't have time right now to check everything but here is an error I saw...)
In this function :
function createAnotherEvent(e){
var app = UiApp.getActiveApplication();
var numberOfEvents = app.getElementById("noOfEvents");
You are trying to get the value in a widget but what you get is the widget itself (as a UiApp object) so you can't use numberOfEvents++;
that is a method for numbers...
To get a widget value use var numberOfEvents = Number(e.parameter.numberOfEvents);
because e.parameter.numberOfEvents
is actually a string.
If ever you have non decimal value in that string you can get rid of it easily using a simple regex like below :
var numberOfEvents = Number(e.parameter.numberOfEvents.replace(/\D/g,''));
, this way you are sure that only numbers will be passed as value.
EDIT
Found the time to go further...
here is a working version of the code... there were indeed a few details that prevent it to work :
- missing id on noOfEvent
- name of eventTitle was not right (there should be a number added to it because later you setName with numbers
getting 'var event = e.parameter['eventTitle'+i];' , you forgot the '' to build the name
function doGet(){ var app = UiApp.createApplication().setTitle('QuickAdd Events'); //Create a penel which holds all the form elelemnts var parent = app.createHorizontalPanel().setId('parent'); var left = app.createVerticalPanel().setId('left').setWidth(200); var right = app.createVerticalPanel().setId('right'); var noOfEvents = app.createTextBox().setName('noOfEvents').setId('noOfEvents').setValue(1).setWidth(30); var eventTitleLabel = app.createLabel('Event Title:'); var eventTitle = app.createTextBox().setName('eventTitle1').setWidth(200); var eventButton = app.createButton('Create Events'); var childButton = app.createButton('+ Event'); left.add(noOfEvents) .add(eventTitleLabel) .add(eventTitle); right.add(eventButton) .add(childButton); var eventHandler = app.createServerClickHandler('createEvents'); eventHandler.addCallbackElement(left); eventButton.addClickHandler(eventHandler); var panelHandler = app.createServerClickHandler('createAnotherEvent'); panelHandler.addCallbackElement(left); childButton.addClickHandler(panelHandler); parent.add(left) .add(right); app.add(parent); app.close(); return app; } function createAnotherEvent(e){ var app = UiApp.getActiveApplication(); var noOfEvents = Number(e.parameter.noOfEvents.replace(/\D/g,''));; noOfEvents++; app.getElementById('noOfEvents').setValue(noOfEvents); var eventTitleLabel = app.createLabel('Event Title:'); var eventTitle = app.createTextBox().setName('eventTitle'+noOfEvents).setWidth(200); //the new textBox has a new predictable name and you can easily get it in the handler app.getElementById('left').add(eventTitleLabel) .add(eventTitle); return app; } function createEvents(e){ Logger.log(JSON.stringify(e)); var app = UiApp.getActiveApplication(); try{ var noOfEvents = Number(e.parameter.noOfEvents.replace(/\D/g,''));; for (var i = 1; i <= noOfEvents; i++) { var event = e.parameter['eventTitle'+i];; var cal = CalendarApp.getDefaultCalendar(); cal.createEventFromDescription(event); app.add(app.createLabel('Event created Successfully')); } //make the form panel invisible app.getElementById('parent').setVisible(false); return app; } //If an error occurs, show it on the panel catch(e){ app.add(app.createLabel('Error occured: '+e)); return app; }
}