diff options
author | u9g <43508353+u9g@users.noreply.github.com> | 2022-02-14 19:36:53 -0500 |
---|---|---|
committer | Ali Mohammad Pur <Ali.mpfard@gmail.com> | 2022-02-18 23:26:45 +0330 |
commit | 1511e9a5a909c523f3f09b7335eca562ce6fd06e (patch) | |
tree | 6b8a0c8d298c907f079130a8533c508689c392d2 /Base/res | |
parent | 3e2dd5455b7cf05def03e0f2cba57f0db535c6c1 (diff) | |
download | serenity-1511e9a5a909c523f3f09b7335eca562ce6fd06e.zip |
Spreadsheets: Add range functions to the Position class
Adds functions to get range of non-empty cells in a direction.
Diffstat (limited to 'Base/res')
-rw-r--r-- | Base/res/js/Spreadsheet/runtime.js | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/Base/res/js/Spreadsheet/runtime.js b/Base/res/js/Spreadsheet/runtime.js index 43c0623fd1..ac0218db0d 100644 --- a/Base/res/js/Spreadsheet/runtime.js +++ b/Base/res/js/Spreadsheet/runtime.js @@ -57,6 +57,52 @@ class Position { ); } + range_up() { + if (this.row === 0) throw new Error(`No cells above this cell`); + const up_one = this.up(1); + let current_point = up_one; + for ( + let point = current_point.up(1); + current_point.row !== 0 && point.value() !== ""; + point = current_point.up(1) + ) + current_point = point; + return range(current_point.name, up_one.name); + } + + range_down() { + let down_one = this.down(1); + let current_point = down_one; + for (let point = current_point.down(1); point.value() !== ""; point = current_point.down(1)) + current_point = point; + return range(current_point.name, down_one.name); + } + + range_left() { + if (this.column === "A") throw new Error(`No cells to the left of this cell`); + const left_one = this.left(1); + let current_point = left_one; + for ( + let point = current_point.left(1); + current_point.column !== "A" && point.value() !== ""; + point = current_point.left(1) + ) + current_point = point; + return range(current_point.name, left_one.name); + } + + range_right() { + let right_one = this.right(1); + let current_point = right_one; + for ( + let point = current_point.right(1); + point.value() !== ""; + point = current_point.right(1) + ) + current_point = point; + return range(current_point.name, right_one.name); + } + with_column(value) { return new Position(value, this.row, this.sheet); } @@ -852,10 +898,15 @@ here.__documentation = JSON.stringify({ doc: "Returns an object representing the current cell's position, see `Position` below.\n\n" + "## Position\na `Position` is an object representing a given cell position in a given sheet.\n" + - "### Methods:\n- `up(count = 1)`: goes up count cells, or returns the top position if at the top\n" + + "### Methods:\n" + + "- `up(count = 1)`: goes up count cells, or returns the top position if at the top\n" + "- `down(count = 1)`: goes down count cells\n" + "- `left(count = 1)`: Goes left count cells, or returns the leftmost position if the edge\n" + "- `right(count = 1)`: Goes right count cells.\n" + + "- `range_up()`: make a range from the cell above this cell, upward, until there is a cell with no number in it.\n" + + "- `range_down()`: make a range from the cell below this cell, downward, until there is a cell with no number in it.\n" + + "- `range_left()`: make a range from the cell to the left of this cell, going left, until there is a cell with no number in it.\n" + + "- `range_right()`: make a range from the cell to the right of this cell, going right, until there is a cell with no number in it.\n" + "- `with_row(row)`: Returns a Position with its column being this object's, and its row being the provided the value.\n" + "- `with_column(column)`: Similar to `with_row()`, but changes the column instead.\n" + "- `in_sheet(the_sheet)`: Returns a Position with the same column and row as this one, but with its sheet being `the_sheet`.\n" + |