Advertisement
Steven_AA

Multi-page doPost() w/ Client Handlers & State in TextBox

Aug 9th, 2014
1,051
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Muliple page form using Google Apps Script
  2.  
  3. function doGet(eventInfo)  {return GUI(eventInfo)};
  4. function doPost(eventInfo) {return GUI(eventInfo)};
  5.  
  6. function GUI (eventInfo) {
  7.   var n = (eventInfo.parameter.HiddenState == void(0) ? 0 : parseInt(eventInfo.parameter.HiddenState));
  8.   var ui = ((n == 0)? UiApp.createApplication() : UiApp.getActiveApplication());
  9.   var Form;
  10.   switch(n){
  11.     case -1: {
  12.       Form = ui.createFormPanel().add(ui.createHTML("<H3>Exited by submission of form "+eventInfo.parameter.formId+"</h3>"));
  13.     } break;
  14.     case 0: {
  15. //      setStyleAttributes(ui,css.app);// UiApp does not support the .setStyleAttributes() method
  16. //      var MastHead = ui.createAbsolutePanel().setWidth('auto').setHeight('190').setId('MastHead')
  17. //        .add(ui.createHTML(title).setStyleAttributes(css.title), 265,75)
  18. //      ui.add(MastHead);    
  19.       Form = getForm(eventInfo,n); // Use identical forms for demo purpose only
  20.     } break;
  21.     case 1: {
  22.       Form = getForm(eventInfo,n); // In reality, each form would differ but...
  23.     } break;
  24.     default: {
  25.       Form = getForm(eventInfo,n) // each form must abide by (implement) the hidden HiddenState variable
  26.     } break;
  27.   }
  28.   return ui.add(Form);
  29. };
  30.  
  31. function getForm(eventInfo,n) {
  32.   var ui = UiApp.getActiveApplication();
  33.  
  34.   // Increment the ID stored in a hidden text-box
  35.   var HiddenState = ui.createTextBox().setId('HiddenState').setName('HiddenState').setValue(1+n).setVisible(true).setEnabled(false);
  36.   var H1 = ui.createHTML("<H1>Form "+n+"</H1>");
  37.   var H2 = ui.createHTML(
  38.     "<h2>"+(eventInfo.parameter.formId==void(0)?"":"Created by submission of form "+eventInfo.parameter.formId)+"</h2>");
  39.  
  40.   // Add four submit buttons to go forward, backward, to stay/validate and to exit the form
  41.   var Btn = {};
  42.   Btn.Next = ui.createSubmitButton("Next").setEnabled(true).setVisible(true);
  43.   Btn.Back = ui.createSubmitButton("Back").setEnabled(n>1).setVisible(true);
  44.   Btn.Stay = ui.createSubmitButton("Stay").setEnabled(n>0).setVisible(true);
  45.   Btn.Exit = ui.createSubmitButton("Exit").setEnabled(n>0).setVisible(true);
  46.   var Buttons = ui.createHorizontalPanel().add(Btn.Back).add(Btn.Stay).add(Btn.Next).add(Btn.Exit);
  47.   var Body = ui.createVerticalPanel().add(HiddenState).add(H1).add(H2).add(Buttons).add(getParameters(eventInfo));
  48.   var Form = ui.createFormPanel().setId((n>0?'doPost[':'doGet[')+n+']').add(Body);
  49.  
  50.   // Add client handlers using setText() to adjust HiddenState prior to form submission
  51.   // NB: Use of the .setValue(val) and .setValue(val,bool) methods give runtime errors!
  52.   Btn.Stay.addClickHandler(ui.createClientHandler().forTargets(HiddenState).setText(''+(parseInt(n))));
  53.   Btn.Back.addClickHandler(ui.createClientHandler().forTargets(HiddenState).setText(''+(parseInt(n)-1)));
  54.   Btn.Exit.addClickHandler(ui.createClientHandler().forTargets(HiddenState).setText('-1'));
  55.  
  56.   // Add an event handler executed prior to form submission
  57.   var onFormSubmit = ui.createClientHandler()
  58.   .forTargets(HiddenState).setEnabled(true) // Enable so value gets included in post parameters
  59.   .forTargets(Body).setStyleAttribute("backgroundColor","#EEE");    
  60.   Form.addSubmitHandler(onFormSubmit);
  61.  
  62.   return Form;
  63. }
  64.  
  65. function getParameters(eventInfo) {
  66.   var ui = UiApp.getActiveApplication();
  67.   var panel = ui.createVerticalPanel().add(ui.createLabel("Parameters: "));
  68.   for( p in eventInfo.parameter)
  69.     panel.add(ui.createLabel(" - " + p + " = " + eventInfo.parameter[p]));
  70.   return panel;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement