diff --git a/README.md b/README.md index 5bda723..3163855 100644 --- a/README.md +++ b/README.md @@ -118,6 +118,7 @@ | `removeBookmark` | Удаление закладки из строки с указанным номером | | `goNextBookmark` | Переход к следующей закладке | | `goPreviousBookmark` | Переход к предыдущей закладке | +| `getBookmarks` | Возвращает массив с номерами строк, в которых установлены закладки | ## События, генерируемые редактором для 1С:Предприятия | Событие | Описание | diff --git a/src/actions.js b/src/actions.js index 5b7f3b1..fcfe139 100644 --- a/src/actions.js +++ b/src/actions.js @@ -1,5 +1,11 @@ define(['vs/editor/editor.main'], function () { + getSortedBookmarks = function () { + + return new Map([...bookmarks.entries()].sort((a, b) => a[0] - b[0])); + + } + getBookmarksDecorations = function () { let bm_decorations = []; @@ -49,7 +55,7 @@ define(['vs/editor/editor.main'], function () { goNextBookmark = function () { - let sorted_bookmarks = new Map([...bookmarks.entries()].sort()); + let sorted_bookmarks = getSortedBookmarks(); if (sorted_bookmarks.size - 1 <= currentBookmark) currentBookmark = -1; @@ -61,7 +67,7 @@ define(['vs/editor/editor.main'], function () { goPreviousBookmark = function () { - let sorted_bookmarks = new Map([...bookmarks.entries()].sort()); + let sorted_bookmarks = getSortedBookmarks(); currentBookmark--; diff --git a/src/editor.js b/src/editor.js index 7121801..2211352 100644 --- a/src/editor.js +++ b/src/editor.js @@ -1050,6 +1050,13 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit } + getBookmarks = function () { + + let sorted_bookmarks = getSortedBookmarks(); + return Array.from(sorted_bookmarks.keys()); + + } + editor = undefined; // Register languages @@ -1274,43 +1281,43 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit function checkBookmarksAfterNewLine() { let line = getCurrentLine(); - let prev_bookmark = bookmarks.get(line - 1); + let prev_bookmark = bookmarks.get(line - 1); if (prev_bookmark) { let content = getLineContent(line); let prev_content = getLineContent(line - 1) - + if (content || content == prev_content) { - + prev_bookmark.range.startLineNumber = line; prev_bookmark.range.endLineNumber = line; bookmarks.set(line, prev_bookmark); bookmarks.delete(line - 1); - - let line_check = getLineCount(); - - while(line < line_check) { - - let bookmark = bookmarks.get(line_check); - - if (bookmark) { - bookmark.range.startLineNumber = line_check + 1; - bookmark.range.endLineNumber = line_check + 1; - bookmarks.set(line_check + 1, bookmark); - bookmarks.delete(line_check); - } - - line_check--; - - } - - updateBookmarks(undefined); } } + let line_check = getLineCount(); + + while (line < line_check) { + + let bookmark = bookmarks.get(line_check); + + if (bookmark) { + bookmark.range.startLineNumber = line_check + 1; + bookmark.range.endLineNumber = line_check + 1; + bookmarks.set(line_check + 1, bookmark); + bookmarks.delete(line_check); + } + + line_check--; + + } + + updateBookmarks(undefined); + } function checkBookmarksAfterRemoveLine(contentChangeEvent) { @@ -1331,30 +1338,30 @@ define(['bslGlobals', 'bslMetadata', 'snippets', 'bsl_language', 'vs/editor/edit bookmarks.delete(l); } - let line_check = range.endLineNumber; - let diff = range.endLineNumber - line; - - while(line_check < getLineCount()) { - - let bookmark = bookmarks.get(line_check); - - if (bookmark) { - bookmark.range.startLineNumber = line_check - diff; - bookmark.range.endLineNumber = line_check - diff; - bookmarks.set(line_check - diff, bookmark); - bookmarks.delete(line_check); - } - - line_check++; - - } - prev_bookmark.range.startLineNumber = line; prev_bookmark.range.endLineNumber = line; bookmarks.set(line, prev_bookmark); } + let line_check = range.endLineNumber; + let diff = range.endLineNumber - line; + + while (line_check < getLineCount()) { + + let bookmark = bookmarks.get(line_check); + + if (bookmark) { + bookmark.range.startLineNumber = line_check - diff; + bookmark.range.endLineNumber = line_check - diff; + bookmarks.set(line_check - diff, bookmark); + bookmarks.delete(line_check); + } + + line_check++; + + } + } }