Skip to content

Commit 41b3c7c

Browse files
Keep annotations fixed when rotating pages (#194)
1 parent 849c53d commit 41b3c7c

1 file changed

Lines changed: 2 additions & 0 deletions

File tree

playground/web-annotations.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,5 @@
9999
- [Skip the Delete confirmation popup dialog for annotations](https://www.nutrient.io/playground?p=eyJ2IjoxLCJqcyI6Ii8vVGl0bGU6IFNraXAgdGhlIERlbGV0ZSBjb25maXJtYXRpb24gcG9wLXVwIGRpYWxvZyBmb3IgQW5ub3RhdGlvbnNcblBTUERGS2l0LmxvYWQoe1xuICAuLi5iYXNlT3B0aW9ucyxcbiAgdGhlbWU6IFBTUERGS2l0LlRoZW1lLkRBUkssXG59KS50aGVuKChpbnN0YW5jZSkgPT4ge1xuICAvLyBTa2lwIGFubm90YXRpb24gZGVsZXRlIGNvbmZpcm1hdGlvbiBwb3B1cFxuICBpbnN0YW5jZS5hZGRFdmVudExpc3RlbmVyKFwiYW5ub3RhdGlvbnMud2lsbENoYW5nZVwiLCAoZXZlbnQpID0%252BIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgZGVsZXRlIHN0YXJ0IGFjdGlvblxuICAgIGlmIChldmVudC5yZWFzb24gPT09IFBTUERGS2l0LkFubm90YXRpb25zV2lsbENoYW5nZVJlYXNvbi5ERUxFVEVfU1RBUlQpIHtcbiAgICAgIC8vIERlbGV0ZSB0aGUgYW5ub3RhdGlvbiBpbW1lZGlhdGVseVxuICAgICAgaW5zdGFuY2UuZGVsZXRlKGV2ZW50LmFubm90YXRpb25zLmdldCgwKSk7XG4gICAgICAvLyBDbGljayB0aGUgY2FuY2VsIGJ1dHRvbiB0byBwcmV2ZW50IHRoZSBkaWFsb2cgZnJvbSBzaG93aW5nXG4gICAgICBpbnN0YW5jZS5jb250ZW50RG9jdW1lbnRcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoXCIuUFNQREZLaXQtQ29uZmlybS1EaWFsb2ctQnV0dG9uLUNhbmNlbFwiKVxuICAgICAgICAuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJjc3MiOiIvKiBBZGQgeW91ciBDU1MgaGVyZSAqL1xuIiwic2V0dGluZ3MiOnsiZmlsZU5hbWUiOiJiYXNpYy5wZGYifX0%253D)
100100
- This hook listens for the annotation deletion start event and immediately deletes the targeted annotation. It then clicks the dialog’s Cancel button to suppress the confirmation UI. The result is a seamless delete action with no popup interrupting the workflow
101101

102+
- [Keep annotations fixed when rotating a page](https://www.nutrient.io/demo/sandbox?p=eyJqcyI6Ik51dHJpZW50Vmlld2VyLmxvYWQoe1xuICAuLi5iYXNlT3B0aW9ucyxcbiAgaW5zdGFudEpTT046IEpTT04ucGFyc2UoXG4gICAgYHtcImFubm90YXRpb25zXCI6W3tcImJib3hcIjpbNDYuODM4LDMwLjQsMzE4LjQsMjQwXSxcImNyZWF0ZWRBdFwiOlwiMjAyNi0wMy0xM1QxMzoxMjo1MlpcIixcImNyZWF0b3JOYW1lXCI6XCJrZW5AYXdzLm5ldFwiLFwiaWRcIjpcIjAxS0tLTjg0OVFIRlg5Q0pWU1hBRDZQR0dDXCIsXCJuYW1lXCI6XCIwMUtLS044NDlRSEZYOUNKVlNYQUQ2UEdHQ1wiLFwib3BhY2l0eVwiOjEsXCJwYWdlSW5kZXhcIjowLFwic3Ryb2tlQ29sb3JcIjpcIiNGRjAwMDBcIixcInN0cm9rZVdpZHRoXCI6NSxcInR5cGVcIjpcInBzcGRma2l0L3NoYXBlL2VsbGlwc2VcIixcInVwZGF0ZWRBdFwiOlwiMjAyNi0wMy0xM1QxMzoxMjo1N1pcIixcInZcIjoyfV0sXCJmb3JtYXRcIjpcImh0dHBzOi8vcHNwZGZraXQuY29tL2luc3RhbnQtanNvbi92MVwifWBcbiAgKSxcbn0pLnRoZW4oYXN5bmMgKGluc3RhbmNlKSA9PiB7XG4gIC8vIFdpZGdldCBhbm5vdGF0aW9ucyAoZm9ybSBmaWVsZHMpIGhhdmUgYWRkaXRpb25hbEFjdGlvbnMgbGlrZSBvblBvaW50ZXJEb3duXG4gIC8vIHdoaWNoIHRoZSBTREsgcmVqZWN0cyBvbiB1cGRhdGUg4oCUIGV4Y2x1ZGUgdGhlbSBmcm9tIGNhY2hlL3Jlc3RvcmVcbiAgY29uc3QgRVhDTFVERURfVFlQRVMgPSBbXG4gICAgTnV0cmllbnRWaWV3ZXIuQW5ub3RhdGlvbnMuV2lkZ2V0QW5ub3RhdGlvbixcbiAgICBOdXRyaWVudFZpZXdlci5Bbm5vdGF0aW9ucy5MaW5rQW5ub3RhdGlvbixcbiAgXTtcblxuICBmdW5jdGlvbiBpc0NhY2hlYWJsZShhbm5vdGF0aW9uKSB7XG4gICAgcmV0dXJuICFFWENMVURFRF9UWVBFUy5zb21lKChUeXBlKSA9PiBhbm5vdGF0aW9uIGluc3RhbmNlb2YgVHlwZSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBjYWNoZUFubm90YXRpb25Qb3NpdGlvbnMocGFnZUluZGV4ZXMpIHtcbiAgICBjb25zdCBjYWNoZSA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHBhZ2VJbmRleCBvZiBwYWdlSW5kZXhlcykge1xuICAgICAgY29uc3QgYW5ub3RhdGlvbnMgPSBhd2FpdCBpbnN0YW5jZS5nZXRBbm5vdGF0aW9ucyhwYWdlSW5kZXgpO1xuICAgICAgYW5ub3RhdGlvbnMuZmlsdGVyKGlzQ2FjaGVhYmxlKS5mb3JFYWNoKChhbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIGNhY2hlLnNldChhbm5vdGF0aW9uLmlkLCB7XG4gICAgICAgICAgYm91bmRpbmdCb3g6IGFubm90YXRpb24uYm91bmRpbmdCb3gsXG4gICAgICAgICAgcGFnZUluZGV4OiBhbm5vdGF0aW9uLnBhZ2VJbmRleCxcbiAgICAgICAgICByZWN0czpcbiAgICAgICAgICAgIGFubm90YXRpb24gaW5zdGFuY2VvZiBOdXRyaWVudFZpZXdlci5Bbm5vdGF0aW9ucy5NYXJrdXBBbm5vdGF0aW9uXG4gICAgICAgICAgICAgID8gYW5ub3RhdGlvbi5yZWN0c1xuICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJlc3RvcmVBbm5vdGF0aW9uUG9zaXRpb25zKGNhY2hlKSB7XG4gICAgZm9yIChjb25zdCBbaWQsIHsgYm91bmRpbmdCb3gsIHBhZ2VJbmRleCwgcmVjdHMgfV0gb2YgY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBjb25zdCBhbm5vdGF0aW9ucyA9IGF3YWl0IGluc3RhbmNlLmdldEFubm90YXRpb25zKHBhZ2VJbmRleCk7XG4gICAgICBjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZmluZCgoYSkgPT4gYS5pZCA9PT0gaWQpO1xuICAgICAgaWYgKGFubm90YXRpb24pIHtcbiAgICAgICAgbGV0IHVwZGF0ZWRBbm5vdGF0aW9uID0gYW5ub3RhdGlvbi5zZXQoXCJib3VuZGluZ0JveFwiLCBib3VuZGluZ0JveCk7XG5cbiAgICAgICAgaWYgKHJlY3RzKSB7XG4gICAgICAgICAgdXBkYXRlZEFubm90YXRpb24gPSB1cGRhdGVkQW5ub3RhdGlvbi5zZXQoXCJyZWN0c1wiLCByZWN0cyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBpbnN0YW5jZS51cGRhdGUodXBkYXRlZEFubm90YXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHJvdGF0ZVBhZ2VzV2l0aG91dE1vdmluZ0Fubm90YXRpb25zKHBhZ2VJbmRleGVzLCByb3RhdGVCeSkge1xuICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgY2FjaGVBbm5vdGF0aW9uUG9zaXRpb25zKHBhZ2VJbmRleGVzKTtcbiAgICBhd2FpdCBpbnN0YW5jZS5hcHBseU9wZXJhdGlvbnMoW1xuICAgICAgeyB0eXBlOiBcInJvdGF0ZVBhZ2VzXCIsIHBhZ2VJbmRleGVzLCByb3RhdGVCeSB9LFxuICAgIF0pO1xuICAgIGF3YWl0IHJlc3RvcmVBbm5vdGF0aW9uUG9zaXRpb25zKGNhY2hlKTtcbiAgfVxuXG4gIGF3YWl0IHJvdGF0ZVBhZ2VzV2l0aG91dE1vdmluZ0Fubm90YXRpb25zKFswXSwgOTApO1xufSk7XG4iLCJjc3MiOiIvKiBBZGQgeW91ciBDU1MgaGVyZSAqL1xuIiwic2V0dGluZ3MiOnsiZmlsZU5hbWUiOiJiYXNpYy5wZGYiLCJ1c2VEeW5hbWljRm9udHMiOnRydWUsImN1c3RvbUZvbnRGaWxlTmFtZXMiOltdfSwidiI6MX0%3D)
103+
- Demonstrates how to prevent annotations from moving when pages are rotated via `applyOperations`. The workaround caches each annotation's `boundingBox` and `rects` for type `MarkupAnnotations` before the rotation and restores it afterward, since `rotatePages` currently transforms annotation coordinates by design.

0 commit comments

Comments
 (0)