From 291803c31f829fe0d32bb3207bc11def95a7408c Mon Sep 17 00:00:00 2001 From: Nevena Bojovic Date: Tue, 1 Mar 2022 20:05:50 +0100 Subject: Urađena test aplikacija. Povezan front i back. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../node_modules/inquirer/lib/utils/paginator.js | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sandbox/testAppNevena/Front/node_modules/inquirer/lib/utils/paginator.js (limited to 'sandbox/testAppNevena/Front/node_modules/inquirer/lib/utils/paginator.js') diff --git a/sandbox/testAppNevena/Front/node_modules/inquirer/lib/utils/paginator.js b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/utils/paginator.js new file mode 100644 index 00000000..767bf672 --- /dev/null +++ b/sandbox/testAppNevena/Front/node_modules/inquirer/lib/utils/paginator.js @@ -0,0 +1,78 @@ +'use strict'; + +const _ = { + sum: require('lodash/sum'), + flatten: require('lodash/flatten'), +}; +const chalk = require('chalk'); + +/** + * The paginator returns a subset of the choices if the list is too long. + */ + +class Paginator { + constructor(screen, options = {}) { + const { isInfinite = true } = options; + this.lastIndex = 0; + this.screen = screen; + this.isInfinite = isInfinite; + } + + paginate(output, active, pageSize) { + pageSize = pageSize || 7; + let lines = output.split('\n'); + + if (this.screen) { + lines = this.screen.breakLines(lines); + active = _.sum(lines.map((lineParts) => lineParts.length).splice(0, active)); + lines = _.flatten(lines); + } + + // Make sure there's enough lines to paginate + if (lines.length <= pageSize) { + return output; + } + const visibleLines = this.isInfinite + ? this.getInfiniteLines(lines, active, pageSize) + : this.getFiniteLines(lines, active, pageSize); + this.lastIndex = active; + return ( + visibleLines.join('\n') + + '\n' + + chalk.dim('(Move up and down to reveal more choices)') + ); + } + + getInfiniteLines(lines, active, pageSize) { + if (this.pointer === undefined) { + this.pointer = 0; + } + const middleOfList = Math.floor(pageSize / 2); + // Move the pointer only when the user go down and limit it to the middle of the list + if ( + this.pointer < middleOfList && + this.lastIndex < active && + active - this.lastIndex < pageSize + ) { + this.pointer = Math.min(middleOfList, this.pointer + active - this.lastIndex); + } + + // Duplicate the lines so it give an infinite list look + const infinite = _.flatten([lines, lines, lines]); + const topIndex = Math.max(0, active + lines.length - this.pointer); + + return infinite.splice(topIndex, pageSize); + } + + getFiniteLines(lines, active, pageSize) { + let topIndex = active - pageSize / 2; + if (topIndex < 0) { + topIndex = 0; + } else if (topIndex + pageSize > lines.length) { + topIndex = lines.length - pageSize; + } + return lines.splice(topIndex, pageSize); + } +} + +module.exports = Paginator; -- cgit v1.2.3