UNPKG

@upleveled/code-surfer

Version:

React component for scrolling, zooming and highlighting code.

142 lines (114 loc) 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var mapRange = function mapRange(range) { if (!range) return {}; var newTokens = {}; var _range = _slicedToArray(range, 2), start = _range[0], end = _range[1]; for (var i = start; i <= end; i++) { newTokens[i] = null; } return newTokens; }; var mapLines = function mapLines(lines) { var newTokens = {}; lines.forEach(function (line) { return newTokens[line] = null; }); return newTokens; }; var getTokensPerLineFromObject = function getTokensPerLineFromObject(_ref) { var _ref$lines = _ref.lines, lines = _ref$lines === undefined ? [] : _ref$lines, range = _ref.range, _ref$ranges = _ref.ranges, ranges = _ref$ranges === undefined ? [] : _ref$ranges, tokens = _ref.tokens; var newTokens = {}; Object.assign(newTokens, mapLines(lines)); Object.assign(newTokens, mapRange(range)); Object.assign.apply(Object, [newTokens].concat(_toConsumableArray(ranges.map(mapRange)))); Object.assign(newTokens, tokens); return newTokens; }; var expandString = function expandString(part) { // Transforms something like // - "1:3" to [1,2,3] var _part$split = part.split(":"), _part$split2 = _slicedToArray(_part$split, 2), start = _part$split2[0], end = _part$split2[1]; if (!end) { return [+start]; } var list = []; for (var i = +start; i <= +end; i++) { list.push(i); } return list; }; var getTokensPerLineFromString = function getTokensPerLineFromString(step) { if (step.trim() === "*") { return { all: true }; } var parts = step.split(/,(?![^\[]*\])/g).map(function (part) { var tokensMatch = part.match(/(\d+)\[(.+)\]/); if (tokensMatch) { var _ref2; var _tokensMatch = _slicedToArray(tokensMatch, 3), _ = _tokensMatch[0], line = _tokensMatch[1], tokens = _tokensMatch[2]; var tokenList = tokens.split(",").map(expandString); return _defineProperty({}, line, (_ref2 = []).concat.apply(_ref2, _toConsumableArray(tokenList))); } var _part$split3 = part.split(":"), _part$split4 = _slicedToArray(_part$split3, 2), start = _part$split4[0], end = _part$split4[1]; return mapRange([+start, +end || +start]); }); return Object.assign.apply(Object, [{}].concat(_toConsumableArray(parts))); }; var mapStep = exports.mapStep = function mapStep(step) { if (typeof step === "string") { return getTokensPerLineFromString(step); } else if (Object.keys(step).length === 0 || Object.keys(step).length === 1 && step.lineAnnotations) { return { all: true }; } else { return getTokensPerLineFromObject(step); } }; var SelectedTokens = function () { function SelectedTokens(step) { _classCallCheck(this, SelectedTokens); this.tokensPerLine = mapStep(step); } _createClass(SelectedTokens, [{ key: "isTokenSelected", value: function isTokenSelected(lineIndex, tokenIndex) { if (this.tokensPerLine.all) { return true; } return this.tokensPerLine[lineIndex + 1] !== undefined && (this.tokensPerLine[lineIndex + 1] === null || this.tokensPerLine[lineIndex + 1].includes(tokenIndex)); } }, { key: "isLineSelected", value: function isLineSelected(lineIndex) { if (this.tokensPerLine.all) { return true; } return this.tokensPerLine[lineIndex + 1] !== undefined; } }]); return SelectedTokens; }(); exports.default = SelectedTokens;