/* THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // main.ts var main_exports = {}; __export(main_exports, { default: () => lineArrange }); module.exports = __toCommonJS(main_exports); var import_obsidian = require("obsidian"); var lineArrange = class extends import_obsidian.Plugin { // Method called when the plugin is loaded async onload() { this.addCommand({ id: "lexisort-lines", name: "Lexisort lines", editorCallback: (editor) => { const selection = editor.getSelection(); editor.replaceSelection(lexiSortLines(selection)); } }); this.addCommand({ id: "reverse-lines", name: "Reverse lines", editorCallback: (editor) => { const selection = editor.getSelection(); editor.replaceSelection(reverseLines(selection)); } }); this.addCommand({ id: "sort-lines", name: "Sort lines", editorCallback: (editor) => { const selection = editor.getSelection(); editor.replaceSelection(sortLines(selection)); } }); this.addCommand({ id: "shuffle-lines", name: "Shuffle lines", editorCallback: (editor) => { const selection = editor.getSelection(); editor.replaceSelection(shuffleLines(selection)); } }); } }; var textSize = getComputedStyle(document.body).getPropertyValue("--font-text-size"); var textFont = getComputedStyle(document.body).getPropertyValue("--font-text"); function lexiSortLines(orgText) { const lines = orgText.split("\n"); lines.sort(); let srtLines = ""; lines.forEach((line) => { if (line.length > 0) { srtLines += line + "\n"; } else { srtLines = "\n" + srtLines; } }); return srtLines.trimEnd(); } function reverseLines(orgText) { const lines = orgText.split("\n"); lines.reverse(); let revLines = ""; lines.forEach((line) => { if (line.length > 0) { revLines += line + "\n"; } else { revLines = "\n" + revLines; } }); return revLines.trimEnd(); } function sortLines(orgText) { const lines = orgText.split("\n"); const arr1 = new Arrangement(lines, realLineWidth); return orderedText(arr1); } function realLineWidth(line) { const canvas = document.createElement("canvas"); const context = canvas.getContext("2d"); if (!context) { throw new Error("Failed to get 2D context"); } context.font = textSize + " " + textFont; return Math.round(1e4 * context.measureText(line).width); } function shuffleLines(orgText) { const lines = orgText.split("\n"); const arr2 = new Arrangement(lines, randomLineWidth); return orderedText(arr2); } function randomLineWidth(line) { if (line.length > 0) return Math.round(1e4 * (Math.random() + 1)); else return 0; } var Arrangement = class { // Creates a key for each unique line-width and associates line to respective slot constructor(linesList, lineFunction) { linesList.forEach((line) => { const width = lineFunction(line); if (!(width in this)) { this[width] = line; } else { this[width] = this[width].concat("\n" + line); } }); } }; function orderedText(orderedLines) { let finalText = ""; for (const lineKey in orderedLines) { finalText += orderedLines[lineKey] + "\n"; } return finalText.trimEnd(); } //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgRWRpdG9yLCBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGxpbmVBcnJhbmdlIGV4dGVuZHMgUGx1Z2luIHtcbiAgICAvLyBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBpcyBsb2FkZWRcbiAgICBhc3luYyBvbmxvYWQoKSB7XG5cbiAgICAgICAgLy8gQWRkIGEgY29tbWFuZCB0byBsZXhpY2FsbHkgc29ydCBsaW5lcyBpbiB0aGUgZWRpdG9yXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ2xleGlzb3J0LWxpbmVzJyxcbiAgICAgICAgICAgIG5hbWU6ICdMZXhpc29ydCBsaW5lcycsXG4gICAgICAgICAgICBlZGl0b3JDYWxsYmFjazogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZWRpdG9yLmdldFNlbGVjdGlvbigpOyAvLyBHZXQgdGhlIHNlbGVjdGVkIHRleHRcbiAgICAgICAgICAgICAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihsZXhpU29ydExpbmVzKHNlbGVjdGlvbikpOyAvLyBSZXBsYWNlIHNlbGVjdGlvbiB3aXRoIGxleGljYWxseSBzb3J0ZWQgbGluZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBhIGNvbW1hbmQgdG8gcmV2ZXJzZSBsaW5lcyBpbiB0aGUgZWRpdG9yXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ3JldmVyc2UtbGluZXMnLFxuICAgICAgICAgICAgbmFtZTogJ1JldmVyc2UgbGluZXMnLFxuICAgICAgICAgICAgZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsgLy8gR2V0IHRoZSBzZWxlY3RlZCB0ZXh0XG4gICAgICAgICAgICAgICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24ocmV2ZXJzZUxpbmVzKHNlbGVjdGlvbikpOyAvLyBSZXBsYWNlIHNlbGVjdGlvbiB3aXRoIHJldmVyc2VkIGxpbmVzXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBZGQgYSBjb21tYW5kIHRvIHNvcnQgbGluZXMgaW4gdGhlIGVkaXRvclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6ICdzb3J0LWxpbmVzJyxcbiAgICAgICAgICAgIG5hbWU6ICdTb3J0IGxpbmVzJyxcbiAgICAgICAgICAgIGVkaXRvckNhbGxiYWNrOiAoZWRpdG9yOiBFZGl0b3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7IC8vIEdldCB0aGUgc2VsZWN0ZWQgdGV4dFxuICAgICAgICAgICAgICAgIGVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKHNvcnRMaW5lcyhzZWxlY3Rpb24pKTsgLy8gUmVwbGFjZSBzZWxlY3Rpb24gd2l0aCBzb3J0ZWQgbGluZXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEFkZCBhIGNvbW1hbmQgdG8gc2h1ZmZsZSBsaW5lcyBpbiB0aGUgZWRpdG9yXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICAgICAgICBpZDogJ3NodWZmbGUtbGluZXMnLFxuICAgICAgICAgICAgbmFtZTogJ1NodWZmbGUgbGluZXMnLFxuICAgICAgICAgICAgZWRpdG9yQ2FsbGJhY2s6IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGVkaXRvci5nZXRTZWxlY3Rpb24oKTsgLy8gR2V0IHRoZSBzZWxlY3RlZCB0ZXh0XG4gICAgICAgICAgICAgICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24oc2h1ZmZsZUxpbmVzKHNlbGVjdGlvbikpOyAvLyBSZXBsYWNlIHNlbGVjdGlvbiB3aXRoIHNodWZmbGVkIGxpbmVzXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNvbnN0IHRleHRTaXplID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1mb250LXRleHQtc2l6ZVwiKTtcbmNvbnN0IHRleHRGb250ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5ib2R5KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1mb250LXRleHRcIik7XG5cbi8vIEZ1bmN0aW9uIHRvIGxleGljYWxseSBzb3J0IHRoZSBzZWxlY3RlZCBsaW5lcyBvZiB0ZXh0XG5mdW5jdGlvbiBsZXhpU29ydExpbmVzKG9yZ1RleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXMgPSBvcmdUZXh0LnNwbGl0KFwiXFxuXCIpOyAvLyBTcGxpdCB0aGUgb3JpZ2luYWwgdGV4dCBpbnRvIGxpbmVzXG4gICAgbGluZXMuc29ydCgpOyAvLyBTb3J0IHRoZSBhcnJheSBvZiBsaW5lc1xuICAgIGxldCBzcnRMaW5lcyA9IFwiXCI7XG4gICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3J0TGluZXMgKz0gKGxpbmUgKyAnXFxuJyk7IC8vIEFkZCBlYWNoIGxpbmUgdG8gdGhlIHJldHVybmluZyB0ZXh0IHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3J0TGluZXMgPSAoJ1xcbicgKyBzcnRMaW5lcyk7IFxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNydExpbmVzLnRyaW1FbmQoKTsgLy8gUmV0dXJuIHRoZSBsZXhpY2FsbHkgc29ydGVkIGxpbmVzXG59XG5cbi8vIEZ1bmN0aW9uIHRvIHJldmVyc2UgdGhlIHNlbGVjdGVkIGxpbmVzIG9mIHRleHRcbmZ1bmN0aW9uIHJldmVyc2VMaW5lcyhvcmdUZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpbmVzID0gb3JnVGV4dC5zcGxpdChcIlxcblwiKTsgLy8gU3BsaXQgdGhlIG9yaWdpbmFsIHRleHQgaW50byBsaW5lc1xuICAgIGxpbmVzLnJldmVyc2UoKTsgLy8gUmV2ZXJzZSB0aGUgYXJyYXkgb2YgbGluZXNcbiAgICBsZXQgcmV2TGluZXMgPSBcIlwiO1xuICAgIGxpbmVzLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgIGlmIChsaW5lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldkxpbmVzICs9IChsaW5lICsgJ1xcbicpOyAvLyBBZGQgZWFjaCBsaW5lIHRvIHRoZSByZXR1cm5pbmcgdGV4dCBzdHJpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldkxpbmVzID0gKCdcXG4nICsgcmV2TGluZXMpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJldkxpbmVzLnRyaW1FbmQoKTsgLy8gUmV0dXJuIHRoZSByZXZlcnNlZCBsaW5lc1xufVxuXG4vLyBGdW5jdGlvbiB0byBzb3J0IGxpbmVzIGJhc2VkIG9uIHRoZWlyIHZpc3VhbCB3aWR0aFxuZnVuY3Rpb24gc29ydExpbmVzKG9yZ1RleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbGluZXMgPSBvcmdUZXh0LnNwbGl0KFwiXFxuXCIpOyAvLyBTcGxpdCB0aGUgb3JpZ2luYWwgdGV4dCBpbnRvIGxpbmVzXG4gICAgY29uc3QgYXJyMSA9IG5ldyBBcnJhbmdlbWVudChsaW5lcywgcmVhbExpbmVXaWR0aCk7IC8vIENyZWF0ZSBhbiBhcnJhbmdlbWVudCBiYXNlZCBvbiByZWFsIGxpbmUgd2lkdGhcbiAgICByZXR1cm4gb3JkZXJlZFRleHQoYXJyMSk7IC8vIFJldHVybiB0aGUgb3JkZXJlZCB0ZXh0IGZyb20gdGhlIGFycmFuZ2VtZW50XG59XG5cbi8vIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgdmlzdWFsIHdpZHRoIG9mIGEgbGluZVxuZnVuY3Rpb24gcmVhbExpbmVXaWR0aChsaW5lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZ2V0IDJEIGNvbnRleHQnKTtcbiAgICB9XG4gICAgY29udGV4dC5mb250ID0gdGV4dFNpemUgKyBcIiBcIiArIHRleHRGb250O1xuICAgIHJldHVybiBNYXRoLnJvdW5kKDEwMDAwICogKGNvbnRleHQubWVhc3VyZVRleHQobGluZSkud2lkdGgpKTsgLy8gUmV0dXJuIHRoZSB3aWR0aCBhcyBhIG5vcm1hbGlzZWQgaW50ZWdlclxufVxuXG4vLyBGdW5jdGlvbiB0byBzaHVmZmxlIGxpbmVzIHJhbmRvbWx5XG5mdW5jdGlvbiBzaHVmZmxlTGluZXMob3JnVGV4dDogc3RyaW5nKSB7XG4gICAgY29uc3QgbGluZXMgPSBvcmdUZXh0LnNwbGl0KFwiXFxuXCIpOyAvLyBTcGxpdCB0aGUgb3JpZ2luYWwgdGV4dCBpbnRvIGxpbmVzXG4gICAgY29uc3QgYXJyMiA9IG5ldyBBcnJhbmdlbWVudChsaW5lcywgcmFuZG9tTGluZVdpZHRoKTsgLy8gQ3JlYXRlIGFuIGFycmFuZ2VtZW50IGJhc2VkIG9uIHJhbmRvbSBsaW5lIHdpZHRoXG4gICAgcmV0dXJuIG9yZGVyZWRUZXh0KGFycjIpOyAvLyBSZXR1cm4gdGhlIG9yZGVyZWQgdGV4dCBmcm9tIHRoZSBhcnJhbmdlbWVudFxufVxuXG4vLyBGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSB3aWR0aCBmb3IgYSBsaW5lXG5mdW5jdGlvbiByYW5kb21MaW5lV2lkdGgobGluZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBpZiAobGluZS5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgxMDAwMCAqIChNYXRoLnJhbmRvbSgpICsgMSkpOyAvLyBSZXR1cm4gYSByYW5kb20gbnVtYmVyIGFzIGEgbm9ybWFsaXNlZCBpbnRlZ2VyXG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gMDsgLy8gUmV0dXJuIDAgZm9yIGVtcHR5IGxpbmVzXG59XG5cbi8vIENsYXNzIHRvIGFycmFuZ2UgbGluZXMgYmFzZWQgb24gdGhlaXIgY2FsY3VsYXRlZCB3aWR0aHNcbmNsYXNzIEFycmFuZ2VtZW50IHtcbiAgICBbd2lkdGg6IG51bWJlcl06IHN0cmluZztcblxuICAgIC8vIENyZWF0ZXMgYSBrZXkgZm9yIGVhY2ggdW5pcXVlIGxpbmUtd2lkdGggYW5kIGFzc29jaWF0ZXMgbGluZSB0byByZXNwZWN0aXZlIHNsb3RcbiAgICBjb25zdHJ1Y3RvcihsaW5lc0xpc3Q6IHN0cmluZ1tdLCBsaW5lRnVuY3Rpb246IChsaW5lOiBzdHJpbmcpID0+IG51bWJlcikge1xuICAgICAgICBsaW5lc0xpc3QuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gbGluZUZ1bmN0aW9uKGxpbmUpO1xuICAgICAgICAgICAgaWYgKCEod2lkdGggaW4gdGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzW3dpZHRoXSA9IGxpbmU7IC8vIFN0b3JlIHRoZSBsaW5lIGlmIHRoZSB3aWR0aCBrZXkgZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzW3dpZHRoXSA9IHRoaXNbd2lkdGhdLmNvbmNhdChcIlxcblwiICsgbGluZSk7IC8vIENvbmNhdGVuYXRlIGxpbmVzIHdpdGggdGhlIHNhbWUgd2lkdGggc2xvdFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBmaW5hbCBvcmRlcmVkIHRleHQgZnJvbSB0aGUgYXJyYW5nZW1lbnRcbmZ1bmN0aW9uIG9yZGVyZWRUZXh0KG9yZGVyZWRMaW5lczogQXJyYW5nZW1lbnQpOiBzdHJpbmcge1xuICAgIGxldCBmaW5hbFRleHQgPSBcIlwiO1xuICAgIGZvciAoY29uc3QgbGluZUtleSBpbiBvcmRlcmVkTGluZXMpIHtcbiAgICAgICAgZmluYWxUZXh0ICs9IChvcmRlcmVkTGluZXNbbGluZUtleV0gKyAnXFxuJyk7IC8vIEFwcGVuZCBlYWNoIGxpbmUgZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGNoYXJhY3RlclxuICAgIH1cbiAgICByZXR1cm4gZmluYWxUZXh0LnRyaW1FbmQoKTsgLy8gVHJpbSB0aGUgZmluYWwgdGV4dCB0byByZW1vdmUgdHJhaWxpbmcgbmV3bGluZXNcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxzQkFBK0I7QUFFL0IsSUFBcUIsY0FBckIsY0FBeUMsdUJBQU87QUFBQTtBQUFBLEVBRTVDLE1BQU0sU0FBUztBQUdYLFNBQUssV0FBVztBQUFBLE1BQ1osSUFBSTtBQUFBLE1BQ0osTUFBTTtBQUFBLE1BQ04sZ0JBQWdCLENBQUMsV0FBbUI7QUFDaEMsY0FBTSxZQUFZLE9BQU8sYUFBYTtBQUN0QyxlQUFPLGlCQUFpQixjQUFjLFNBQVMsQ0FBQztBQUFBLE1BQ3BEO0FBQUEsSUFDSixDQUFDO0FBR0QsU0FBSyxXQUFXO0FBQUEsTUFDWixJQUFJO0FBQUEsTUFDSixNQUFNO0FBQUEsTUFDTixnQkFBZ0IsQ0FBQyxXQUFtQjtBQUNoQyxjQUFNLFlBQVksT0FBTyxhQUFhO0FBQ3RDLGVBQU8saUJBQWlCLGFBQWEsU0FBUyxDQUFDO0FBQUEsTUFDbkQ7QUFBQSxJQUNKLENBQUM7QUFHRCxTQUFLLFdBQVc7QUFBQSxNQUNaLElBQUk7QUFBQSxN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