2025-05-12 05:38:44 +09:00

60 lines
1.9 KiB
JavaScript

"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<Number>}
*/
function levelToArray(l) {
return l.split(".").map((char) => {
return parseInt(char, 10);
});
}
/**
@param {Array<Number>}
@return {string}
*/
function arrayToLevel(a) {
return a.join(".");
}
function increment(level) {
level = levelToArray(level);
level[level.length - 1]++;
return arrayToLevel(level);
}
exports.default = moveArticleAfter;