"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const is_1 = __importDefault(require("is")); const removeArticle_1 = __importDefault(require("./removeArticle")); const insertArticle_1 = __importDefault(require("./insertArticle")); /** Returns a new summary, with the an article moved after another article. Unlike `moveArticle`, does not ensure that the article will be found at the target's level plus one. @param {Summary} summary @param {String|SummaryArticle} origin @param {String|SummaryArticle} afterTarget @return {Summary} */ function moveArticleAfter(summary, origin, afterTarget) { // Coerce to level const originLevel = is_1.default.string(origin) ? origin : origin.getLevel(); const afterTargetLevel = is_1.default.string(afterTarget) ? afterTarget : afterTarget.getLevel(); const article = summary.getByLevel(originLevel); const targetLevel = increment(afterTargetLevel); if (targetLevel < origin) { // Remove first const removed = (0, removeArticle_1.default)(summary, originLevel); // Insert then return (0, insertArticle_1.default)(removed, article, targetLevel); } else { // Insert right after first const inserted = (0, insertArticle_1.default)(summary, article, targetLevel); // Remove old one return (0, removeArticle_1.default)(inserted, originLevel); } } /** @param {string} @return {Array} */ function levelToArray(l) { return l.split(".").map((char) => { return parseInt(char, 10); }); } /** @param {Array} @return {string} */ function arrayToLevel(a) { return a.join("."); } function increment(level) { level = levelToArray(level); level[level.length - 1]++; return arrayToLevel(level); } exports.default = moveArticleAfter;