/// /// declare namespace GoogleAppsScript { namespace Forms { /** * An enum representing the supported types of image alignment. Alignment types can be accessed from * FormApp.Alignment. * * // Open a form by ID and add a new image item with alignment * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png'); * form.addImageItem() * .setImage(img) * .setAlignment(FormApp.Alignment.CENTER); */ enum Alignment { LEFT, CENTER, RIGHT, } /** * A question item, presented as a grid of columns and rows, that allows the respondent to select * multiple choices per row from a sequence of checkboxes. Items can be accessed or created from a * Form. * * // Open a form by ID and add a new checkgox grid item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addCheckboxGridItem(); * item.setTitle('Where did you celebrate New Years?') * .setRows(['New York', 'San Francisco', 'London']) * .setColumns(['2014', '2015', '2016', '2017']); */ interface CheckboxGridItem { clearValidation(): CheckboxGridItem; createResponse(responses: string[][]): ItemResponse; duplicate(): CheckboxGridItem; getColumns(): string[]; getHelpText(): string; getId(): Integer; getIndex(): Integer; getRows(): string[]; getTitle(): string; getType(): ItemType; isRequired(): boolean; setColumns(columns: string[]): CheckboxGridItem; setHelpText(text: string): CheckboxGridItem; setRequired(enabled: boolean): CheckboxGridItem; setRows(rows: string[]): CheckboxGridItem; setTitle(title: string): CheckboxGridItem; setValidation(validation: CheckboxGridValidation): CheckboxGridItem; } /** * A DataValidation for a CheckboxGridItem. * * // Add a checkbox grid item to a form and require one response per column. * var checkboxGridItem = form.addCheckboxGridItem(); * checkboxGridItem.setTitle('Where did you celebrate New Years?') * .setRows(['New York', 'San Francisco', 'London']) * .setColumns(['2014', '2015', '2016', '2017']); * var checkboxGridValidation = FormApp.createCheckboxGridValidation() * .setHelpText(“Select one item per column.”) * .requireLimitOneResponsePerColumn() * .build(); * checkboxGridItem.setValidation(checkboxGridValidation); */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface CheckboxGridValidation { } /** * A DataValidationBuilder for a CheckboxGridValidation. * * // Add a checkbox grid item to a form and restrict it to one response per column. * var checkboxGridItem = form.addCheckboxGridItem(); * checkboxGridItem.setTitle('Where did you celebrate New Years?') * .setRows(['New York', 'San Francisco', 'London']) * .setColumns(['2014', '2015', '2016', '2017']); * var checkboxGridValidation = FormApp.createcheckboxGridValidation() * .setHelpText(“Select one item per column.”) * .requireLimitOneResponsePerColumn() * .build(); * checkboxGridItem.setValidation(checkboxGridValidation); */ interface CheckboxGridValidationBuilder { requireLimitOneResponsePerColumn(): CheckboxGridValidationBuilder; build(): CheckboxGridValidation; setHelpText(text: string): CheckboxGridValidationBuilder; } /** * A question item that allows the respondent to select one or more checkboxes, as well as an * optional "other" field. Items can be accessed or created from a Form. When used in a * quiz, these items are autograded. * * // Open a form by ID and add a new checkbox item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addCheckboxItem(); * item.setTitle('What condiments would you like on your hot dog?') * .setChoices([ * item.createChoice('Ketchup'), * item.createChoice('Mustard'), * item.createChoice('Relish') * ]) * .showOtherOption(true); */ interface CheckboxItem { clearValidation(): CheckboxItem; createChoice(value: string): Choice; createChoice(value: string, isCorrect: boolean): Choice; createResponse(responses: string[]): ItemResponse; duplicate(): CheckboxItem; getChoices(): Choice[]; getFeedbackForCorrect(): QuizFeedback; getFeedbackForIncorrect(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; hasOtherOption(): boolean; isRequired(): boolean; setChoiceValues(values: string[]): CheckboxItem; setChoices(choices: Choice[]): CheckboxItem; setFeedbackForCorrect(feedback: QuizFeedback): CheckboxItem; setFeedbackForIncorrect(feedback: QuizFeedback): CheckboxItem; setHelpText(text: string): CheckboxItem; setPoints(points: Integer): CheckboxItem; setRequired(enabled: boolean): CheckboxItem; setTitle(title: string): CheckboxItem; setValidation(validation: CheckboxValidation): CheckboxItem; showOtherOption(enabled: boolean): CheckboxItem; } /** * A DataValidation for a CheckboxItem. * * // Add a checkBox item to a form and require exactly two selections. * var checkBoxItem = form.addCheckboxItem(); * checkBoxItem.setTitle('What two condiments would you like on your hot dog?'); * checkBoxItem.setChoices([ * checkBoxItem.createChoice('Ketchup'), * checkBoxItem.createChoice('Mustard'), * checkBoxItem.createChoice('Relish') * ]); * var checkBoxValidation = FormApp.createCheckboxValidation() * .setHelpText(“Select two condiments.”) * .requireSelectExactly(2) * .build(); * checkBoxItem.setValidation(checkBoxValidation); */ interface CheckboxValidation { requireSelectAtLeast(number: Integer): CheckboxValidation; requireSelectAtMost(number: Integer): CheckboxValidation; requireSelectExactly(number: Integer): CheckboxValidation; } /** * A DataValidationBuilder for a CheckboxValidation. * * // Add a checkBox item to a form and require exactly two selections. * var checkBoxItem = form.addCheckboxItem(); * checkBoxItem.setTitle('What two condiments would you like on your hot dog?'); * checkBoxItem.setChoices([ * checkBoxItem.createChoice('Ketchup'), * checkBoxItem.createChoice('Mustard'), * checkBoxItem.createChoice('Relish') * ]); * var checkBoxValidation = FormApp.createCheckboxValidation() * .setHelpText(“Select two condiments.”) * .requireSelectExactly(2) * .build(); * checkBoxItem.setValidation(checkBoxValidation); */ interface CheckboxValidationBuilder { requireSelectAtLeast(number: Integer): CheckboxValidationBuilder; requireSelectAtMost(number: Integer): CheckboxValidationBuilder; requireSelectExactly(number: Integer): CheckboxValidationBuilder; build(): CheckboxValidation; setHelpText(text: string): CheckboxValidationBuilder; } /** * A single choice associated with a type of Item that supports choices, like CheckboxItem, ListItem, or MultipleChoiceItem. * * // Create a new form and add a multiple-choice item. * var form = FormApp.create('Form Name'); * var item = form.addMultipleChoiceItem(); * item.setTitle('Do you prefer cats or dogs?') * .setChoices([ * item.createChoice('Cats', FormApp.PageNavigationType.CONTINUE), * item.createChoice('Dogs', FormApp.PageNavigationType.RESTART) * ]); * * // Add another page because navigation has no effect on the last page. * form.addPageBreakItem().setTitle('You chose well!'); * * // Log the navigation types that each choice results in. * var choices = item.getChoices(); * for (var i = 0; i < choices.length; i++) { * Logger.log('If the respondent chooses "%s", the form will %s.', * choices[i].getValue(), * choices[i].getPageNavigationType()); * } */ interface Choice { getGotoPage(): PageBreakItem; getPageNavigationType(): PageNavigationType; getValue(): string; isCorrectAnswer(): boolean; } /** * A question item that allows the respondent to indicate a date. Items can be accessed or created * from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new date item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addDateItem(); * item.setTitle('When were you born?'); */ interface DateItem { createResponse(response: Base.Date): ItemResponse; duplicate(): DateItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; includesYear(): boolean; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): DateItem; setHelpText(text: string): DateItem; setIncludesYear(enableYear: boolean): DateItem; setPoints(points: Integer): DateItem; setRequired(enabled: boolean): DateItem; setTitle(title: string): DateItem; } /** * A question item that allows the respondent to indicate a date and time. Items can be accessed or * created from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new date-time item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addDateTimeItem(); * item.setTitle('When do you want to meet?'); */ interface DateTimeItem { createResponse(response: Base.Date): ItemResponse; duplicate(): DateTimeItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; includesYear(): boolean; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): DateTimeItem; setHelpText(text: string): DateTimeItem; setIncludesYear(enableYear: boolean): DateTimeItem; setPoints(points: Integer): DateTimeItem; setRequired(enabled: boolean): DateTimeItem; setTitle(title: string): DateTimeItem; } /** * An enum representing the supported types of form-response destinations. All forms, including * those that do not have a destination set explicitly, save a copy of responses in the form's * response store. Destination types can be accessed from FormApp.DestinationType. * * // Open a form by ID and create a new spreadsheet. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var ss = SpreadsheetApp.create('Spreadsheet Name'); * * // Update the form's response destination. * form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId()); */ enum DestinationType { SPREADSHEET, } /** * A question item that allows the respondent to indicate a length of time. Items can be accessed or * created from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new duration item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addDurationItem(); * item.setTitle('How long can you hold your breath?'); */ interface DurationItem { createResponse(hours: Integer, minutes: Integer, seconds: Integer): ItemResponse; duplicate(): DurationItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): DurationItem; setHelpText(text: string): DurationItem; setPoints(points: Integer): DurationItem; setRequired(enabled: boolean): DurationItem; setTitle(title: string): DurationItem; } /** * An enum representing the supported types of feedback. Feedback types can be accessed from FormApp.FeedbackType. * * // Open a form by ID and add a new list item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addListItem(); * item.setTitle('Do you prefer cats or dogs?'); * // Set "Dogs" as the correct answer to this question. * item.setChoices([ * item.createChoice('Dogs', true), * item.createChoice('Cats', false)]); * // Add feedback which will be shown for correct responses; ie "Dogs". * item.setFeedbackForCorrect( * FormApp.createFeedback().setDisplayText("Dogs rule, cats drool.").build()); */ enum FeedbackType { CORRECT, INCORRECT, GENERAL, } /** * A form that contains overall properties and items. Properties include title, settings, and where * responses are stored. Items include question items like checkboxes or radio items, while layout * items refer to things like page breaks. Forms can be accessed or created from FormApp. * * // Open a form by ID and create a new spreadsheet. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var ss = SpreadsheetApp.create('Spreadsheet Name'); * * // Update form properties via chaining. * form.setTitle('Form Name') * .setDescription('Description of form') * .setConfirmationMessage('Thanks for responding!') * .setAllowResponseEdits(true) * .setAcceptingResponses(false); * * // Update the form's response destination. * form.setDestination(FormApp.DestinationType.SPREADSHEET, ss.getId()); */ interface Form { addCheckboxGridItem(): CheckboxGridItem; addCheckboxItem(): CheckboxItem; addDateItem(): DateItem; addDateTimeItem(): DateTimeItem; addDurationItem(): DurationItem; addEditor(emailAddress: string): Form; addEditor(user: Base.User): Form; addEditors(emailAddresses: string[]): Form; addGridItem(): GridItem; addImageItem(): ImageItem; addListItem(): ListItem; addMultipleChoiceItem(): MultipleChoiceItem; addPageBreakItem(): PageBreakItem; addParagraphTextItem(): ParagraphTextItem; addScaleItem(): ScaleItem; addSectionHeaderItem(): SectionHeaderItem; addTextItem(): TextItem; addTimeItem(): TimeItem; addVideoItem(): VideoItem; canEditResponse(): boolean; collectsEmail(): boolean; createResponse(): FormResponse; deleteAllResponses(): Form; deleteItem(index: Integer): void; deleteItem(item: Item): void; deleteResponse(responseId: string): Form; getConfirmationMessage(): string; getCustomClosedFormMessage(): string; getDescription(): string; getDestinationId(): string; getDestinationType(): DestinationType; getEditUrl(): string; getEditors(): Base.User[]; getId(): string; getItemById(id: Integer): Item; getItems(): Item[]; getItems(itemType: ItemType): Item[]; getPublishedUrl(): string; getResponse(responseId: string): FormResponse; getResponses(): FormResponse[]; getResponses(timestamp: Base.Date): FormResponse[]; getShuffleQuestions(): boolean; getSummaryUrl(): string; getTitle(): string; hasLimitOneResponsePerUser(): boolean; hasProgressBar(): boolean; hasRespondAgainLink(): boolean; isAcceptingResponses(): boolean; isPublishingSummary(): boolean; isQuiz(): boolean; moveItem(from: Integer, to: Integer): Item; moveItem(item: Item, toIndex: Integer): Item; removeDestination(): Form; removeEditor(emailAddress: string): Form; removeEditor(user: Base.User): Form; requiresLogin(): boolean; setAcceptingResponses(enabled: boolean): Form; setAllowResponseEdits(enabled: boolean): Form; setCollectEmail(collect: boolean): Form; setConfirmationMessage(message: string): Form; setCustomClosedFormMessage(message: string): Form; setDescription(description: string): Form; setDestination(type: DestinationType, id: string): Form; setIsQuiz(enabled: boolean): Form; setLimitOneResponsePerUser(enabled: boolean): Form; setProgressBar(enabled: boolean): Form; setPublishingSummary(enabled: boolean): Form; setRequireLogin(requireLogin: boolean): Form; setShowLinkToRespondAgain(enabled: boolean): Form; setShuffleQuestions(shuffle: boolean): Form; setTitle(title: string): Form; shortenFormUrl(url: string): string; submitGrades(responses: FormResponse[]): Form; } /** * Allows a script to open an existing Form or create a new one. * * // Open a form by ID. * var existingForm = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * * // Create and open a form. * var newForm = FormApp.create('Form Name'); */ interface FormApp { Alignment: typeof Alignment; DestinationType: typeof DestinationType; FeedbackType: typeof FeedbackType; ItemType: typeof ItemType; PageNavigationType: typeof PageNavigationType; create(title: string): Form; createCheckboxGridValidation(): CheckboxGridValidationBuilder; createCheckboxValidation(): CheckboxValidationBuilder; createFeedback(): QuizFeedbackBuilder; createGridValidation(): GridValidationBuilder; createParagraphTextValidation(): ParagraphTextValidationBuilder; createTextValidation(): TextValidationBuilder; getActiveForm(): Form; getUi(): Base.Ui; openById(id: string): Form; openByUrl(url: string): Form; } /** * A response to the form as a whole. A FormResponse can be used in three ways: to access * the answers submitted by a respondent (see getItemResponses()), to programmatically * submit a response to the form (see withItemResponse(response) and submit()), and to generate a URL for the form which pre-fills fields using the provided * answers. FormResponses can be created or accessed from a Form. * * // Open a form by ID and log the responses to each question. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var formResponses = form.getResponses(); * for (var i = 0; i < formResponses.length; i++) { * var formResponse = formResponses[i]; * var itemResponses = formResponse.getItemResponses(); * for (var j = 0; j < itemResponses.length; j++) { * var itemResponse = itemResponses[j]; * Logger.log('Response #%s to the question "%s" was "%s"', * (i + 1).toString(), * itemResponse.getItem().getTitle(), * itemResponse.getResponse()); * } * } */ interface FormResponse { getEditResponseUrl(): string; getGradableItemResponses(): ItemResponse[]; getGradableResponseForItem(item: Item): ItemResponse; getId(): string; getItemResponses(): ItemResponse[]; getRespondentEmail(): string; getResponseForItem(item: Item): ItemResponse; getTimestamp(): Base.Date; submit(): FormResponse; toPrefilledUrl(): string; withItemGrade(gradedResponse: ItemResponse): FormResponse; withItemResponse(response: ItemResponse): FormResponse; } /** * A question item, presented as a grid of columns and rows, that allows the respondent to select * one choice per row from a sequence of radio buttons. Items can be accessed or created from a * Form. * * // Open a form by ID and add a new grid item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addGridItem(); * item.setTitle('Rate your interests') * .setRows(['Cars', 'Computers', 'Celebrities']) * .setColumns(['Boring', 'So-so', 'Interesting']); */ interface GridItem { clearValidation(): GridItem; createResponse(responses: string[]): ItemResponse; duplicate(): GridItem; getColumns(): string[]; getHelpText(): string; getId(): Integer; getIndex(): Integer; getRows(): string[]; getTitle(): string; getType(): ItemType; isRequired(): boolean; setColumns(columns: string[]): GridItem; setHelpText(text: string): GridItem; setRequired(enabled: boolean): GridItem; setRows(rows: string[]): GridItem; setTitle(title: string): GridItem; setValidation(validation: GridValidation): GridItem; } /** * A DataValidation for a GridItem. * * // Add a grid item to a form and require one response per column. * var gridItem = form.addGridItem(); * gridItem.setTitle('Rate your interests') * .setRows(['Cars', 'Computers', 'Celebrities']) * .setColumns(['Boring', 'So-so', 'Interesting']); * var gridValidation = FormApp.createGridValidation() * .setHelpText(“Select one item per column.”) * .requireLimitOneResponsePerColumn() * .build(); * gridItem.setValidation(gridValidation); */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface GridValidation { } /** * A DataValidationBuilder for a GridValidation. * * // Add a grid item to a form and require one response per column. * var gridItem = form.addGridItem(); * gridItem.setTitle('Rate your interests') * .setRows(['Cars', 'Computers', 'Celebrities']) * .setColumns(['Boring', 'So-so', 'Interesting']); * var gridValidation = FormApp.createGridValidation() * .setHelpText(“Select one item per column.”) * .requireLimitOneResponsePerColumn() * .build(); * gridItem.setValidation(gridValidation); */ interface GridValidationBuilder { requireLimitOneResponsePerColumn(): GridValidationBuilder; build(): GridValidation; setHelpText(text: string): GridValidationBuilder; } /** * A layout item that displays an image. Items can be accessed or created from a Form. * * // Open a form by ID and add a new image item * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var img = UrlFetchApp.fetch('https://www.google.com/images/srpr/logo4w.png'); * form.addImageItem() * .setTitle('Google') * .setHelpText('Google Logo') // The help text is the image description * .setImage(img); */ interface ImageItem { duplicate(): ImageItem; getAlignment(): Alignment; getHelpText(): string; getId(): Integer; getImage(): Base.Blob; getIndex(): Integer; getTitle(): string; getType(): ItemType; getWidth(): Integer; setAlignment(alignment: Alignment): ImageItem; setHelpText(text: string): ImageItem; setImage(image: Base.BlobSource): ImageItem; setTitle(title: string): ImageItem; setWidth(width: Integer): ImageItem; } /** * A generic form item that contains properties common to all items, such as title and help text. * Items can be accessed or created from a Form. * * To operate on type-specific properties, use getType() to check the item's ItemType, then cast the item to the * appropriate class using a method like asCheckboxItem(). * * // Create a new form and add a text item. * var form = FormApp.create('Form Name'); * form.addTextItem(); * * // Access the text item as a generic item. * var items = form.getItems(); * var item = items[0]; * * // Cast the generic item to the text-item class. * if (item.getType() == 'TEXT') { * var textItem = item.asTextItem(); * textItem.setRequired(false); * } * * Implementing classes * * NameBrief description */ interface Item { asCheckboxGridItem(): CheckboxGridItem; asCheckboxItem(): CheckboxItem; asDateItem(): DateItem; asDateTimeItem(): DateTimeItem; asDurationItem(): DurationItem; asGridItem(): GridItem; asImageItem(): ImageItem; asListItem(): ListItem; asMultipleChoiceItem(): MultipleChoiceItem; asPageBreakItem(): PageBreakItem; asParagraphTextItem(): ParagraphTextItem; asScaleItem(): ScaleItem; asSectionHeaderItem(): SectionHeaderItem; asTextItem(): TextItem; asTimeItem(): TimeItem; asVideoItem(): VideoItem; duplicate(): Item; getHelpText(): string; getId(): Integer; getIndex(): Integer; getTitle(): string; getType(): ItemType; setHelpText(text: string): Item; setTitle(title: string): Item; } /** * A response to one question item within a form. Item responses can be accessed from FormResponse and created from any Item that asks the respondent to answer a question. * * // Open a form by ID and log the responses to each question. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var formResponses = form.getResponses(); * for (var i = 0; i < formResponses.length; i++) { * var formResponse = formResponses[i]; * var itemResponses = formResponse.getItemResponses(); * for (var j = 0; j < itemResponses.length; j++) { * var itemResponse = itemResponses[j]; * Logger.log('Response #%s to the question "%s" was "%s"', * (i + 1).toString(), * itemResponse.getItem().getTitle(), * itemResponse.getResponse()); * } * } */ interface ItemResponse { getFeedback(): QuizFeedback; getItem(): Item; getResponse(): string[][] | string[] | string; getScore(): number; setFeedback(feedback: any): ItemResponse; setScore(score: any): ItemResponse; } /** * An enum representing the supported types of form items. Item types can be accessed from FormApp.ItemType. * * // Open a form by ID and add a new section header. * var form = FormApp.create('Form Name'); * var item = form.addSectionHeaderItem(); * item.setTitle('Title of new section'); * * // Check the item type. * if (item.getType() == FormApp.ItemType.SECTION_HEADER) { * item.setHelpText('Description of new section.'); * } */ enum ItemType { CHECKBOX, CHECKBOX_GRID, DATE, DATETIME, DURATION, GRID, IMAGE, LIST, MULTIPLE_CHOICE, PAGE_BREAK, PARAGRAPH_TEXT, SCALE, SECTION_HEADER, TEXT, TIME, VIDEO, FILE_UPLOAD, } /** * A question item that allows the respondent to select one choice from a drop-down list. Items can * be accessed or created from a Form. * * // Open a form by ID and add a new list item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addListItem(); * item.setTitle('Do you prefer cats or dogs?') * .setChoices([ * item.createChoice('Cats'), * item.createChoice('Dogs') * ]); */ interface ListItem { createChoice(value: string): Choice; createChoice(value: string, isCorrect: boolean): Choice; createChoice(value: string, navigationItem: PageBreakItem): Choice; createChoice(value: string, navigationType: PageNavigationType): Choice; createResponse(response: string): ItemResponse; duplicate(): ListItem; getChoices(): Choice[]; getFeedbackForCorrect(): QuizFeedback; getFeedbackForIncorrect(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; isRequired(): boolean; setChoiceValues(values: string[]): ListItem; setChoices(choices: Choice[]): ListItem; setFeedbackForCorrect(feedback: QuizFeedback): ListItem; setFeedbackForIncorrect(feedback: QuizFeedback): ListItem; setHelpText(text: string): ListItem; setPoints(points: Integer): ListItem; setRequired(enabled: boolean): ListItem; setTitle(title: string): ListItem; } /** * A question item that allows the respondent to select one choice from a list of radio buttons or * an optional "other" field. Items can be accessed or created from a Form. When used in a * quiz, these items are autograded. * * // Open a form by ID and add a new multiple choice item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addMultipleChoiceItem(); * item.setTitle('Do you prefer cats or dogs?') * .setChoices([ * item.createChoice('Cats'), * item.createChoice('Dogs') * ]) * .showOtherOption(true); */ interface MultipleChoiceItem { createChoice(value: string): Choice; createChoice(value: string, isCorrect: boolean): Choice; createChoice(value: string, navigationItem: PageBreakItem): Choice; createChoice(value: string, navigationType: PageNavigationType): Choice; createResponse(response: string): ItemResponse; duplicate(): MultipleChoiceItem; getChoices(): Choice[]; getFeedbackForCorrect(): QuizFeedback; getFeedbackForIncorrect(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; hasOtherOption(): boolean; isRequired(): boolean; setChoiceValues(values: string[]): MultipleChoiceItem; setChoices(choices: Choice[]): MultipleChoiceItem; setFeedbackForCorrect(feedback: QuizFeedback): MultipleChoiceItem; setFeedbackForIncorrect(feedback: QuizFeedback): MultipleChoiceItem; setHelpText(text: string): MultipleChoiceItem; setPoints(points: Integer): MultipleChoiceItem; setRequired(enabled: boolean): MultipleChoiceItem; setTitle(title: string): MultipleChoiceItem; showOtherOption(enabled: boolean): MultipleChoiceItem; } /** * A layout item that marks the start of a page. Items can be accessed or created from a Form. * * // Create a form and add three page-break items. * var form = FormApp.create('Form Name'); * var pageTwo = form.addPageBreakItem().setTitle('Page Two'); * var pageThree = form.addPageBreakItem().setTitle('Page Three'); * * // Make the first two pages navigate elsewhere upon completion. * pageTwo.setGoToPage(pageThree); // At end of page one (start of page two), jump to page three * pageThree.setGoToPage(FormApp.PageNavigationType.RESTART); // At end of page two, restart form */ interface PageBreakItem { duplicate(): PageBreakItem; getGoToPage(): PageBreakItem; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPageNavigationType(): PageNavigationType; getTitle(): string; getType(): ItemType; setGoToPage(goToPageItem: PageBreakItem): PageBreakItem; setGoToPage(navigationType: PageNavigationType): PageBreakItem; setHelpText(text: string): PageBreakItem; setTitle(title: string): PageBreakItem; } /** * An enum representing the supported types of page navigation. Page navigation types can be * accessed from FormApp.PageNavigationType. * * The page navigation occurs after the respondent completes a page that contains the option, and * only if the respondent chose that option. If the respondent chose multiple options with * page-navigation instructions on the same page, only the last navigation option has any effect. * Page navigation also has no effect on the last page of a form. * * Choices that use page navigation cannot be combined in the same item with choices that do not * use page navigation. * * // Create a form and add a new multiple-choice item and a page-break item. * var form = FormApp.create('Form Name'); * var item = form.addMultipleChoiceItem(); * var pageBreak = form.addPageBreakItem(); * * // Set some choices with go-to-page logic. * var rightChoice = item.createChoice('Vanilla', FormApp.PageNavigationType.SUBMIT); * var wrongChoice = item.createChoice('Chocolate', FormApp.PageNavigationType.RESTART); * * // For GO_TO_PAGE, just pass in the page break item. For CONTINUE (normally the default), pass in * // CONTINUE explicitly because page navigation cannot be mixed with non-navigation choices. * var iffyChoice = item.createChoice('Peanut', pageBreak); * var otherChoice = item.createChoice('Strawberry', FormApp.PageNavigationType.CONTINUE); * item.setChoices([rightChoice, wrongChoice, iffyChoice, otherChoice]); */ enum PageNavigationType { CONTINUE, GO_TO_PAGE, RESTART, SUBMIT, } /** * A question item that allows the respondent to enter a block of text. Items can be accessed or * created from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new paragraph text item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addParagraphTextItem(); * item.setTitle('What is your address?'); */ interface ParagraphTextItem { clearValidation(): ParagraphTextItem; createResponse(response: string): ItemResponse; duplicate(): ParagraphTextItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): ParagraphTextItem; setHelpText(text: string): ParagraphTextItem; setPoints(points: Integer): ParagraphTextItem; setRequired(enabled: boolean): ParagraphTextItem; setTitle(title: string): ParagraphTextItem; setValidation(validation: ParagraphTextValidation): ParagraphTextItem; } /** * A DataValidation for a ParagraphTextItem. * * // Add a paragraph text item to a form and require the answer to be at least 100 characters. * var paragraphTextItem = form.addParagraphTextItem().setTitle('Describe yourself:'); * var paragraphtextValidation = FormApp.createParagraphTextValidation() * .setHelpText(“Answer must be more than 100 characters.”) * .requireTextLengthGreatherThan(100); * paragraphTextItem.setValidation(paragraphtextValidation); */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface ParagraphTextValidation { } /** * A DataValidationBuilder for a ParagraphTextValidation. * * // Add a paragraph text item to a form and require the answer to be at least 100 characters. * var paragraphTextItem = form.addParagraphTextItem().setTitle('Describe yourself:'); * var paragraphtextValidation = FormApp.createParagraphTextValidation() * .setHelpText(“Answer must be more than 100 characters.”) * .requireTextLengthLessThanOrEqualTo(100) * .build(); * paragraphTextItem.setValidation(paragraphtextValidation); */ interface ParagraphTextValidationBuilder { requireTextContainsPattern(pattern: string): ParagraphTextValidationBuilder; requireTextDoesNotContainPattern(pattern: string): ParagraphTextValidationBuilder; requireTextDoesNotMatchPattern(pattern: string): ParagraphTextValidationBuilder; requireTextLengthGreaterThanOrEqualTo(number: Integer): ParagraphTextValidationBuilder; requireTextLengthLessThanOrEqualTo(number: Integer): ParagraphTextValidationBuilder; requireTextMatchesPattern(pattern: string): ParagraphTextValidationBuilder; build(): ParagraphTextValidation; setHelpText(text: string): ParagraphTextValidationBuilder; } /** * The bean implementation of a Feedback, which contains properties common to all feedback, such as * display text or links. * * Feedback can be added to gradeable Form items. * * // Setting feedback which should be automatically shown when a user responds to a question * // incorrectly. * var textItem = form.addTextItem().setTitle('Re-hydrating dried fruit is an example of what?'); * var feedback = FormApp.createFeedback() * .setDisplayText( * “Good answer, but not quite right. Please review chapter 4 before next time.”) * .addLink("http://wikipedia.com/osmosis"); * textItem.setFeedbackForIncorrect(feedback); */ interface QuizFeedback { getLinkUrls(): string[]; getText(): string; } /** * The base FeedbackBuilder that contains setters for properties common to all feedback, such as * display text. Used to build Feedback objects. * * // Open a form by ID and add a new list item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addListItem(); * item.setTitle('Do you prefer cats or dogs?'); * item.setChoices([ * item.createChoice('Dogs', true), * item.createChoice('Cats', false)]); * // Add feedback which will be shown for correct responses; ie "Dogs". * item.setFeedbackForCorrect(FormApp.createFeedback().setText("Dogs rule, cats drool.").build()); */ interface QuizFeedbackBuilder { addLink(url: string): QuizFeedbackBuilder; addLink(url: string, displayText: string): QuizFeedbackBuilder; build(): QuizFeedback; copy(): QuizFeedbackBuilder; setText(text: string): QuizFeedbackBuilder; } /** * A question item that allows the respondent to choose one option from a numbered sequence of radio * buttons. Items can be accessed or created from a Form. When used in a quiz, these items * are graded. * * // Open a form by ID and add a new scale item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addScaleItem(); * item.setTitle('Pick a number between 1 and 10') * .setBounds(1, 10); */ interface ScaleItem { createResponse(response: Integer): ItemResponse; duplicate(): ScaleItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getLeftLabel(): string; getLowerBound(): Integer; getPoints(): Integer; getRightLabel(): string; getTitle(): string; getType(): ItemType; getUpperBound(): Integer; isRequired(): boolean; setBounds(lower: Integer, upper: Integer): ScaleItem; setGeneralFeedback(feedback: QuizFeedback): ScaleItem; setHelpText(text: string): ScaleItem; setLabels(lower: string, upper: string): ScaleItem; setPoints(points: Integer): ScaleItem; setRequired(enabled: boolean): ScaleItem; setTitle(title: string): ScaleItem; } /** * A layout item that visually indicates the start of a section. Items can be accessed or created * from a Form. * * // Open a form by ID and add a new section header. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addSectionHeaderItem(); * item.setTitle('Title of new section'); */ interface SectionHeaderItem { duplicate(): SectionHeaderItem; getHelpText(): string; getId(): Integer; getIndex(): Integer; getTitle(): string; getType(): ItemType; setHelpText(text: string): SectionHeaderItem; setTitle(title: string): SectionHeaderItem; } /** * A question item that allows the respondent to enter a single line of text. Items can be accessed * or created from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new text item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addTextItem(); * item.setTitle('What is your name?'); */ interface TextItem { clearValidation(): TextItem; createResponse(response: string): ItemResponse; duplicate(): TextItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): TextItem; setHelpText(text: string): TextItem; setPoints(points: Integer): TextItem; setRequired(enabled: boolean): TextItem; setTitle(title: string): TextItem; setValidation(validation: TextValidation): TextItem; } /** * A DataValidation for a TextItem. * * // Add a text item to a form and require it to be a number within a range. * var textItem = form.addTextItem().setTitle('Pick a number between 1 and 100?'); * var textValidation = FormApp.createTextValidation() * .setHelpText(“Input was not a number between 1 and 100.”) * .requireNumberBetween(1, 100) * .build(); * textItem.setValidation(textValidation); */ // eslint-disable-next-line @typescript-eslint/no-empty-interface interface TextValidation { } /** * A DataValidationBuilder for a TextValidation. * * // Add a text item to a form and require it to be a number within a range. * var textItem = form.addTextItem().setTitle('Pick a number between 1 and 100?'); * var textValidation = FormApp.createTextValidation() * .setHelpText(“Input was not a number between 1 and 100.”) * .requireNumberBetween(1, 100); * textItem.setValidation(textValidation); */ interface TextValidationBuilder { requireNumber(): TextValidationBuilder; requireNumberBetween(start: number, end: number): TextValidationBuilder; requireNumberEqualTo(number: number): TextValidationBuilder; requireNumberGreaterThan(number: number): TextValidationBuilder; requireNumberGreaterThanOrEqualTo(number: number): TextValidationBuilder; requireNumberLessThan(number: number): TextValidationBuilder; requireNumberLessThanOrEqualTo(number: number): TextValidationBuilder; requireNumberNotBetween(start: number, end: number): TextValidationBuilder; requireNumberNotEqualTo(number: number): TextValidationBuilder; requireTextContainsPattern(pattern: string): TextValidationBuilder; requireTextDoesNotContainPattern(pattern: string): TextValidationBuilder; requireTextDoesNotMatchPattern(pattern: string): TextValidationBuilder; requireTextIsEmail(): TextValidationBuilder; requireTextIsUrl(): TextValidationBuilder; requireTextLengthGreaterThanOrEqualTo(number: Integer): TextValidationBuilder; requireTextLengthLessThanOrEqualTo(number: Integer): TextValidationBuilder; requireTextMatchesPattern(pattern: string): TextValidationBuilder; requireWholeNumber(): TextValidationBuilder; build(): TextValidation; setHelpText(text: string): TextValidationBuilder; } /** * A question item that allows the respondent to indicate a time of day. Items can be accessed or * created from a Form. When used in a quiz, these items are graded. * * // Open a form by ID and add a new time item. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * var item = form.addTimeItem(); * item.setTitle('What time do you usually wake up in the morning?'); */ interface TimeItem { createResponse(hour: Integer, minute: Integer): ItemResponse; duplicate(): TimeItem; getGeneralFeedback(): QuizFeedback; getHelpText(): string; getId(): Integer; getIndex(): Integer; getPoints(): Integer; getTitle(): string; getType(): ItemType; isRequired(): boolean; setGeneralFeedback(feedback: QuizFeedback): TimeItem; setHelpText(text: string): TimeItem; setPoints(points: Integer): TimeItem; setRequired(enabled: boolean): TimeItem; setTitle(title: string): TimeItem; } /** * A layout item that displays a video. Items can be accessed or created from a Form. * * // Open a form by ID and add three new video items, using a long URL, * // a short URL, and a video ID. * var form = FormApp.openById('1234567890abcdefghijklmnopqrstuvwxyz'); * form.addVideoItem() * .setTitle('Video Title') * .setHelpText('Video Caption') * .setVideoUrl('www.youtube.com/watch?v=1234abcdxyz'); * * form.addVideoItem() * .setTitle('Video Title') * .setHelpText('Video Caption') * .setVideoUrl('youtu.be/1234abcdxyz'); * * form.addVideoItem() * .setTitle('Video Title') * .setHelpText('Video Caption') * .setVideoUrl('1234abcdxyz'); */ interface VideoItem { duplicate(): VideoItem; getAlignment(): Alignment; getHelpText(): string; getId(): Integer; getIndex(): Integer; getTitle(): string; getType(): ItemType; getWidth(): Integer; setAlignment(alignment: Alignment): VideoItem; setHelpText(text: string): VideoItem; setTitle(title: string): VideoItem; setVideoUrl(youtubeUrl: string): VideoItem; setWidth(width: Integer): VideoItem; } } } declare var FormApp: GoogleAppsScript.Forms.FormApp;