List of usage examples for com.google.gwt.safehtml.shared SafeHtmlUtils htmlEscape
public static String htmlEscape(String s)
From source file:net.scran24.user.client.survey.prompts.ConfirmMealPrompt.java
License:Apache License
public static String selectPromptMessage(String mealName) { if (compareCaseInsensitive(mealName, messages.predefMeal_Breakfast())) return messages.confirmMeal_promptText_breakfast(); else if (compareCaseInsensitive(mealName, messages.predefMeal_EarlySnack())) return messages.confirmMeal_promptText_earlySnack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Lunch())) return messages.confirmMeal_promptText_lunch(); else if (compareCaseInsensitive(mealName, messages.predefMeal_MidDaySnack())) return messages.confirmMeal_promptText_midDaySnack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Snack())) return messages.confirmMeal_promptText_snack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Lunch())) return messages.confirmMeal_promptText_lunch(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Dinner())) return messages.confirmMeal_promptText_dinner(); else if (compareCaseInsensitive(mealName, messages.predefMeal_EveningMeal())) return messages.confirmMeal_promptText_eveningMeal(); else if (compareCaseInsensitive(mealName, messages.predefMeal_LateSnack())) return messages.confirmMeal_promptText_lateSnack(); else/* ww w.j a v a 2 s . c o m*/ return messages.confirmMeal_promptText_generic(SafeHtmlUtils.htmlEscape(toLowerCase(mealName)), SafeHtmlUtils.htmlEscape(capitaliseFirstCharacter(mealName))); }
From source file:net.scran24.user.client.survey.prompts.ConfirmMealPrompt.java
License:Apache License
private String selectDeleteButtonMessage(String mealName) { if (compareCaseInsensitive(mealName, messages.predefMeal_Breakfast())) return messages.confirmMeal_skipButtonLabel_breakfast(); else if (compareCaseInsensitive(mealName, messages.predefMeal_EarlySnack())) return messages.confirmMeal_skipButtonLabel_earlySnack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Lunch())) return messages.confirmMeal_skipButtonLabel_lunch(); else if (compareCaseInsensitive(mealName, messages.predefMeal_MidDaySnack())) return messages.confirmMeal_skipButtonLabel_midDaySnack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Snack())) return messages.confirmMeal_skipButtonLabel_snack(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Lunch())) return messages.confirmMeal_skipButtonLabel_lunch(); else if (compareCaseInsensitive(mealName, messages.predefMeal_Dinner())) return messages.confirmMeal_skipButtonLabel_dinner(); else if (compareCaseInsensitive(mealName, messages.predefMeal_EveningMeal())) return messages.confirmMeal_skipButtonLabel_eveningMeal(); else if (compareCaseInsensitive(mealName, messages.predefMeal_LateSnack())) return messages.confirmMeal_skipButtonLabel_lateSnack(); else//from ww w . j ava 2 s.com return messages.confirmMeal_skipButtonLabel_generic(SafeHtmlUtils.htmlEscape(toLowerCase(mealName))); }
From source file:net.scran24.user.client.survey.prompts.ConfirmMealPrompt.java
License:Apache License
@Override public SurveyStageInterface getInterface(final Callback1<MealOperation> onComplete, final Callback1<Function1<Meal, Meal>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils.fromSafeConstant(selectPromptMessage(meal.name)); final String skipText = SafeHtmlUtils.htmlEscape(selectDeleteButtonMessage(meal.name)); final String acceptText = SafeHtmlUtils.htmlEscape(messages.confirmMeal_confirmButtonLabel()); final Time initialTime = meal.guessTime(); FlowPanel content = new FlowPanel(); TimeQuestion timeQuestion = new TimeQuestion(promptText, acceptText, skipText, initialTime, new TimeQuestion.ResultHandler() { @Override/*from ww w. j a v a 2s .c o m*/ public void handleSkip() { onComplete.call(MealOperation.deleteRequest(false)); } @Override public void handleAccept(Time time) { onComplete.call(MealOperation.update(Meal.updateTimeFunc(time))); } }, false); Button helpButton = ShepherdTour.createTourButton(tour, ConfirmMealPrompt.class.getSimpleName()); helpButton.getElement().addClassName("intake24-prompt-float-widget"); timeQuestion.promptPanel.insert(helpButton, 0); content.add(timeQuestion); ShepherdTour.makeShepherdTarget(timeQuestion.promptPanel, timeQuestion.timePicker.hourCounter, timeQuestion.timePicker.minuteCounter, timeQuestion.skipButton, timeQuestion.confirmButton); return new SurveyStageInterface.Aligned(content, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.DeleteMealPrompt.java
License:Apache License
@Override public SurveyStageInterface getInterface(final Callback1<SurveyOperation> onComplete, final Callback1<Function1<Survey, Survey>> onIntermediateStateChange) { SafeHtml promptText = SafeHtmlUtils.fromSafeConstant( messages.deleteMeal_promptText(SafeHtmlUtils.htmlEscape(meal.name.toLowerCase()))); Button deleteButton = WidgetFactory.createRedButton(messages.deleteMeal_deleteButtonLabel(), new ClickHandler() { @Override/*from w w w .j a v a2s . co m*/ public void onClick(ClickEvent event) { onComplete.call(SurveyOperation.update(new Function1<Survey, Survey>() { @Override public Survey apply(Survey argument) { return argument.minusMeal(mealIndex) .withSelection(new Selection.EmptySelection(SelectionMode.AUTO_SELECTION)); } })); } }); Button cancelButton = WidgetFactory.createButton(messages.deleteMeal_keepButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(SurveyOperation.noChange); } }); FlowPanel contents = new FlowPanel(); contents.add(new HTMLPanel("h1", meal.safeNameWithTimeCapitalised())); contents.add(WidgetFactory.createPromptPanel(promptText)); contents.add(WidgetFactory.createButtonsPanel(deleteButton, cancelButton)); return new SurveyStageInterface.Aligned(contents, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.DrinkReminderPrompt.java
License:Apache License
@Override public SurveyStageInterface getInterface(final Callback1<MealOperation> onComplete, final Callback1<Function1<Meal, Meal>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils.fromSafeConstant( messages.drinkReminder_promptText((SafeHtmlUtils.htmlEscape(meal.name.toLowerCase())))); final String addDrinkText = SafeHtmlUtils.htmlEscape(messages.drinkReminder_addDrinkButtonLabel()); final String noDrinkText = SafeHtmlUtils.htmlEscape(messages.drinkReminder_noDrinkButtonLabel()); FlowPanel content = new FlowPanel(); final HTMLPanel header = new HTMLPanel("h1", meal.name + " (" + meal.time.map(new Function1<Time, String>() { @Override//from ww w.j a v a 2 s. c o m public String apply(Time argument) { return argument.toString(); } }).getOrElse("Time unknown") + ")"); content.add(header); content.add(new YesNoQuestion(promptText, addDrinkText, noDrinkText, new ResultHandler() { @Override public void handleYes() { onComplete.call(MealOperation.editFoodsRequest(true)); } @Override public void handleNo() { onComplete.call(MealOperation.update(new Function1<Meal, Meal>() { @Override public Meal apply(Meal argument) { return argument.markConfirmedNoDrinks(); } })); } })); return new SurveyStageInterface.Aligned(content, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.EditMealPrompt.java
License:Apache License
@Override public SurveyStageInterface getInterface(final Callback1<MealOperation> onComplete, final Callback1<Function1<Meal, Meal>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils .fromSafeConstant(messages.editMeal_promptText(SafeHtmlUtils.htmlEscape(meal.name.toLowerCase()))); final Function1<FoodEntry, Boolean> foodFilter = new Function1<FoodEntry, Boolean>() { @Override/*from www. jav a2 s.c o m*/ public Boolean apply(FoodEntry argument) { return !argument.isDrink(); } }; final Function1<FoodEntry, Boolean> drinkFilter = new Function1<FoodEntry, Boolean>() { @Override public Boolean apply(FoodEntry argument) { return argument.isDrink(); } }; final Button done = WidgetFactory.createGreenButton(messages.editMeal_finishButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(new MealOperation() { @Override public <R> R accept(Visitor<R> visitor) { return visitor.visitUpdate(new Function1<Meal, Meal>() { @Override public Meal apply(Meal argument) { return argument .withFoods(TreePVector.<FoodEntry>empty() .plusAll(foodList.getEnteredItems()) .plusAll(drinkList.getEnteredItems())) .markFreeEntryComplete(); } }); } }); } }); done.getElement().setId("intake24-done-button"); final Callback1<List<FoodEntry>> onChange = new Callback1<List<FoodEntry>>() { @Override public void call(List<FoodEntry> arg1) { TreePVector<FoodEntry> newItems = TreePVector.<FoodEntry>empty().plusAll(foodList.getEnteredItems()) .plusAll(drinkList.getEnteredItems()); onIntermediateStateChange.call(Meal.updateFoodsFunc(newItems)); } }; // Food list foodList = new EditableFoodList(meal.foods, foodFilter, messages.editMeal_addFoodButtonLabel(), false, onChange); final HTMLPanel foodHeader = new HTMLPanel("h2", SafeHtmlUtils.htmlEscape(messages.editMeal_foodHeader())); final FlowPanel foodListContainer = new FlowPanel(); foodListContainer.getElement().setId("intake24-food-list"); foodListContainer.add(foodHeader); foodListContainer.add(foodList); ShepherdTour.makeShepherdTarget(foodListContainer); // Drinks list drinkList = new EditableFoodList(meal.foods, drinkFilter, messages.editMeal_addDrinkButtonLabel(), true, onChange); final HTMLPanel drinksHeader = new HTMLPanel("h2", SafeHtmlUtils.htmlEscape(messages.editMeal_drinksHeader())); drinkList.getElement().setId("intake24-drink-list"); final FlowPanel drinkListContainer = new FlowPanel(); drinkListContainer.getElement().setId("intake24-drink-list"); drinkListContainer.add(drinksHeader); drinkListContainer.add(drinkList); ShepherdTour.makeShepherdTarget(drinkListContainer); Button changeTime = WidgetFactory.createButton(messages.editMeal_changeTimeButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.editTimeRequest); } }); changeTime.getElement().setId("intake24-change-time-button"); Button delete = WidgetFactory.createButton(messages.editMeal_deleteMealButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.deleteRequest(true)); } }); delete.getElement().setId("intake24-delete-button"); final HTMLPanel header = new HTMLPanel("h1", LocaleUtil.capitaliseFirstCharacter(meal.safeNameWithTime())); header.getElement().setId("intake24-meal-name"); ShepherdTour.makeShepherdTarget(header); FlowPanel contents = new FlowPanel(); contents.addStyleName("intake24-edit-meal-prompt"); contents.add(header); Panel promptPanel = WidgetFactory.createPromptPanel(promptText, ShepherdTour.createTourButton(tour, EditMealPrompt.class.getSimpleName())); contents.add(promptPanel); ShepherdTour.makeShepherdTarget(promptPanel); contents.add(foodListContainer); contents.add(drinkListContainer); contents.add(WidgetFactory.createButtonsPanel(changeTime, delete, done)); ShepherdTour.makeShepherdTarget(changeTime, delete, done); return new SurveyStageInterface.Aligned(contents, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS, Option.<Callback>some(new Callback() { @Override public void call() { if (addDrink) drinkList.focusNew(); } })); }
From source file:net.scran24.user.client.survey.prompts.EditRecipeIngredientsPrompt.java
@Override public SurveyStageInterface getInterface(final Callback1<MealOperation> onComplete, final Callback1<Function1<Pair<FoodEntry, Meal>, Pair<FoodEntry, Meal>>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils.fromSafeConstant(messages.editRecipeIngredientsPrompt_promptText( SafeHtmlUtils.htmlEscape(meal.foods.get(foodIndex).description()))); final UUID compoundFoodId = meal.foods.get(foodIndex).link.id; final Function1<FoodEntry, Boolean> noLinkedFoodsFilter = new Function1<FoodEntry, Boolean>() { @Override/* w w w . j av a 2s. c om*/ public Boolean apply(FoodEntry argument) { return argument.link.linkedTo.accept(new Option.Visitor<UUID, Boolean>() { @Override public Boolean visitSome(UUID item) { return !item.equals(compoundFoodId); } @Override public Boolean visitNone() { return true; } }); } }; final Button done = WidgetFactory .createGreenButton(messages.editRecipeIngredientsPrompt_continueButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.update(new Function1<Meal, Meal>() { @Override public Meal apply(Meal argument) { ArrayList<FoodEntry> linkedFoods = new ArrayList<FoodEntry>(); for (FoodEntry e : ingredientList.getEnteredItems()) linkedFoods.add(e.relink(FoodLink.newLinked(compoundFoodId)) .withCustomDataField(RawFood.KEY_LIMIT_LOOKUP_TO_CATEGORY, SpecialData.CATEGORY_CODE_RECIPE_INGREDIENTS)); return argument.withFoods(filter(argument.foods, noLinkedFoodsFilter)) .plusAllFoods(linkedFoods).updateFood(foodIndex, argument.foods .get(foodIndex).withFlag(CompoundFood.FLAG_INGREDIENTS_COMPLETE)); } })); } }); done.getElement().setId("intake24-done-button"); ingredientList = new EditableFoodList(messages.editMeal_addFoodButtonLabel(), false, new Callback1<List<FoodEntry>>() { @Override public void call(List<FoodEntry> arg1) { onIntermediateStateChange .call(new Function1<Pair<FoodEntry, Meal>, Pair<FoodEntry, Meal>>() { @Override public Pair<FoodEntry, Meal> apply(Pair<FoodEntry, Meal> argument) { ArrayList<FoodEntry> linkedFoods = new ArrayList<FoodEntry>(); for (FoodEntry e : ingredientList.getEnteredItems()) linkedFoods.add(e.relink(FoodLink.newLinked(compoundFoodId)) .withCustomDataField(RawFood.KEY_LIMIT_LOOKUP_TO_CATEGORY, SpecialData.CATEGORY_CODE_RECIPE_INGREDIENTS)); return Pair.create(null, argument.right .withFoods( filter(argument.right.foods, noLinkedFoodsFilter)) .plusAllFoods(linkedFoods)); } }); } }); ingredientList.disableLinkedFoodsIndentation(); for (FoodEntry f : Meal.linkedFoods(meal.foods, meal.foods.get(foodIndex))) ingredientList.addItem(Option.some(f)); final HTMLPanel foodHeader = new HTMLPanel("h2", SafeHtmlUtils.htmlEscape(messages.editRecipeIngredientsPrompt_ingredientsHeader())); final FlowPanel foodListContainer = new FlowPanel(); foodListContainer.getElement().setId("intake24-ingredient-list"); foodListContainer.add(foodHeader); foodListContainer.add(ingredientList); ShepherdTour.makeShepherdTarget(foodListContainer); FlowPanel contents = new FlowPanel(); contents.addStyleName("intake24-edit-meal-prompt"); Panel promptPanel = WidgetFactory.createPromptPanel(promptText, ShepherdTour.createTourButton(tour, EditRecipeIngredientsPrompt.class.getSimpleName())); contents.add(promptPanel); ShepherdTour.makeShepherdTarget(promptPanel); contents.add(foodListContainer); contents.add(WidgetFactory.createButtonsPanel(done)); ShepherdTour.makeShepherdTarget(done); return new SurveyStageInterface.Aligned(contents, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.FoodCompletePrompt.java
@Override public SurveyStageInterface getInterface(final Callback1<FoodOperation> onComplete, final Callback1<Function1<FoodEntry, FoodEntry>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils.fromSafeConstant( messages.foodComplete_promptText(SafeHtmlUtils.htmlEscape(food.description().toLowerCase()))); Button contButton = WidgetFactory.createButton(messages.foodComplete_continueButtonLabel(), new ClickHandler() { @Override/*from www . j av a2s . com*/ public void onClick(ClickEvent event) { onComplete.call(FoodOperation.noChange); } }); Button addButton = WidgetFactory.createButton(messages.foodComplete_editMealButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(FoodOperation.editFoodsRequest); } }); Button editIngredients = WidgetFactory.createButton(messages.foodComplete_editIngredients(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(FoodOperation.update(new Function1<FoodEntry, FoodEntry>() { @Override public FoodEntry apply(FoodEntry argument) { return argument .withFlags(argument.flags.minus(CompoundFood.FLAG_INGREDIENTS_COMPLETE)); } })); } }); Button deleteButton = WidgetFactory.createRedButton(messages.foodComplete_deleteFoodButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(FoodOperation.deleteRequest); } }); FlowPanel contents = new FlowPanel(); contents.add(WidgetFactory.createPromptPanel(promptText)); if (food.isCompound() && food.flags.contains(CompoundFood.FLAG_INGREDIENTS_COMPLETE)) contents.add(WidgetFactory.createButtonsPanel(contButton, editIngredients, deleteButton)); else contents.add(WidgetFactory.createButtonsPanel(contButton, addButton, deleteButton)); return new SurveyStageInterface.Aligned(contents, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.MealCompletePrompt.java
@Override public SurveyStageInterface getInterface(final Callback1<MealOperation> onComplete, final Callback1<Function1<Meal, Meal>> onIntermediateStateChange) { final SafeHtml promptText = SafeHtmlUtils.fromSafeConstant( messages.mealComplete_promptText(SafeHtmlUtils.htmlEscape(meal.name.toLowerCase()))); Button contButton = WidgetFactory.createButton(messages.mealComplete_continueButtonLabel(), new ClickHandler() { @Override//from w w w . j a v a 2s . co m public void onClick(ClickEvent event) { onComplete.call(MealOperation.noChange); } }); Button addButton = WidgetFactory.createButton(messages.mealComplete_editMealButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.editFoodsRequest(false)); } }); Button timeButton = WidgetFactory.createButton(messages.mealComplete_editTimeButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.editTimeRequest); } }); Button deleteButton = WidgetFactory.createRedButton(messages.mealComplete_deleteButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { onComplete.call(MealOperation.deleteRequest(true)); } }); FlowPanel contents = new FlowPanel(); contents.add(WidgetFactory.createPromptPanel(promptText)); contents.add(WidgetFactory.createButtonsPanel(contButton, addButton, timeButton, deleteButton)); return new SurveyStageInterface.Aligned(contents, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }
From source file:net.scran24.user.client.survey.prompts.MissingFoodDescriptionPrompt.java
@Override public SurveyStageInterface getInterface(final Callback1<FoodOperation> onComplete, final Callback1<Function1<FoodEntry, FoodEntry>> onIntermediateStateChange) { final FlowPanel content = new FlowPanel(); Panel questionPanel;//from w w w. j a v a 2s . c om if (food.customData.containsKey(MissingFood.KEY_ASSOC_FOOD_NAME)) { questionPanel = WidgetFactory.createPromptPanel( SafeHtmlUtils.fromSafeConstant( messages.missingFood_assocFoodPrompt(SafeHtmlUtils.htmlEscape(food.name.toLowerCase()), SafeHtmlUtils.htmlEscape( food.customData.get(MissingFood.KEY_ASSOC_FOOD_NAME).toLowerCase()))), ShepherdTour.createTourButton(tour, MissingFoodDescriptionPrompt.class.getSimpleName())); } else { questionPanel = WidgetFactory.createPromptPanel( SafeHtmlUtils.fromSafeConstant( messages.missingFood_prompt(SafeHtmlUtils.htmlEscape(food.name.toLowerCase()))), ShepherdTour.createTourButton(tour, MissingFoodDescriptionPrompt.class.getSimpleName())); } content.add(questionPanel); FlowPanel foodName = new FlowPanel(); foodName.getElement().setId("intake24-missing-food-name"); Label foodNameLabel = WidgetFactory.createLabel(messages.missingFood_nameLabel()); content.add(foodNameLabel); final TextBox foodNameTextBox = new TextBox(); foodNameTextBox.getElement().addClassName("intake24-missing-food-textbox"); foodNameTextBox.setText(food.name); foodName.add(foodNameLabel); foodName.add(foodNameTextBox); content.add(foodName); if (food.name.equals("Missing food")) { Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { foodNameTextBox.setFocus(true); foodNameTextBox.selectAll(); } }); } FlowPanel brand = new FlowPanel(); brand.getElement().setId("intake24-missing-food-brand"); Label brandLabel = WidgetFactory.createLabel(messages.missingFood_brandLabel()); brand.add(brandLabel); final TextBox brandTextBox = new TextBox(); brandTextBox.getElement().addClassName("intake24-missing-food-textbox"); brand.add(brandTextBox); content.add(brand); FlowPanel description = new FlowPanel(); description.getElement().setId("intake24-missing-food-description"); Label descriptionLabel = WidgetFactory.createLabel(messages.missingFood_descriptionLabel()); description.add(descriptionLabel); final TextArea descriptionTextArea = new TextArea(); descriptionTextArea.getElement().addClassName("intake24-missing-food-textarea"); description.add(descriptionTextArea); content.add(description); FlowPanel portionSize = new FlowPanel(); portionSize.getElement().setId("intake24-missing-food-portion-size"); Label portionSizeLabel = WidgetFactory.createLabel(messages.missingFood_portionSizeLabel()); portionSize.add(portionSizeLabel); final TextArea portionSizeTextArea = new TextArea(); portionSizeTextArea.getElement().addClassName("intake24-missing-food-textarea"); portionSize.add(portionSizeTextArea); content.add(portionSize); FlowPanel leftovers = new FlowPanel(); leftovers.getElement().setId("intake24-missing-food-leftovers"); Label leftoversLabel = WidgetFactory.createLabel(messages.missingFood_leftoversLabel()); leftovers.add(leftoversLabel); final TextArea leftoversTextArea = new TextArea(); leftoversTextArea.getElement().addClassName("intake24-missing-food-textarea"); leftovers.add(leftoversTextArea); content.add(leftovers); Button cont = WidgetFactory.createGreenButton(messages.missingFood_continueButtonLabel(), new ClickHandler() { @Override public void onClick(ClickEvent event) { String name = foodNameTextBox.getText(); if (name.isEmpty()) name = food.name; onComplete.call(FoodOperation.replaceWith( new MissingFood(food.link, name, food.isDrink, Option.some(new MissingFoodDescription(mkOption(brandTextBox.getText()), mkOption(descriptionTextArea.getText()), mkOption(portionSizeTextArea.getText()), mkOption(leftoversTextArea.getText()))), food.flags, food.customData))); } }); cont.getElement().setId("intake24-missing-food-continue-button"); content.add(WidgetFactory.createButtonsPanel(cont)); ShepherdTour.makeShepherdTarget(questionPanel, foodName, description, brand, portionSize, leftovers, cont); return new SurveyStageInterface.Aligned(content, HasHorizontalAlignment.ALIGN_LEFT, HasVerticalAlignment.ALIGN_TOP, SurveyStageInterface.DEFAULT_OPTIONS); }