From b0222f955ebadbdd9ab835036ca170e50f2f4904 Mon Sep 17 00:00:00 2001 From: Nikita Khromov Date: Tue, 11 Feb 2025 21:51:46 +0700 Subject: [PATCH] Fix bug #73183 --- pdf/src/document.js | 49 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/pdf/src/document.js b/pdf/src/document.js index 02d6487d50..2067cdd52d 100644 --- a/pdf/src/document.js +++ b/pdf/src/document.js @@ -2402,14 +2402,55 @@ var CPresentation = CPresentation || function(){}; CPDFDoc.prototype.MovePages = function(aIndexes, nNewPos) { if (!Array.isArray(aIndexes) || aIndexes.length === 0) return; - aIndexes.sort(function(a, b) { - return a - b; + let nMinIdx = Infinity; + let nMaxIdx = 0; + + aIndexes.forEach(function(idx) { + if (idx < nMinIdx) { + nMinIdx = idx; + } + if (idx > nMaxIdx) { + nMaxIdx = idx; + } }); let _t = this; - aIndexes.forEach(function(oldIndex, i) { - _t.MovePage(oldIndex, nNewPos + i); + + let aLowerIndexes = []; + let aHigherIndexes = []; + + aIndexes.forEach(function(idx) { + if (idx < nNewPos) { + aLowerIndexes.push(idx); + } + if (idx > nNewPos) { + aHigherIndexes.push(idx); + } }); + + + // insert front + if (aLowerIndexes.length !== 0) { + aLowerIndexes.sort(function(a, b) { + return b - a; + }); + + aLowerIndexes.forEach(function(oldIndex, i) { + _t.MovePage(oldIndex, nNewPos - i); + }); + } + // insert back + if (aHigherIndexes.length !== 0) { + aHigherIndexes.sort(function(a, b) { + return a - b; + }); + + let nOffset = aLowerIndexes.length > 0 ? 1 : 0; + + aHigherIndexes.forEach(function(oldIndex, i) { + _t.MovePage(oldIndex, nNewPos + nOffset + i); + }); + } }; CPDFDoc.prototype.SetPageRotate = function(nPage, nAngle) { let oViewer = this.Viewer;