// Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . import 'dart:convert'; import 'dart:io'; import 'package:wyatt_cli_toolbox/src/prompt/question.dart'; import 'package:wyatt_cli_toolbox/src/sequences/sequences.dart'; import 'package:wyatt_cli_toolbox/src/stylish/stylish.dart'; class BooleanQuestion extends Question { BooleanQuestion( String question, { this.defaultTo = false, String? comment, required String identifier, }) : super(QuestionType.booleanQuestion, identifier, question, comment); bool? answer; final bool defaultTo; @override String formatComment() => (super.formatComment().trim().isEmpty) ? defaultTo ? ' (Y/n) '.dim() : ' (y/N) '.dim() : super.formatComment(); @override bool ask() { stdout.write(formatQuestion()); String input = ''; input = stdin.readLineSync(encoding: utf8)!.trim(); stdout.write(Sequences.escMoveUp(1) + formatQuestion()); if (input.isEmpty) { answer = defaultTo; } else { answer = input[0] == 'y' || input[0] == 'Y'; } String replaceStr = '\r${formatQuestion()}${Sequences.escClearLineFromCursorToEnd()}'; replaceStr += answer! ? 'Yes'.blue() : 'No'.blue(); stdout.writeln(replaceStr); return answer!; } }